こんにちは、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;
});
})();
このコードが優れているのは、
読み込ませれば即、
全てのアンカーリンクに
アニメーションを追加できる点です。
ページ内リンクに
手軽にスクロールアニメーションを
付与したい場合は、
ぜひ利用してみてください。
。



コメント