【CSS】【javascript】スクロールしたら、アンダーラインが引かれるアニメーションの実装

やりたいこと
以下のような、スクロールしたら、アンダーラインが 引かれるアニメーションをCSSとjavascriptで 実装したいと思います。
HTML
アンダーラインを引きたい個所を<span> で囲み、クラス名を指定します。
<p>親譲りの無鉄砲で小供の時から
<span class="marker">損ばかりしている</span>。
</p>
CSS
2-6行目 : ピンクのアンダーライン

7-10行目 : アンダーラインをアニメーションさせるCSS。 最初はbackground-size: 0;なので、何も表示されない。
12-14行目 : スクロールし、画面に表れたら、クラスを追加し、 アニメーションさせる。
.marker {
border-top-left-radius: 50px;
border-top-right-radius: 50px;
border-bottom-left-radius: 20px;
border-bottom-right-radius: 20px;
background: linear-gradient(transparent 0%, #ff66ff8f 80%);
background-position: 0;
background-size: 0;
background-repeat: no-repeat;
transition: background 3s;
}
.marker.active {
background-size: 100% ;
}
javascript
1行目 : アンダーラインを引きたい要素をすべて取得
3行目 : スクロールイベント
6行目 : アンダーラインを引きたい要素と画面上端との距離を取得
7行目 : 画面の下から20%までスクロールされたら、クラスを追加
const marker = document.querySelectorAll(".marker");
document.addEventListener("scroll", ()=>{
for (let i = 0; i < marker.length; i++) {
const element = marker[i];
const distance = element.getBoundingClientRect().top;
if(distance < window.innerHeight * .8){
element.classList.add("active");
}
}
})


まとめ
- アンダーラインを引きたい個所を<span> で囲み、クラス名を指定します。
- 最初はbackground-size: 0;を指定。 クラスが追加されたらbackground-size: 100%;
- スクロールイベントで、画面に要素が表れたら、クラスを追加。
こんな記事も読まれています。
-
【HTML】【CSS】【javascript】電卓の作り方
電卓のソースコードを2つ紹介します。javascriptはわずか数行で書けます。
-
【JacvaScript】【CSS】たった4行のJavaScriptでできるハンバーガーメニューの作り方
たった4行のJavaScriptで作るハンバーガーメニューの作り方について紹介します。✖をつくるには、transform-originがポイントです。
- リンク
-
波紋エフェクトを表現するjqueryのripples-min.jsの使い方
jqueryのripples-min.jsを使うと簡単に水面の波紋を表現できます。波紋の広がりの速度、波紋の大きさ、波紋のブレの値を変えていろいろ表現させると面白いです。
-
【Javascript】querySelectorAllで要素を取得し、クリックしたら、クラスを追加したり、削除したりする方法。
JavascriptのquerySelectorAllで要素を取得し、クリックしたら、クラスを追加したり、削除したりする方法について解説します。querySelectorと同じように書いてしまうとエラーがでます。forEachを使うとすべてに適用できます。
- リンク
-
要素の高さを取得する方法。getBoundingClientRectとは?window.innerHeightとは?window.pageYOffsetとは?
要素の高さを取得する方法について解説します。getBoundingClientRect、window.innerHeight、window.pageYOffsetについて理解し、要素がいつ画面に現れるかを把握できるようにしましょう。
-
Javascriptを使ったページネーションの実装
トップページの記事が増えてきたので、何とかページネーションで最新の記事だけを表示できないかと思っていたら、いい記事を発見しました。カスタマイズして実装することができました。
- リンク
-
【Javascript】マウスの指す(X, Y)座標とドラッグ & ドロップを理解する
マウスの指す(X, Y)座標とドラッグ & ドロップについて解説します。mousedown, mouseover, mousemove, mouseupを使います。
-
【javascript】連想配列をテーブルできれいに表示する方法
javascript(Object.entries)を使って、連想配列の中身をテーブルできれいに表示する方法について紹介します。
- リンク