ということで、CSSスプライトの勉強も兼ねて、SlackのEmoji画像を利用してスロットをつくろうと思う。
background-imageとbackground-positionについて
1枚の画像から表示したい部分だけを表示するためには、background-imageプロパティとbackground-positionプロパティを使う。
- background-image
- 要素に対して背景画像を設定する
- ex. background-image: url(http://example.com/img/icon-set.png);
- background-position
- background-originを基準に、背景画像の位置をセットする
- ex. background-position: 10px 10px;
background-imageに背景画像を設定し、width, heightで表示範囲(窓みたいなイメージ)を指定する。あとは、background-positionで背景画像の位置をずらして、窓から表示されるように調整する。
その他のbackground系プロパティについては、以下の記事にまとめているので参考にしてほしい。
Slack's Emojiスロットをつくる
CSSスプライトについてひと通り学んだので、実際にSlackのEmoji画像をつかってスロットを作ってみる。
Emoji画像は41x41のアイコンから成っているので、単純にX軸、Y軸ともに41分割すればよい。
時間経過とともにbackground-positionを(0, 0)→(0, 2.5)→(0, 5)→...→(100, 95)→(100, 97.5)→(100, 100)に変化させていく。
<!-- index.html -->
<div id="slot"></div>
<button id="start" class="btn btn-start">Start</button>
<button id="stop" class="btn btn-stop">Stop</button>
/* style.css */
#slot {
margin: 10px;
width: 60px;
height: 60px;
background: url(https://cdx.slack-edge.com/bfaba/img/emoji_2016_06_08/sheet_apple_64_indexed_256colors.png);
}
.btn {
width: 80px;
height: 30px;
}
// script.js
const slot = document.getElementById('slot');
let x = 0;
let y = 0;
let slotTimer = null;
const start = document.getElementById('start');
start.addEventListener('click', () => {
if (slotTimer !== null) return;
slotTimer = setInterval(() => {
slot.style.backgroundPositionX = x + '%';
slot.style.backgroundPositionY = y + '%';
if (y < 100) {
y += 2.5;
} else {
y = 0;
if (x < 100) {
x += 2.5;
} else {
x = 0;
}
}
}, 10);
});
const stop = document.getElementById('stop');
stop.addEventListener('click', () => {
clearInterval(slotTimer);
slotTimer = null;
});
※ Slackの画像を直接参照しているので、画像消えるかも。
以上
written by @bc_rikko
0 件のコメント :
コメントを投稿