【发布时间】:2019-07-07 16:07:57
【问题描述】:
我有这个代码:
.fade 元素的 opacity=0。我在元素到达视口时添加“可见”类,并在离开后删除该类。到目前为止一切正常,但元素在到达视口上边界时显示出奇怪的闪烁:它们消失了,又回来又消失,就好像它们不确定它们是在视口上还是在视口外。这是我的 jQuery 和 CSS:
$(window).scroll(function() {
var tags = $(".fade");
for (var i = 0; i < tags.length; i++) {
var tag = tags[i];
if(isScrolledIntoView($(tag))){
$(tag).addClass("visible");
}
else {
$(tag).removeClass("visible");
}
}
});
function isScrolledIntoView(elem){
var $elem = $(elem);
var $window = $(window);
var docViewTop = $window.scrollTop();
var docViewBottom = docViewTop + $window.height();
var elemTop = $elem.offset().top;
var elemBottom = elemTop + $elem.height();
return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
}
.panel {
height: 500px;
position: relative;
color: white;
}
.p1 { background: red; }
.p2 { background: green; }
.p3 { background: orange; }
.p4 { background: green; }
.fade {
background: black;
color: white;
position: absolute;
max-width: 500px;
padding: 2.0rem;
opacity: 0;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, 0);
}
.fade.visible {
opacity: 1;
transition: all 1.0s;
transform: translate(-50%, -50%);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class='panel p1'>
<div class='fade'>Content Fade 1</div>
</div>
<div class='panel p2'>
<div class='fade'>Content Fade 2</div>
</div>
<div class='panel p3'>
<div class='fade'>Content Fade 3</div>
</div>
<div class='panel p4'>
<div class='fade'>Content Fade 4</div>
</div>
滚动速度越慢,问题就越明显。我宁愿在元素完全超出视口之前删除该类,甚至可能加上一点额外的空间。
任何可以帮助我击败这个棘手的小恶魔的提示都非常受欢迎。
谢谢 拉尔夫
【问题讨论】:
-
请不要将您的可执行代码发布到第三方网站,因为这些链接可能会随着时间的推移而失效。只需将代码放入代码 sn-p 中,就在这里。另外,不要将可执行代码的“部分”放入代码 sn-p 中,以使该部分不再可执行。代码 sn-ps 是用来运行代码的。如果你只是想显示一些代码,不要把它放在 sn-p 中。
-
在 Windows 10 上的 Chrome 74 中运行时,我没有遇到您描述的问题。
-
啊,好的,非常感谢。我不知道该怎么做,你为我编辑的绝对没问题。
-
我目前没有 Windows 机器,但问题在 MacOs Firefox、Chrome 和 Safari 上都以完全相同的方式出现。
标签: javascript jquery scroll