(スティッキー)スクロールサイドバーに取り組んでいます。問題は、ほとんどのスティッキー サイドバーが、サイドバーがビューポートよりも高くなる可能性があることを考慮していないことです (たとえば、多くのアイテムがバスケット (サイドバー) に追加された場合)。これは私が解決しようとしているものです。要件は次のとおりです。
サイドバーの高さがビューポートよりも高い場合は、コンテンツをスクロールし、さらに下にスクロールすると、div の下部がビューポートの下部にくっつく必要があります。
サイドバーの高さがビューポートよりも高い場合、その下の div は、ページの下部にいるときにのみ表示されます。
ユーザーが上にスクロールすると、サイドバーは上にスクロールして戻り、ビューポートの上部に戻ります。
サイドバーの高さがビューポートよりも小さい場合は、下にスクロールするときに上から固定する必要があります。
全体として、かなりの機能があり、それほど単純ではありません(私は思います)。私が達成しようとしていることに最も近いのは、次の例です: http://demo.techbrij.com/730/fix-sidebar-scrolling-jquery.phpしかし、コードの記述方法が適合しません私の中に。
これまでのところ、これは私が作ったものです: DEMO
そして、私が使用したjQueryコード:
jQuery(document).ready(function($) {
var $sidebar = $('.sidebar'),
$content = $('.content');
if ($sidebar.length > 0 && $content.length > 0) {
var $window = $(window),
offset = $sidebar.offset(),
timer;
$window.scroll(function() {
clearTimeout(timer);
timer = setTimeout(function() {
if ($content.height() > $sidebar.height()) {
var new_margin = $window.scrollTop() - offset.top;
if ($window.scrollTop() > offset.top && ($sidebar.height()+new_margin) <= $content.height()) {
// Following the scroll...
$sidebar.stop().animate({ marginTop: new_margin });
} else if (($sidebar.height()+new_margin) > $content.height()) {
// Reached the bottom...
$sidebar.stop().animate({ marginTop: $content.height()-$sidebar.height() });
} else if ($window.scrollTop() <= offset.top) {
// Initial position...
$sidebar.stop().animate({ marginTop: 0 });
}
}
}, 100);
});
}
});