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 { --color 1: springgreen; --color 2: springgreen; --bg- height : 40% ; all : unset; background-image : linear-gradient (var(--color 1 ), var(--color 2 )); background-position : 0 100% ; background-repeat : no-repeat ; background-size : 0 var(--bg-height); animation : highlight 800 ms 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 > |
あとは任意のテキストを交差ポイントに指定すれば完成です。