← 動的パーツギャラリーへ戻る

パーツ番号 08-14-03 ・ JavaScript使用

文字ごとに反応するマグネット見出し

カーソルに近い文字だけが個別に引き寄せられ、見出し全体が生き物のように揺れます。WordPressのトップページの目を引くタイトル演出に使えます。

js

プレビュー

ソースコード

HTML

<h3 class="d08-14-03-heading" aria-label="MAGNET"><span>M</span><span>A</span><span>G</span><span>N</span><span>E</span><span>T</span></h3>

CSS

.d08-14-03-heading{display:flex;gap:3px;font-size:34px;font-weight:800;color:#2a2d3a;margin:0;letter-spacing:.02em}
        .d08-14-03-heading span{display:inline-block;transition:transform .12s ease-out}

JavaScript

(function(){
        var wrap=document.querySelector('#item-08-14-03 .d08-14-03');
        var spans=wrap?wrap.querySelectorAll('.d08-14-03-heading span'):null;if(!wrap||!spans||!spans.length)return;
        wrap.addEventListener('mousemove',function(e){
          spans.forEach(function(s){
            var r=s.getBoundingClientRect();
            var cx=r.left+r.width/2,cy=r.top+r.height/2;
            var dx=e.clientX-cx,dy=e.clientY-cy;
            var dist=Math.hypot(dx,dy);
            var radius=70;
            if(dist<radius){
              var p=(1-dist/radius)*0.5;
              s.style.transform='translate('+(dx*p)+'px,'+(dy*p)+'px)';
            }else{
              s.style.transform='';
            }
          });
        });
        wrap.addEventListener('mouseleave',function(){spans.forEach(function(s){s.style.transform='';});});
      })();

クラス名 .d08-14-03 は本ライブラリ内での識別用です。複数のパーツを同じページで使う場合は、重複しないよう名前を変更してください。