Quantcast
Channel: 初心者タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 21764

トップページに戻るボタンをjavascriptで(jQuery無しで)

$
0
0

はじめに

脱jQueryしていきたいのでだんだんと素のjavascriptで書いていくようにしていると段階です。
備忘録がわりです。復習を兼ねて1つ1つ解説入れていこうと思います。

対象

駆け出しエンジニアの方や学生,jQueryに頼りっぱなしが嫌な方。

ソースコード

main.js
// トップへ戻るボタンfunctionscrollTop(el,duration){lettarget=document.getElementById(el);// elと名付けたドキュメント要素を取得し、変数に格納するtarget.addEventListener('click',function(){letcurrentY=window.pageYOffset;// クリック時の縦方向へのスクロール量を取得letstep=duration/currentY>1?10:100;// 三項演算子で10or100を変数step(1回分のスクロール量)に格納lettimeStep=duration/currentY*step;// 1回のスクロールにかかった時間を格納letintervalID=setInterval(scrollUp,timeStep);// scrollUp()を一定時間ごとに繰り返す // scrollUp()で一定時間ごとに繰り返される関数functionscrollUp(){currentY=window.pageYOffset;if(currentY===0){// 垂直方向へのスクロール量が0になったらclearInterval(intervalID);// 処理を停止する}else{scrollBy(0,-step);// スクロールした分だけY軸方向へ戻る}}});}scrollTop('top-button',ページトップに到達する時間); //関数を呼び出す
index.html
<divid="top-button"><divclass="arrow">divでボタンを作る</div></div>

解説

'top-button'とidで指定されたHTMLドキュメントをクリックしたら、クリックした時点でのスクロール量を取得し、そのスクロール量に応じて速度を場合分けして、ページのトップまでY軸方向へ戻るという処理。

setInterval(),clearInterval()

ここうまく説明できないけど、setInterval()をclearInterval()で包んで、ページのトップまでいったら処理を止めるイメージ

let step = duration/currentY > 1 ? 10 : 100;

三項演算子

if (条件式) {
    //Trueの処理
} else {
    //Falseの処理
}
条件式 ? Trueの処理 : Falseの処理

上の2つは同じ意味。複雑になると推奨されないらしいです。
今回ではduration/currentYの値が1より大きかったら10,1以下だったら100を変数stepに格納するという処理ですね。

おわりに

勉強になりました。より良くなると教えてくれる方ぜひ教えてください。


Viewing all articles
Browse latest Browse all 21764

Trending Articles