【问题标题】:jquery fixed div while scrolling bounces aroundjquery在滚动反弹时修复了div
【发布时间】:2014-01-09 23:48:01
【问题描述】:

我的网页最右侧有一个 div (RightSide),它位于另一个 div (TopBanner) 的下方。即使用户向下滚动,TopBanner div 也会保持其在屏幕顶部的准确位置。正是我想要的。但我也希望 RightSide div(在 TopBanner 下方)即使在用户向下滚动时也能保持在原位。

我已经达到了大约 80%,但它的行为很奇怪。当您开始向下滚动时,RightSide 开始向上移动页面,直到它开始被 TopBanner 遮挡(在它后面),然后它突然弹回到它的固定位置,并在剩余的滚动过程中停留在那里。这是执行“弹回”的 jquery:

var stickerTop = parseInt($('#RightSide').offset().top);
        $(window).scroll(function () {
            $("#RightSide").css((parseInt($(window).scrollTop()) + parseInt($("#RightSide").css('margin-top')) > stickerTop) ? {
                position: 'fixed',
                top: '0px'
            } : {
                position: 'relative'
            });
        });

RightSide 的初始行为是在页面向上移动大约 100 像素,然后才弹回到正确的位置,这让我的老板和我们的用户发疯了。我已经尝试将“top:'0px'”更改为各种值,但这只会让事情变得更糟。

在我看来,“重新锚定”RightSide 的 jquery 直到我滚动了一百个像素左右才会被调用,然后它突然将 div 向下移动并在之后将其保持在正确的位置.

总结:我从不希望 RightSide 向上或向下移动,即使用户正在拖动垂直滚动条(滚动)。

如何做到这一点? (我真的不想为此使用 iframe。)谢谢。

【问题讨论】:

  • 您能否发布您的其余代码,以便我们看到它的实际效果?如果它在 JSFiddle 或 JSbin 中,则为布朗尼点 :)
  • 我愿意,但是代码量很大,而且大部分都没用。我已经发布了有用的位。您特别在寻找什么?我可以发布一些关于屏幕/滚动行为的视频片段,但不知道它是否有用。 RightSide div 只是一个典型的 div,其中包含一些 html。
  • 好吧,我只是想确保我正确理解了您的问题。我想你想达到类似的效果(但右侧已经折叠,在导航栏下方而不是旁边)1054.fleeceitout.com(单击右侧的黑色标签以显示RightSide在这种情况下)
  • Deryck,你说得对。无论如何,正确的 div 都保持固定,这就是我正在寻找的。当您向下滚动时,顶部横幅会越过右侧 div 的顶部,此时它与我的场景几乎相同。除了我的顶部横幅总是覆盖我右侧横幅的顶部。我想事实上我右边横幅的顶部被顶部横幅覆盖了,而不仅仅是在它下面,这可能是我悲伤的原因。一些 z-indexing 正在覆盖它。
  • 好吧,那个网站是我的,虽然那个正确标签的代码是我一生中最烦人的从头开始的项目,但一旦你把数字插入,它实际上很简单。我会发布在我快速完成某件事后,在这里完成你需要的东西(除非有人在这种情况下打败了我,对你来说更多:))

标签: javascript jquery css html


【解决方案1】:

将这两个 div 打包成一个位置固定的 div 怎么样?像这样?

<div id="StickToTop">
  <div id="TopBanner">
  ...
  </div>
  ...
  <div id="RightSide">
  ...
  </div>
</div>

还有 CSS:

#StickToTop {
  position: fixed;
  top: 0px;
}
#TopBanner {
  float: left;
  ...
}
#RightSide {
  float: right;
  ...
}

快速预览:http://jsfiddle.net/k5xH4/3/

【讨论】:

  • 看似合乎逻辑,但存在很大缺陷。在这里查看:jsfiddle.net/9kJ94
  • 如果你想知道我为什么不投反对票,那是因为实际上有一个 CSS 属性可以很容易地消除这个问题。不幸的是,没有 IE 支持(11 除外)。这意味着您需要制作一个自定义事件捕获传递处理程序(获取点击,忽略它,然后将其传递到下方),我认为这将非常困难。
  • 伙计们,我查看了两个 jsfiddle 示例,但我看不出他们甚至试图完成什么。我看不到滚动和固定元素。如果有人可以建议对我现有的 jquery 代码进行 jquery 调整来解决这个问题,那就太棒了。
  • Deryck,你的意思是这样吗? jsfiddle.net/CYTyC/1 它似乎工作得很好,但我不确定是否所有浏览器都对零宽度 div 感到满意。非常有趣的问题。
  • 致提问者:我只是觉得重建html/css可以让你只对js的相对位置进行操作,而不是固定的。我认为这会更容易。
猜你喜欢
  • 2014-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-15
  • 2012-06-01
相关资源
最近更新 更多