パーツ番号 08-09-12 ・ JavaScript使用
順番にポップする星レーティング
星をクリックすると選択した星まで左から順番にポンッと弾みながら塗りつぶされます。WordPressのレビュー投稿フォームや商品評価UIに使えます。
プレビュー
ソースコード
HTML
<div class="d08-09-12-rating" role="radiogroup" aria-label="満足度を星で評価">
<button class="d08-09-12-star" type="button" role="radio" aria-checked="false" aria-label="1つ星" data-val="1">★</button>
<button class="d08-09-12-star" type="button" role="radio" aria-checked="false" aria-label="2つ星" data-val="2">★</button>
<button class="d08-09-12-star" type="button" role="radio" aria-checked="false" aria-label="3つ星" data-val="3">★</button>
<button class="d08-09-12-star" type="button" role="radio" aria-checked="false" aria-label="4つ星" data-val="4">★</button>
<button class="d08-09-12-star" type="button" role="radio" aria-checked="false" aria-label="5つ星" data-val="5">★</button>
</div>
<p class="d08-09-12-msg">星をクリックして評価</p>CSS
.d08-09-12-rating{display:flex;gap:6px}
.d08-09-12-star{background:none;border:none;font-size:30px;line-height:1;color:#d8dae2;cursor:pointer;padding:2px;transition:color .15s}
.d08-09-12-star.is-on{color:#ffb020}
.d08-09-12-star.is-pop{animation:d08-09-12-pop .4s cubic-bezier(.3,1.8,.4,1)}
@keyframes d08-09-12-pop{0%{transform:scale(1)}50%{transform:scale(1.4)}100%{transform:scale(1)}}
.d08-09-12-msg{margin:10px 0 0;font-size:12px;font-weight:600;color:#8a8f9c;text-align:center}JavaScript
(function(){
var root=document.getElementById('item-08-09-12');if(!root)return;
var stars=[].slice.call(root.querySelectorAll('.d08-09-12-star'));
var msg=root.querySelector('.d08-09-12-msg');
if(!stars.length||!msg)return;
var labels={1:'いまいち',2:'ふつう',3:'まあまあ',4:'良い',5:'最高!'};
stars.forEach(function(star){
star.addEventListener('click',function(){
var val=Number(star.getAttribute('data-val'));
stars.forEach(function(s,i){
var on=i<val;
s.classList.toggle('is-on',on);
s.setAttribute('aria-checked',i===val-1?'true':'false');
if(on){
(function(s,delay){
setTimeout(function(){
s.classList.remove('is-pop');void s.offsetWidth;s.classList.add('is-pop');
},delay);
})(s,i*40);
} else {
s.classList.remove('is-pop');
}
});
msg.textContent=labels[val]+'('+val+'/5)';
});
});
})();クラス名 .d08-09-12 は本ライブラリ内での識別用です。複数のパーツを同じページで使う場合は、重複しないよう名前を変更してください。