gpt4 book ai didi

javascript - 固定定位的滚动弹跳

转载 作者:搜寻专家 更新时间:2023-10-31 08:24:42 25 4
gpt4 key购买 nike

我有一个固定元素,当您在滚动中到达它时,它会附加到我的页面上。该元素有时可以在其上方但不在其下方有内容,这意味着页面深度可能不够深以支持这种行为,因此它会阻止用户到达页面底部并导致页面弹跳,大概是因为它在修复时从滚动中删除元素,这导致滚动事件函数中的条件不再为真。发生这种情况时,gif 会显示不良效果。

enter image description here

在这个 fiddle 中演示:https://jsfiddle.net/dcsjx625/8/

页面是动态的,因此无法删除单个页面的效果。

<body>
<div class="header">
<img src="http://placehold.it/600x401">
</div>
<div class="content-parent">
<div class="content">
<img src="http://placehold.it/600x400">
<img src="http://placehold.it/600x400">
<img src="http://placehold.it/600x400">
</div>
</div>
<div class="footer-content">
Footer
</div>
</body>

jQuery:

var $stickyChainOffset = $('.content').offset();
var $stickyChain = $('.content');
var $fixedWidth = $('.content').parent().width();

function checkScroll() {
if ($(window).scrollTop() > $stickyChainOffset.top - 100) {
$stickyChain.css('position', 'fixed').css('top', '100px').css('max-width', $fixedWidth);
} else {
$stickyChain.css('position', 'static').css('max-width', 'initial');
}
};

$(window).scroll(function() {
checkScroll();
});

/* Updates the $fixedWidth variable on resize */
$(window).resize(function() {
$fixedWidth = $('.content').parent().width();
$(window).scroll();
});

理想情况下,如果元素离页面底部足够近可能会导致问题,我想防止粘附效应。

我试过像这样在 checkScroll() 函数中计算页面深度与元素高度的关系,但即使这样也行不通。我觉得我正处于解决这个问题的边缘。:

function checkScroll() {
height = $stickyChain.height() + 100;
depth = $(document).height() - $stickyChainOffset.top;

if ($(window).scrollTop() > $stickyChainOffset.top - 100 && depth > height) {
$stickyChain.css('position', 'fixed').css('top', '100px').css('max-width', $fixedWidth);
} else {
$stickyChain.css('position', 'static').css('max-width', 'initial');
}
};

任何帮助将不胜感激!

最佳答案

老实说,我理解您的问题,但我不知道您何时以及为何会遇到这种确切的行为。也就是说,这是我的解决方法和一些注意事项:

  1. 内容的高度需要是 fixed 元素高度的 2 倍,以便保持滚动条。否则,一旦元素被修复,您的文档就会完全失去滚动条。
  2. 我正在将 fixed 元素的原始偏移量保存到一个变量中,用作 future 重置的标记。但是,我还在每个滚动事件中重新定义了 $stickyChainOffset,您过去只定义了一次。我这样做是因为一旦修复它就会改变。
  3. 您可以评论和取消评论我在 css 中保存的填充,以查看页面在各种情况下的行为。

如果您有任何其他问题,请告诉我。

https://jsfiddle.net/1fke1j3d/1/

关于javascript - 固定定位的滚动弹跳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41906733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com