Result
スクロールするとテキストにアニメーションしながらハイライトする、というもの。
通常のハイライトよりも目を惹く印象です。コードはVanillaとなっています。
JavaScript
(function (document) {
const markers = [...document.querySelectorAll('mark')];
const observer = new IntersectionObserver(entries => {
entries.forEach((entry) => {
if (entry.intersectionRatio > 0) {
entry.target.style.animationPlayState = 'running';
observer.unobserve(entry.target);
}
});
}, {
threshold: 0.8
});
markers.forEach(mark => {
observer.observe(mark);
});
})(document);
Intersection Observer APIで要素に交差したらイベントが発火するようになってます。
css
mark {
--color1: springgreen;
--color2: springgreen;
--bg-height: 40%;
all: unset;
background-image: linear-gradient(var(--color1), var(--color2));
background-position: 0 100%;
background-repeat: no-repeat;
background-size: 0 var(--bg-height);
animation: highlight 800ms 1 ease-out;
animation-fill-mode: forwards;
animation-play-state: paused;
}
@-webkit-keyframes highlight {
to {
background-size: 100% var(--bg-height);
}
}
@keyframes highlight {
to {
background-size: 100% var(--bg-height);
}
}
ハイライトのスタイリングです。
html
<p>経済面では、日本の株式上場企業の本社のほとんどが東京に集中し、(東京圏では)購買力平価(PPP)を基にしても東京都市圏のGDPは1兆5369億ドル(2014年)であり、<mark>世界的な経済都市であり、大消費地でもある。 </mark></p>
あとは任意のテキストを交差ポイントに指定すれば完成です。
