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

パーツ番号 06-04-06 ・ JavaScript使用

バイラル達成メーター

目標いいね数までの進捗をバーで可視化し、伸びるたびに数値が更新される。キャンペーンLPの応援ゲージに。

js

プレビュー

ソースコード

HTML

<div class="d06-04-06-wrap">
          <p class="d06-04-06-text">あと<strong class="d06-04-06-remain">100</strong>いいねでランクアップ!</p>
          <div class="d06-04-06-bar"><div class="d06-04-06-fill"></div></div>
          <span class="d06-04-06-pct">0%</span>
        </div>

CSS

.d06-04-06-wrap { width:100%; max-width:220px; display:flex; flex-direction:column; gap:8px; align-items:center; }
        .d06-04-06-text { font-size:12px; color:#374151; text-align:center; margin:0; }
        .d06-04-06-text strong { color:#ec4899; font-size:15px; }
        .d06-04-06-bar { width:100%; height:10px; border-radius:999px; background:#f1f5f9; overflow:hidden; }
        .d06-04-06-fill { height:100%; width:0%; border-radius:999px; background:linear-gradient(90deg,#f472b6,#ec4899); transition:width .6s ease; }
        .d06-04-06-pct { font-size:11px; color:#9ca3af; }

JavaScript

(function(){
          var article = document.currentScript.closest('article');
          var root = article.querySelector('.d06-04-06');
          var fill = root.querySelector('.d06-04-06-fill');
          var pct = root.querySelector('.d06-04-06-pct');
          var remain = root.querySelector('.d06-04-06-remain');
          var target = 100;
          var progress = 0;
          function tick(){
            progress += 6 + Math.random()*10;
            if(progress >= 100){ progress = 100; }
            fill.style.width = progress + '%';
            pct.textContent = Math.round(progress) + '%';
            remain.textContent = Math.max(0, Math.round(target - target*progress/100));
            if(progress >= 100){
              setTimeout(function(){ progress = 0; fill.style.width='0%'; pct.textContent='0%'; remain.textContent=target; setTimeout(tick, 900); }, 1200);
            } else {
              setTimeout(tick, 900);
            }
          }
          setTimeout(tick, 700);
        })();

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