← 一覧へ
mouseStalker
好きな要素をポインタ(マウス/タッチ)の動きに追従させる。(PCのみ)追従にはイージング(lerp)による遅延を付けて「一瞬遅れてついてくる」動きにする。countで数珠つなぎのトレイルに、directionで移動方向への傾きに、targetsで出現範囲をマスクできる。ページ全体(ブラウザの外)からポインタが出るとフェードアウトする(fadeDurationで調整可)。
Demos
エリア内にポインタを合わせると追従要素が出現する(targetsによるマスク)。エリアから出ると隠れ、他のデモとは干渉しない。
1. デフォルト
セレクタに .js-mouseStalker を付与して呼び出すだけ。ease / count / offset / direction はすべて既定値。
コードを見る
<div class="p-mouseStalker__area">
<div class="js-mouseStalker">
<div class="p-mouseStalker__dot"></div>
</div>
</div>
import { mouseStalker } from 'form-snippets';
mouseStalker({ targets: ['#mouseStalkerBasic'] }); 2. ease(追従の緩さ)
同じエリア内で ease を変えた2つの要素を比較できる。青(ease: 0.04)はゆっくり大きく遅れ、オレンジ(ease: 0.5)はほぼ遅延なく追従する。
コードを見る
<div class="js-mouseStalker--easeSlow"><div class="p-mouseStalker__dot p-mouseStalker__dot--slow"></div></div>
<div class="js-mouseStalker--easeFast"><div class="p-mouseStalker__dot p-mouseStalker__dot--fast"></div></div>
mouseStalker({ container: '.js-mouseStalker--easeSlow', ease: 0.04, targets: ['#mouseStalkerEase'] });
mouseStalker({ container: '.js-mouseStalker--easeFast', ease: 0.5, targets: ['#mouseStalkerEase'] }); 3. count(数珠つなぎ)
countで要素を複製すると、後ろの要素が1つ前の要素を追いかけるトレイルになる。
コードを見る
<div class="js-mouseStalker--count"><div class="p-mouseStalker__dot p-mouseStalker__dot--trail"></div></div>
mouseStalker({
container: '.js-mouseStalker--count',
count: 8,
ease: 0.3,
targets: ['#mouseStalkerCount'],
}); 4. offsetX / offsetY
グレーの要素は offset なし(ポインタの位置そのもの)、ピンクの要素は offsetX/offsetY で左上方向にずらしている。
コードを見る
<div class="js-mouseStalker--offsetRef"><div class="p-mouseStalker__dot p-mouseStalker__dot--ref"></div></div>
<div class="js-mouseStalker--offsetShift"><div class="p-mouseStalker__dot p-mouseStalker__dot--shift"></div></div>
mouseStalker({ container: '.js-mouseStalker--offsetRef', ease: 0.3, targets: ['#mouseStalkerOffset'] });
mouseStalker({
container: '.js-mouseStalker--offsetShift',
offsetX: -50,
offsetY: -50,
targets: ['#mouseStalkerOffset'],
}); 5. direction(移動方向に傾ける)
矢印を .js-mouseStalker__inner で囲むと、その要素だけが移動方向に回転する(コンテナ自身は非回転のまま位置決めする)。
コードを見る
<div class="js-mouseStalker--direction">
<div class="js-mouseStalker__inner">
<img class="p-mouseStalker__arrow" src="..." alt="">
</div>
</div>
mouseStalker({
container: '.js-mouseStalker--direction',
direction: true,
targets: ['#mouseStalkerDirection'],
}); 6. targets(マスク)
円はエリアより大きいので、境界をまたぐと重なっている部分だけが見える。targets には複数セレクタを配列で渡せるので、この例では離れた2つのエリアどちらでも同じ要素が出現する。
コードを見る
<div class="js-mouseStalker--targets"><div class="p-mouseStalker__dot p-mouseStalker__dot--big"></div></div>
mouseStalker({
container: '.js-mouseStalker--targets',
targets: ['#mouseStalkerTargetsA', '#mouseStalkerTargetsB'],
});