パーツ番号 02-08-07 ・ JavaScript使用
読了インジケータ連動テキスト
サイドの読了ゲージがスクロールに連動して伸び、本文全体の文字色も読み進めるほど濃く変化します。長文記事の読了率を可視化する演出に使えます。
プレビュー
ソースコード
HTML
<div class="d02-08-07-stage">
<div class="d02-08-07-rail"><span class="d02-08-07-fill"></span></div>
<span class="d02-08-07-pct">0%</span>
<div class="d02-08-07-scroll">
<div class="d02-08-07-pad-top"></div>
<p class="d02-08-07-p">この記事は読み進めるほど、文字が濃くはっきりと変化します。</p>
<p class="d02-08-07-p">左のゲージが現在の読了位置をリアルタイムに示します。</p>
<p class="d02-08-07-p">長文コンテンツで、読者に進捗を意識させたいときに有効です。</p>
<p class="d02-08-07-p">最後まで読み切ると、ゲージも文字色も完全に満たされます。</p>
<div class="d02-08-07-pad-bottom"></div>
</div>
</div>CSS
.prev.d02-08-07{padding:0;display:block}
.d02-08-07-stage{position:relative;width:100%;height:100%;min-height:260px;overflow:hidden;background:#fff}
.d02-08-07-rail{
position:absolute;left:14px;top:18px;bottom:18px;width:4px;
background:#e2e8f0;border-radius:2px;overflow:hidden;z-index:2;
}
.d02-08-07-fill{
position:absolute;left:0;bottom:0;width:100%;height:0%;
background:linear-gradient(180deg,#06b6d4,#2563eb);border-radius:2px;
}
.d02-08-07-pct{
position:absolute;top:10px;right:14px;font-size:11px;font-weight:700;
color:#2563eb;z-index:2;font-variant-numeric:tabular-nums;
}
.d02-08-07-scroll{position:absolute;inset:0;overflow-y:auto;padding:0 24px 0 34px}
.d02-08-07-pad-top{height:30px}
.d02-08-07-pad-bottom{height:120px}
.d02-08-07-p{margin:0 0 20px;font-size:14.5px;line-height:1.9;color:#cbd5e1;transition:color .05s linear}JavaScript
(function(){
var scroller = document.querySelector('#item-02-08-07 .d02-08-07-scroll');
var fill = document.querySelector('#item-02-08-07 .d02-08-07-fill');
var pct = document.querySelector('#item-02-08-07 .d02-08-07-pct');
var paras = document.querySelectorAll('#item-02-08-07 .d02-08-07-p');
if(!scroller || !fill || !pct) return;
function mix(c1, c2, t){
return [
Math.round(c1[0] + (c2[0] - c1[0]) * t),
Math.round(c1[1] + (c2[1] - c1[1]) * t),
Math.round(c1[2] + (c2[2] - c1[2]) * t)
];
}
var from = [203, 213, 225];
var to = [26, 35, 51];
function update(){
var max = scroller.scrollHeight - scroller.clientHeight;
var progress = max > 0 ? Math.min(Math.max(scroller.scrollTop / max, 0), 1) : 0;
fill.style.height = (progress * 100).toFixed(0) + '%';
pct.textContent = Math.round(progress * 100) + '%';
var c = mix(from, to, progress);
var color = 'rgb(' + c[0] + ',' + c[1] + ',' + c[2] + ')';
for(var i = 0; i < paras.length; i++){ paras[i].style.color = color; }
}
scroller.addEventListener('scroll', update, {passive:true});
update();
})();クラス名 .d02-08-07 は本ライブラリ内での識別用です。複数のパーツを同じページで使う場合は、重複しないよう名前を変更してください。