こんにちは、daimaです。
本日は、ページ内リンクをクリックした時に、
アニメーションつきで
スムーズにアンカー先に移動する
jQueryコードをご紹介します。
// スクロール可能な要素を判別する関数 function getFirstScrollable(selector){ var $scrollable; $(selector).each(function(){ var $this = $(this); if( $this.scrollTop() > 0 ){ $scrollable = $this; return false; }else{ $this.scrollTop(1); if( $this.scrollTop() > 0 ){ $scrollable = $this; return false; } $this.scrollTop(0); } }); return $scrollable; } //スムーズスクロール処理を行う関数 function scrollAction($target){ //変数のセッティング var $win = $(window), $doc = $(document), $scrollElement = getFirstScrollable("html,body"), mousewheel = "onwheel" in document ? "wheel" : "onmousewheel" in document ? "mousewheel" : "DOMMouseScroll"; var top; // 現在のウィンドウ幅を取得 var w = $(window).width(); // $targetが空の場合はキャンセル if( $target.size() < 1 ) return false; // スクロール先の位置を調整 top = $target.offset().top; top = Math.min(top, $doc.height() - $win.height()); // スクロール中は手動スクロールをキャンセルする $doc.on(mousewheel, function(e){ e.preventDefault(); }); // 移動先へアニメーションする $scrollElement.stop().animate({scrollTop: top}, 600, "linear", function(){ $doc.off(mousewheel); }); }; (function(){ var $win = $(window), $doc = $(document); //アンカーリンクをクリックした時にアクションを起こす処理 $doc.on("click", "a[href^=\\#]", function(e){ var $target = $(this.hash), top; scrollAction($target); return false; }); })();
このコードが優れているのは、
読み込ませれば即、
全てのアンカーリンクに
アニメーションを追加できる点です。
ページ内リンクに
手軽にスクロールアニメーションを
付与したい場合は、
ぜひ利用してみてください。
。
コメント