更新に伴ったネタです。
人気のある固定サイドバーのスクリプト。
どうせ作るなら、1個のスクリプトで条件分岐させて、上合わせも下合わせもやったほうが良いと思う。
長ければ下合わせで、短ければ上合わせの固定バーが良いんでない?
広告
固定サイドバーのスクリプト
jQuery(function ($) {
if (0 < $("#fixbar").size()) {
var w = $(window).width();
var y = 699;
var mainH = $("#main").height();
var barH = $("#secondary").outerHeight(true);
if (y < w && mainH > barH) {
var wh = $(window).height();
var fix = $('#fixbar');
var fixh = $('#fixbar').outerHeight(true);
var foth = $('#colophon').height();
var row = $('.row').width();
var wfh = (wh - foth);
var pdsp = ((w - row)/2);
if (0 < $("#item-nav").size()) {
var navH = $("#item-nav").height();
var fixTop = ($('#fixbar').offset().top - navH - navH);
} else {
var navH = 0;
var fixTop = $('#fixbar').offset().top;
}
$(window).scroll(function () {
if (fixh < wfh) {
var winTop = $(this).scrollTop();
if (winTop >= fixTop) {
fix.css({ position: "fixed", top: navH + "px", 'padding-right': pdsp + "px" });
fix.addClass('col-4 tablet-col-4');
} else {
fix.css({ position: "inherit", top: "0px", 'padding-right': "0px" });
fix.removeClass('col-4 tablet-col-4');
}
} else {
var winTop = $(this).scrollTop();
var winbt = (wh + winTop);
var fixbt = (fixTop + fixh + navH + navH);
var fixless = (fixh - wh);
if (winbt >= fixbt) {
var fttop = $('#colophon').offset().top;
fix.addClass('col-4 tablet-col-4');
if (winbt >= fttop) {
var ffless = (fixless + winbt - fttop);
fix.css({ position: "fixed", top: -ffless + "px", 'padding-right': pdsp + "px" });
} else {
fix.css({ position: "fixed", top: -fixless + "px", 'padding-right': pdsp + "px" });
}
}else {
fix.css({ position: "inherit", top: "0px", 'padding-right': "0px" });
fix.removeClass('col-4 tablet-col-4');
}
}
});
}
}
});
こんな感じです。
ざっと説明すると、まずウィンドウ幅の条件。レスポンシブなんだから必要でしょう。
次は高さの条件。そもそも固定が必要無い高さもある。
次は上合わせのする時の条件と、上合わせにする為のCSSとか。
ウチのそのままコピペなので、そのままじゃ使えませんよ。
次は下合わせの条件とCSSとか。
僕の場合、CSSとclassを同時につけてあげてデザインが崩れないようにしてます。あと、アドセンスは固定化しちゃダメなので、いずれもアドセンスの枠は対象にならないように作ります。
簡単な説明ですが、そんな感じです。
おすすめのコンテンツ
広告
