スクロールしたらフェイドインで表示される「TOPへ戻る」ボタンをjQueryで
jQueryで「ページトップへ戻るボタン」をフェイドインで出現させるソースを、本サイトでも使用した。
ただ、ページスクロールの部分は、別に用意したjavaScriptを組み合わせたので、参考ソースから少し書き換えさせてもらった。
また、CSSの「transition」プロパティを同時に使うと、フェイドイン・フェイドアウトが効かなくなる発見もあったのでメモ。
スポンサーリンク
フェイドインで表示させる javaScriptソース
まず、参考にさせていただいたソースはこちら:
jQueryでスクロールすると表示する系いろいろ | webOpixel
こちらの“1 .ちょっとスクロールしたら「トップへ戻るボタン」を表示”を使わせていただいた。
ただ、スクロールの部分は別のモノを使いたかったので、フェイドイン・フェイドアウトの部分だけ使用。
$(function() { var topBtn = $('#pageTop'); //idは自分のサイトに合わせて変更 topBtn.hide(); $(window).scroll(function () { if ($(this).scrollTop() > 200) { //トップから200pxにした topBtn.fadeIn(); } else { topBtn.fadeOut(); } }); });
ページスクロールのための javaScriptソース
ページスクロールのためのpagescroll.jsは、ずいぶん前(7年前?)にいただいて自分でアレンジしたものだが、参考元を控えておらず、わからなくなってしまいました。(自分で書いたはず無い。笑)
これは「# ハッシュ」(=id)を付けたページ内リンクのすべてに対してスクロール。
「トップへ戻るボタン」ボタンだけでなく、ページ内の「a href=”#○○○”」と指定したリンクすべてにスクロールする。
$(function(){ $('a[href^=#]').click(function(){ var Hash = $(this.hash); var HashOffset = $(Hash).offset().top; $('html,body').animate({ scrollTop: HashOffset }, 800); //スクロールのミリ秒。1000=1秒ね return false; }); });
HTMLはこのように
</body>の直前に、jsで指定したidの要素を置くのが通常の配置。
このブログでは、背景にcanvasを使っている都合上、コンテンツ全体をcanvasの上に乗っけている要素(div#contents-wrap)の終了タグの直前に入れた。
リンク先も div#contents-wrap(の先頭タグ)にしておいた。
<div id="pageTop"><a href="#contents-wrap">^</a></div> </div><!--contents-wrap END--> </body>
ここでは、ボタンは「^」のテキストのみ。これをCSSで装飾している。
CSSの「transition」は共存不可
CSSは下記のように指定している。
ほとんど装飾用だが、大事なのは2〜4行目の「position:fixed」の指定。ボタンをウィンドウの特定の位置に固定させておくこと。
これさえやっておけば、あとはjsのほうで出現させたり消したりしてくれる。
#pageTop{ position:fixed; right:20px; bottom:20px; text-align:center; background:rgba(45,20,151,0.5); border-radius:25px; border:solid 2px rgba(255,255,255,0.5);} #pageTop:hover{ background:rgba(253,92,229,0.7);} #pageTop a{ color:#fff; font-size:200%; line-height:1em; padding:0.4em 0.5em 0; text-decoration:none; display:block; cursor:pointer;}
当初、8行目のあとに「transition : all 0.3s」を指定していた。
これはボタンにマウスオーバーで色が変わる時、時間をかけてふんわり変化するように指定したものだが、これがあると、jsのフェイドイン・フェイドアウトが無効に。(パッと出て、ピッと消える!)
フェイドインとマウスオーバー時の変化と、どっちを取るか。答えはフェイドイン。というわけでCSSの transitionを削除した。
Leave a Comment