Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript设置间隔每5秒一次_Javascript_Jquery_Setinterval - Fatal编程技术网

Javascript设置间隔每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

我想在每个警报之间设置5秒的间隔。我们发现:

但是我应该将
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
有什么用?你在两种情况下调用相同的函数,对吗?我点击提交,我的答案被搞乱了哈哈,现在修复了哈哈。。有时会发生:)