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

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

読了時間カウントダウンウィジェット

スクロールに応じて右上バッジの「残り分数」がカウントダウンされます。WordPress記事の読了目安表示に。スクロールで動作します。

scrolljs

プレビュー

ソースコード

HTML

<div class="d06-09-06-wrap">
          <div class="d06-09-06-badge">⏱ 残り <b class="d06-09-06-min">4</b>分</div>
          <div class="d06-09-06-body">
            <section><h4>はじめに</h4><p>スクロールするほどバッジの残り時間が減っていきます。読み終える目安が一目で分かります。</p></section>
            <section><h4>効果</h4><p>残り時間の表示は「あと少しで読み終わる」という感覚を作り、離脱を防ぎます。</p></section>
            <section><h4>実装</h4><p>推定読了時間とスクロール割合から、残り分数を都度計算して表示を更新します。</p></section>
            <section><h4>まとめ</h4><p>読み切ると残り時間は0分になり、達成感を演出できます。</p></section>
          </div>
        </div>

CSS

.prev.d06-09-06{padding:0;display:block}
        .d06-09-06-wrap{position:relative;height:260px}
        .d06-09-06-badge{position:absolute;top:12px;right:12px;font-size:11px;font-weight:700;color:#c2410c;background:#fff7ed;
          padding:6px 12px;border-radius:20px;z-index:2;transition:color .25s,background .25s}
        .d06-09-06-badge.is-done{color:#059669;background:#ecfdf5}
        .d06-09-06-body{height:100%;overflow-y:auto;box-sizing:border-box;padding:52px 18px 16px}
        .d06-09-06-body section{padding:6px 0 14px;border-bottom:1px dashed #eef0f5}
        .d06-09-06-body h4{margin:0 0 6px;font-size:13px;color:#242a3d}
        .d06-09-06-body p{margin:0;font-size:12px;color:#666c80;line-height:1.7}

JavaScript

(function(){
        var root=document.getElementById('item-06-09-06');if(!root)return;
        var body=root.querySelector('.d06-09-06-body');
        var min=root.querySelector('.d06-09-06-min');
        var badge=root.querySelector('.d06-09-06-badge');
        var TOTAL=4;
        function upd(){
          var max=body.scrollHeight-body.clientHeight;
          var pct=max>0?Math.min(1,body.scrollTop/max):0;
          var rem=Math.max(0,Math.ceil(TOTAL*(1-pct)));
          min.textContent=rem;
          badge.classList.toggle('is-done',rem===0);
        }
        body.addEventListener('scroll',upd);upd();
      })();

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