こんにちは、「ふ」です。
以前作った、「JavaScriptによるスナップスクロール」。その完成後。
現在のスクロール位置が認識できるように、画像の下にインジゲータを表示したい。
今回これに挑戦したいと思います。
インジゲータの「●」を配置する親要素を作っておきます。
HTML
JavaScriptのappendChild()を使って、「indicate」の内部に「●」を書き込みます。
「●」の文字実体参照は「●」です。
JavaScript
ブラウザ
「●」が子要素として追加されました。
このcodeをfor文で囲んで、5個追加してみます。親要素取得の1文だけはグローバルで扱いたいので、{ }の外に出しておきましょう。
JavaScript
ブラウザ
子要素が5個追加されました。縦並びではしょうがないので、flexboxを使って中央揃いの横並びにします。
CSS
ブラウザ
原型ができました。次に、現在のスクロール位置を表示するために、colorを変えていきます。
現在位置の「●」を青に、その他は薄いグレーにしてみます。CSSではなくJavaScript内で指定しましょう。
JavaScript
ブラウザ
これでUIは完成です。うまくできましたか?
では実際に、スクロールのUIにインジゲータを取り込んでいきましょう。以前作ったUIをそのまま使います。
詳細を確認したい方のために、再度リンクを貼っておきます。
スクロールエリアとボタンの間にインジゲータを追加しましょう。
HTML



ブラウザ
こんな感じになりました。
〜腑に落ちない点があります。画像は3枚なのに、インジゲータの
「●」は5個になっています。画像の数と同じにしたいですよね。
以前の記事で、確か画像スクロール部分の要素は変数「element」で取得していました。
「●」の数はfor文の条件内で設定していましたよね。その条件を「element」の要素数に変更しましょう。
ブラウザ
はい ♪ 「●」の数が画像と同じになりました。
扨(さて)、いよいよインジゲータを画像のスクロールに連動させていきましょう。これも以前の記事になりますが、スクロールエリアの親要素を「jsnap」、子要素である各画像を参照するための番号を変数「num」としていました。
この「num」をインジゲータの「●」の管理にも使います。画像をスクロールさせると、「num」番目の「●」が青色になるための関数を定義しましょう。
スナップスクロール部分の「susumu( )」「modoru( )」関数では、変数「num」をそれぞれインクリメント、デクリメントさせています。その後で「maru_susumu( )」「maru_modoru( )」関数を実行させましょう。
実際に動きます。▼



お疲れ様でした、完成です ♪
「●」の数はimgの要素数に対応させているので、汎用的に使えて便利です。
今回の全コードはココ に貼っておきます。よかったら是非、自分のサイトに取り入れてみてください。
swift、web、ガジェットなど。役立つ情報や観ていてたのしいページを書いていきたいと思います。
🐧 twitter 🐧