Javascript设置间隔每5秒一次
我想在每个警报之间设置5秒的间隔。我们发现: 但是我应该将Javascript设置间隔每5秒一次,javascript,jquery,setinterval,Javascript,Jquery,Setinterval,我想在每个警报之间设置5秒的间隔。我们发现: 但是我应该将setInterval()放在哪里,以便每5秒发出一次警报 $(window).scroll(function() { if (checkVisible($('#footer'))) { alert("I DONT SEE A FOOTER"); } else { alert("EUREKA - I SEE A FOOTER"); } }); function checkVisib
setInterval()
放在哪里,以便每5秒发出一次警报
$(window).scroll(function() {
if (checkVisible($('#footer'))) {
alert("I DONT SEE A FOOTER");
} else {
alert("EUREKA - I SEE A FOOTER");
}
});
function checkVisible(elm, eval) {
eval = eval || "visible";
var vpH = $(window).height(), // Viewport Height
st = $(window).scrollTop(), // Scroll Top
y = $(elm).offset().top,
elementHeight = $(elm).height();
if (eval == "visible")
return ((y < (vpH + st)) && (y > (st - elementHeight)));
if (eval == "above")
return ((y < (vpH + st)));
}
$(窗口)。滚动(函数(){
如果(选中可见($(“#页脚”)){
警惕(“我没有看到页脚”);
}否则{
警惕(“尤里卡-我看到一个页脚”);
}
});
功能检查可见(elm、eval){
eval=eval | |“可见”;
var vpH=$(窗口).height(),//视口高度
st=$(窗口).scrollTop(),//Scroll Top
y=$(elm).offset().top,
elementHeight=$(elm).height();
如果(eval==“可见”)
返回((y<(vpH+st))&(y>(st-元素高度));
如果(评估=“以上”)
返回((y<(vpH+st));
}
非常感谢。基本上你想每5秒提醒一次,但也要每5秒检查一次是否有页脚 然后添加以下内容:
setInterval(function() {
if (checkVisible($('#footer'))) { //check footer
alert("I DONT SEE A FOOTER");
} else {
alert("EUREKA - I SEE A FOOTER");
}
}, 5000);
这将每5秒显示一次警报,该警报上的文本将取决于您是否有页脚:)
但您不希望每次滚动时都调用它(每个滚动将运行大约12次,这不是您想要的)。因此,您可以在加载时启动它,也可以像我所做的那样,在开始滚动时运行计时器一次
因此,我创建了一个设置间隔的函数:
function showAlert() {
setInterval(function() {
if (checkVisible($('#footer'))) {
//alert("I DONT SEE A FOOTER");
outputString = "EUREKA - I SEE A FOOTER";
} else {
//alert("EUREKA - I SEE A FOOTER");
outputString = "I DONT SEE A FOOTER";
}
console.log(outputString)
}, 5000);
}
这里我使用了console.log()而不是alert,因为老实说,alert非常烦人。此计时器还检查是否有页脚并相应地记录
现在我添加了一个bool,它是true,但当滚动时设置为false,因此我在滚动时只运行上述函数一次:
var runOnceScrolled = true;
$(window).scroll(function() {
console.log('scrolled, timer will now start')
if (runOnceScrolled) {
showAlert();
runOnceScrolled = false;
}
});
我还将支票的内容包装在一个try-catch中,因为如果没有#footer
,它就会抛出错误
我还添加了一个按钮,插入一个ID为footer
的div,以便在添加页脚后可以看到console.log()的变化
$('#addFooter')。单击(函数(d){
console.log('addfooter')
$(“正文”).append(“这是页脚”)
})
var outputString=“”;
函数showAlert(){
setInterval(函数(){
如果(选中可见($(“#页脚”)){
//警惕(“我没有看到页脚”);
outputString=“EUREKA-我看到一个页脚”;
}否则{
//警惕(“尤里卡-我看到一个页脚”);
outputString=“我看不到页脚”;
}
console.log(outputString)
}, 500);
}
log('outputString:'+outputString)
var runOnceScrolled=true;
$(窗口)。滚动(函数(){
如果(已滚动){
log('滚动,计时器现在将启动')
showarert();
runOnceScrolled=false;
}
});
功能检查可见(elm、eval){
试一试{
eval=eval | |“可见”;
var vpH=$(窗口).height(),//视口高度
st=$(窗口).scrollTop(),//Scroll Top
y=$(elm).offset().top,
elementHeight=$(elm).height();
如果(eval==“可见”)
返回((y<(vpH+st))&(y>(st-元素高度));
如果(评估=“以上”)
返回((y<(vpH+st));
}捕捉(错误){
//console.log(错误)
}
}
。外部{
颜色:红色;
边框:1px纯黑;
位置:绝对位置;
身高:150%;
宽度:100px;
溢出:滚动;
}
.里面{
宽度:100%;
高度:400px;
}
添加页脚
每5秒重复一次,由滚动事件开始:
var myTimer;
function showAlert(inString){
alert(inString);
myTimer = setTimeout(function() {
showAlert();
}, 5000);
}
$(window).scroll(function() {
clearTimeout(myTimer);
if (checkVisible($('#footer'))) {
showAlert("I DONT SEE A FOOTER");
} else {
showAlert("EUREKA - I SEE A FOOTER");
}
});
function showAlert(inString){
myTimer = setTimeout(function() {
alert(inString);
}, 5000);
}
$(window).scroll(function() {
clearTimeout(myTimer);
if (checkVisible($('#footer'))) {
showAlert("I DONT SEE A FOOTER");
} else {
showAlert("EUREKA - I SEE A FOOTER");
}
});
您可以看到,我正在使用clearTimeout(myTimer)
删除前一个计时器,这避免了我们启动计时器太多次。为了让它工作,我们必须先存储计时器-我已经在myTimer
变量中存储了它
在滚动事件后5秒显示,但仅显示一次:
var myTimer;
function showAlert(inString){
alert(inString);
myTimer = setTimeout(function() {
showAlert();
}, 5000);
}
$(window).scroll(function() {
clearTimeout(myTimer);
if (checkVisible($('#footer'))) {
showAlert("I DONT SEE A FOOTER");
} else {
showAlert("EUREKA - I SEE A FOOTER");
}
});
function showAlert(inString){
myTimer = setTimeout(function() {
alert(inString);
}, 5000);
}
$(window).scroll(function() {
clearTimeout(myTimer);
if (checkVisible($('#footer'))) {
showAlert("I DONT SEE A FOOTER");
} else {
showAlert("EUREKA - I SEE A FOOTER");
}
});
您可以输入load函数
$(document).ready(function()
{
setInterval(function() {
alert("Message to alert every 5 seconds");
}, 5000);
});
取决于您希望计时器在代码中的哪一点启动?是否希望此警报每5秒或滚动事件发生后5秒反复弹出?请更具体。你只是想从页面加载到时间结束时每隔5秒弹出一个窗口吗?@apokryfos是的,从页面加载到时间结束时每隔5秒弹出一个窗口。@praveen的答案就是你想要的。谢谢@thisonegay:))有人试过这个代码吗?它将设置多次间隔<每次在页面上滚动一个像素时,都会触发“代码>滚动”事件。由于您已将
setInterval
放入scroll
事件的callback
,您将收到大量警报。5秒后,我将收到大量警报@thisOneGuy@Hbaecklund我编辑了答案。对不起,花了点时间。我知道你选择了一个答案,希望我能给你一些提示:)你的答案中if
和else
有什么用?你在两种情况下调用相同的函数,对吗?我点击提交,我的答案被搞乱了哈哈,现在修复了哈哈。。有时会发生:)