パーツ番号 02-01-41 ・ JavaScript使用
パーティクル分解見出し
クリックすると見出しの文字が紙吹雪のように一瞬散らばり、すぐに元の並びへ再構成される演出。キャンペーンのCTAボタン隣接見出しなどクリックを誘いたい場面に。
プレビュー
ソースコード
HTML
<div class="d02-01-41-stage">
<h4 class="d02-01-41-h">SHATTER</h4>
<button type="button" class="d02-01-41-btn">クリックで分解</button>
</div>CSS
.d02-01-41 .d02-01-41-stage{ text-align:center; }
.d02-01-41 .d02-01-41-h{
font-size:28px;
font-weight:800;
letter-spacing:.06em;
color:#1a2333;
}
.d02-01-41 .d02-01-41-ch{
display:inline-block;
transition:transform .6s cubic-bezier(.22,1,.36,1), opacity .6s ease;
}
.d02-01-41 .d02-01-41-btn{
display:block;
margin:14px auto 0;
padding:8px 18px;
font-size:12px;
font-weight:700;
letter-spacing:.06em;
color:#fff;
background:#1a2333;
border:none;
border-radius:20px;
cursor:pointer;
}JavaScript
(function(){
var h = document.querySelector('#item-02-01-41 .d02-01-41-h');
var btn = document.querySelector('#item-02-01-41 .d02-01-41-btn');
if(!h || !btn) return;
var text = h.textContent;
h.textContent = '';
var chars = [];
for(var i = 0; i < text.length; i++){
var s = document.createElement('span');
s.className = 'd02-01-41-ch';
s.textContent = text[i] === ' ' ? ' ' : text[i];
h.appendChild(s);
chars.push(s);
}
btn.addEventListener('click', function(){
chars.forEach(function(ch){
var dx = (Math.random() - 0.5) * 160;
var dy = (Math.random() - 0.5) * 120;
var rot = (Math.random() - 0.5) * 180;
ch.style.transform = 'translate(' + dx + 'px,' + dy + 'px) rotate(' + rot + 'deg)';
ch.style.opacity = '0';
});
setTimeout(function(){
chars.forEach(function(ch){
ch.style.transform = 'translate(0,0) rotate(0deg)';
ch.style.opacity = '1';
});
}, 650);
});
})();クラス名 .d02-01-41 は本ライブラリ内での識別用です。複数のパーツを同じページで使う場合は、重複しないよう名前を変更してください。