14

当我意识到这个“问一个问题”页面上的“如何提问/格式化”侧边栏框正是我想要的时候,我正在写一个关于我想做的事情的长描述

基本上,它与屏幕的其余部分一致地上下滚动,与主要部分保持顶部对齐,除非主要部分开始滚动到可见窗口的顶部。此时,侧边栏框停止滚动,并开始像绝对定位一样,靠在可见窗口的顶部。

我已经尝试在这个“询问”屏幕上挖掘源代码和脚本,但是发生的事情太多了,这几乎是不可能的(至少对我来说)。我假设 jQuery 实际上使这种事情变得非常简单,但我是新手,所以我很难自己弄清楚。(如果这是一个常见问题,我很抱歉——我已经搜索了大约一个小时,但是有太多措辞严密的 jQuery 问题,我无法找到答案。)

提前感谢您的帮助。

4

4 回答 4

30

这是 Apple 在 Applestore 页面上的购物车示例。

逻辑:

  • 检查粘性元素在哪里
  • 检查顶部窗口所在的滚动事件
  • 向粘性元素添加或删除 CSS 类

jQuery:

$(document).ready(function() {  
 // check where the shoppingcart-div is  
 var offset = $('#shopping-cart').offset();  

 $(window).scroll(function () {  
   var scrollTop = $(window).scrollTop(); // check the visible top of the browser  

   if (offset.top<scrollTop) $('#shopping-cart').addClass('fixed');  
   else $('#shopping-cart').removeClass('fixed');  
  });  
});  

CSS:

.fixed {  
        position: fixed;   
        top: 20px;  
        margin-left: 720px;  
        background-color: #0f0 ! important; }

示例链接

于 2011-03-11T13:39:14.367 回答
3

这是我刚刚制作的一个小片段,用于在滚动时将对象保留在屏幕上。

现场演示

http://jsfiddle.net/Jaybles/C5yWu/

HTML

<div id='object'>Top: 0px</div>

CSS

#object{height:200px; width:200px;background:#f00;position:absolute;top:0;left:0;}

jQuery

$(window).scroll(function(){
    var objectTop = $('#object').position().top;
    var objectHeight = $('#object').outerHeight();    
    var windowScrollTop = $(window).scrollTop();
    var windowHeight = $(window).height();

    if  (windowScrollTop  > objectTop)
        $('#object').css('top', windowScrollTop );
    else if ((windowScrollTop+windowHeight) < (objectTop + objectHeight))
        $('#object').css('top', (windowScrollTop+windowHeight) - objectHeight);        

    $('#object').html('Top: ' + $('#object').position().top + 'px');

});

更新示例(带有计时器 + 动画)

http://jsfiddle.net/Jaybles/C5yWu/2/

于 2011-03-11T13:47:31.117 回答
1

如果你需要把它作为这个 jQuery保持在底部使用

$(document).scroll(function() {
    var objectTop = $('#shopping-cart').position().top;
    var objectHeight = $('#shopping-cart').outerHeight();  
    var windowScrollTop = $(window).scrollTop();
    var windowHeight = $(window).height();

   if((objectTop+objectHeight) <=  $('html').outerHeight())
       $('#'+cont).css('top', (windowScrollTop+windowHeight)- objectHeight);
   else
       $('#'+cont).css('top', $('html').outerHeight()- objectHeight);
});

CSS

#shopping-cart{
    width: 100%;
    height: 50px;
    position: absolute;
    left: 0px;
    bottom: 0px;
}

如果您需要将其作为此 jquery使用

$(document).scroll(function() {
    var objectHeight = $('#shopping-cart').outerHeight(); 
    var windowScrollTop = $(window).scrollTop();
    var windowHeight = $(window).height();

    $('#shopping-cart').css('top', windowScrollTop );

});

CSS

#shopping-cart{
    width: 100%;
    height: 50px;
    position: absolute;
    left: 0px;
    top: 0px;
}

它会发挥魔力,不要忘记保持你的风格与位置,一件事它不适用于 Internet Explorer 8.0.7

于 2012-12-31T05:56:22.940 回答
0

如果您只需要将 div 保存在浏览器的某个位置,则不需要 javascript,您可以使用 CSS 来做到这一点。

#chatt-box {
    right: 5px;
    height: auto;
    width: 300px;
    position: fixed;
    bottom: 0px;
}
于 2013-02-12T07:17:59.450 回答