jQueryを使ってページの先頭へのスムーズにスクロールするボタンと、スクロールに合わせて表示を作る

jQueryを使って
ある程度スクロールしたら、ページ先頭へ戻るボタンが出てきて
クリックすると、スムーズにスクロールしてページの先頭まで移動するボタンを作ります
jQueryを使って スムーズにページの先頭へ移動するボタンをある程度スクロールしてから表示するコードを作る
内容は2つに分かれていて
- ボタンをクリックするとページの先頭へスムーズにスクロールするボタンを作
- スクロールの量に合わせてボタンの表示、非表示を操作する
この2つの動作を作ることで、実装します
また、ボタンの表示、非表示にCSSでアニメーションを加えると フェードイン、スライドインでの表示・非表示に出来ます
STEP 1 jQueryを読み込む
まずはjQueryを読み込みます、読み込みの位置はjQueryのコードを書く前ならどこでもOK
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
jQueryをダウンロードして設置して読み込む場合は
こちらからjQueryをダウンロードして、サーバーに設置して読み込んでください
STEP 2 ボタンをクリックするとページの先頭へスムーズにスクロールするボタンを作る
次に、ページの先頭へ戻るボタンを作ります
これは、適当に作ってもOKです divをボタンにしてもいいし、aタグをボタンにしてもOK
それらを特定できるように class名をつければ良いです、今回は class名は scroll-top です
/*ボタンをクリックしたときの動作 ページのトップへアニメーション付きで動く*/
$(".scroll-top").bind('click',function(){
$('html,body').animate({scrollTop : 0},1000);
return false;
});
2行目の .scroll-top これでクラス名を指定しています
このクラスを対象に動作をさせます
2行目の後半の部分は、クリックをトリガーとして何らかを実行するという意味です
3行目では クリックされて、実行されるものが書かれています
今回では、HTML要素のhtmlタグ、bodyタグの始まりへ 1秒かけてページの先頭へ移動するというものになっています
4行目は aタグにリンクがあった時に無効化するものです
5行目でコードを閉じで完成
これで、指定した要素をクリックすると
ページの先頭へスムーズにスクロールしていきます
STEP 3 スクロールの量に合わせてボタンの表示・非表示を操作する
次は、ページをスクロールして ある程度スクロールしてから
ページの先頭へ戻るボタン(要素)を表示、非表示するコードです
/*スクロールされるたびに感知*/
$(window).bind('scroll load',function () {
/*ページの上部へのボタンの表示。非表示の条件*/
if ($(window).scrollTop() >= 600) {
/*600px以上スクロールした場合*/
$(".scroll-top").addClass("scroll-top-on");
} else {
/*600px未満のスクロールの場合*/
$(".scroll-top").removeClass("scroll-top-on");
}
});
まず、2行目で ページが読み込まれた時と、スクロールがされた時に動作するようになっています
5行目~7行目で もし、スクロールした量が600pxを超えている場合に実行する内容 = 600px 以上
9行目~11行目で そうではなかった場合に実行する内容となっています = 600px 未満
つまり 5~7行目 で表示、9~11行目で非表示 となるようにしてやれば良い
今回は、classの追加で表示、classの削除で非表示となるようにした
STEP 2 で作ったボタンの class名 に予め display:none;をつけておき
.scroll-top-on という class を追加してやると表示になるように display:block;(使う要素によって変化)と上書きになるようにして 表示されるようになる
非表示に戻すときは .scroll-top-on という class を削除してやれば 元の非表示に戻る仕組み
これで、スクロールの量によって表示 非表示の動作が完成しました
STEP 4 ボタンの表示・非表示にアニメーションをつける
STEP 3 では display:; を使って表示・非表示となるようにしましたが
opacity を使うとフェードインに出来ます
transform: translateX(); を使うと、横からのスライドイン にすることが出来ます
フェードイン・フェードアウトにする場合
.scroll-top {
opacity: 0;
-webkit-transition: 0.5s;
transition: 0.5s; }
.scroll-top-on {
opacity: 1; }
スライドイン・スライドアウトにする場合
.scroll-top {
-webkit-transform: translateX(-500px);
-ms-transform: translateX(-500px);
transform: translateX(-500px);
-webkit-transition: 0.5s;
transition: 0.5s; }
.scroll-top-on {
-webkit-transform: translateX(0);
-ms-transform: translateX(0);
transform: translateX(0); }
基本的な部分だけにしました
あとは、好きに装飾してやると良いかと思います
位置は position fixed を使って指定してやると良いかと思います
jQuery部分のコードをまとめたもの
最後に、jQueryのコードをまとめたもの
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
/*スクロールされるたびに感知*/
$(window).bind('scroll load',function () {
/*ページの上部へのボタンの表示。非表示の条件*/
if ($(window).scrollTop() >= 600) {
/*600px以上スクロールした場合*/
$(".scroll-top").addClass("scroll-top-on");
} else {
/*600px未満のスクロールの場合*/
$(".scroll-top").removeClass("scroll-top-on");
}
});
/*ボタンをクリックしたときの動作 ページのトップへアニメーション付きで動く*/
$(".scroll-top").bind('click',function(){
$('html,body').animate({scrollTop : 0},1000);
return false;
});
</script>
jQueryを使えば、簡単に 短いコードで実装できます
またCSSのアニメーションと組み合わせるといろいろな見せ方も出来るので
オリジナルな、ページの先頭へのボタンを作る際には 試してみてください


COMMENT