当用户通过jQuery滚动时,我想要显示这个DIV。这是有效的(我修改了一个'粘性NAV'脚本)。我希望它在4秒后从视图中消失,所以我在延迟后添加了一个removeClass。这一切都有效,但我想确保只发生一次(这是用户可以向左和向右滑动的提示)。
这是HTML
<div id="inhoudMobiel">
<div id="swipetip"></div>
<div id="swipetipanker"></div>
</div>
这是jQuery:
<script>
$(document).ready(function() {
var stickyCount = 'aan';
console.log(stickyCount);
var stickyNavTop = $('#swipetipanker').offset().top;
var stickyNav = function(){
var scrollTop = $(window).scrollTop();
if (stickyCount = 'aan') {
if (scrollTop > stickyNavTop) {
$('body').addClass('sticky');
setTimeout(function(){$('body').removeClass('sticky')}, 4000);
var stickyCount = 'uit';
console.log(stickyCount);
}
}
};
$(window).scroll(function() {
stickyNav();
});
});
我添加了控制台日志行以查看会发生什么,它的工作方式与我预期的一样,控制台记录了“aan&#39;一次,在第一次滚动后,它会一直记录下来&#39; uit&#39;。但是DIV仍然会一遍又一遍地出现在每个卷轴上。
在第一个答案之后,我修改了我的代码:
$(document).ready(function() {
var stickyNavTop = $('#swipetipanker').offset().top;
var stickyNav = function(){
var scrollTop = $(window).scrollTop();
if (scrollTop > stickyNavTop) {
$('body').addClass('sticky');
setTimeout(function(){$('body').removeClass('sticky')}, 4000);
var stickyCount = 0;
console.log(stickyCount);
}
};
var stickyCount = 1;
console.log(stickyCount);
if (stickyCount === 1) {
$(window).scroll(function() {
stickyNav();
});
}
});
替换了&#39; on&#39;并且&#39;关闭&#39;文本用0和1(更符合逻辑),主要是改进比较器实际比较而不是重新设置变量。我想要展示的DIV只出现在每一个滚动动作中。在控制台中,您将看到一个&#39; 1&#39;,然后是一系列零。因此,变量的重置有效,但比较器没有。滚动时,零也会不断出现,所以基本上滚动检测即使不应该也能继续工作。
答案 0 :(得分:0)
如果你改变你的代码如下,它会阻止它运行多次在你的if语句中检测stickyCount
是否从其初始值改变了,你使用的是=
这是一项任务运算符,它更改了stickyCount
的值而不是比较它。将其更改为===
可确保您正在进行适当的比较,这正是您想要的。
$(document).ready(function() {
var stickyCount = 'aan',
firstRun = true;
console.log(stickyCount);
var stickyNavTop = $('#swipetipanker').offset().top;
var stickyNav = function(){
var scrollTop = $(window).scrollTop();
if (stickyCount === 'aan') {
if (scrollTop > stickyNavTop) {
$('body').addClass('sticky');
setTimeout(function(){$('body').removeClass('sticky')}, 4000);
stickyCount = 'uit';
console.log(stickyCount);
}
}
};
$(window).scroll(function() {
stickyNav();
});
});
答案 1 :(得分:0)
我现在以一种不太优雅的方式解决了这个问题,但它确实做到了我需要的东西:
$(document).ready(function() {
var stickyNavTop = $('#swipetipanker').offset().top;
var stickyNav = function(){
var scrollTop = $(window).scrollTop();
if (scrollTop > stickyNavTop) {
$('body').addClass('sticky');
setTimeout(function(){$('body').removeClass('sticky')}, 4000);
setTimeout(function(){$('#swipetip').remove()}, 4000);
}
};
$(window).scroll(function() {
stickyNav();
});
});
我只是删除&#34; swipetip&#34;在显示一次之后,来自DOM的DIV。不是那么优雅,因为滚动监听器保持原封不动,听不到任何东西,但它可以解决问题。