dom_dom0900_008

カルーセルで自動再生(オートプレイ)を実装する際、ユーザーがスライダー上にマウスホバー中は一時停止したい。この要件を満たすのに適切な実装はどれですか?

  1. setTimeoutを1回だけ使う
  2. setIntervalで自動送りし、mouseenterで停止・mouseleaveで再開する
  3. requestAnimationFrameで毎フレーム送る
  4. CSSだけで実現する
正解
  1. setIntervalで自動送りし、mouseenterで停止・mouseleaveで再開する
解説

setIntervalで一定間隔の送りを行い、ユーザー操作(ホバー)中はclearIntervalで一時停止、離れたら再開するのが一般的です。

使用例(サンプルコード)

[ html ]

<div id="carousel">...</div>
<script>
let timer;
function start(){ timer = setInterval(()=>nextSlide(), 3000); }
function stop(){ clearInterval(timer); }
const el = document.getElementById('carousel');
el.addEventListener('mouseenter', stop);
el.addEventListener('mouseleave', start);
start();
function nextSlide(){ /* スライド移動処理 */ }
</script>