CSSアニメーションを使っている。
window.requestAnimationFrame()
で定期的に、animationをセットしたCSSクラスをトグルしている。(1)
(2)
<img id="targetIcon1" src="img/icon.png" />
.shake1 {
animation: shake1 0.1s linear;
}
@keyframes shake1 {
0% { transform: translate(2px, 0px); }
50% { transform: translate(-4px, 0px); }
100% { transform: translate(2px, 0px); }
}
/**
* DOM要素を定期的にアニメーションする。
* @param {object} elm - DOM element
* @param {string} className - CSS class name
* @param {number} speed - 何秒おきに動くか
*/
const addPeriodicMoving = (elm, className, speed) => {
let cnt = 0;
const loop = () => {
if (cnt % parseInt(speed*30) === 0) {
elm.classList.toggle(className);
}
cnt++;
window.requestAnimationFrame(loop);
};
window.requestAnimationFrame(loop);
};
addPeriodicMoving(
document.querySelector('#targetIcon1'),
'shake1',
4
);
参考
ソースコードはこちら