LoginSignup
31
30

More than 5 years have passed since last update.

追いかけてくるフローティングボックスを作る

Posted at

やりたいこと

こういうソーシャルボックスとかが、記事をスクロールしてもついてくる感じのやつ
http://websae.net/wordpress-starter-theme-20141104/
スクリーンショット 0026-11-13 午後0.01.05.png

仕組み

jQueryを使って、指定した位置より下にスクロールしたら、ボックスのdisplayプロパティがabsoluteからfixedに変わるようにする。

ソース

article.html
<div id="float-sns-box">
    ボックス
</div>
style.css
#float-sns-box {
    position: absolute;
    width: 100px;
    height: 470px;
    margin-left: -110px;
    display: block;
    border: #e0e0e0 1px solid;
    z-index: 2;
    background-color: white;
}
floating.js
// HTMLの要素が全て準備できれば処理を行う
var setBoxId = '#float-sns-box';      // スクロールさせる要素
var initOffsetTop = null;   // 要素の初期位置
$(document).ready(function() {
    // 初期位置取得
    initOffsetTop = $(setBoxId).offset().top;

});

//スクロールしたらこの処理が走る
$(window).scroll(function() {
    scrollbox();
});

// スクロール処理
function scrollbox(){
    // 初期位置が取れていなければ処理を抜ける
    if(initOffsetTop == null) return;

    // 現在のスクロール位置を取得
    var scrollTop = $(document).scrollTop();

    // スクロールさせる要素の初期位置と現在のスクロールの位置を比較
    //初期位置より下にスクロールした時
    if(initOffsetTop < scrollTop) {
        // positionを設定
        $(setBoxId).css('position', 'fixed');
        // topの位置を設定
        $(setBoxId).animate({top: '10'}, {duration: 0});
    } else {
        // 設定したスタイルを持とに戻す
        $(setBoxId).css('position', 'absolute');
        $(setBoxId).animate({top: initOffsetTop}, {duration: 0});
    }
}

以上でできるはず。

31
30
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
30