Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.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循环重复按下按钮?_Javascript_Html_Css_Loops - Fatal编程技术网

有没有一种方法可以让javascript循环重复按下按钮?

有没有一种方法可以让javascript循环重复按下按钮?,javascript,html,css,loops,Javascript,Html,Css,Loops,我对javascript非常陌生,所以如果我犯了错误,请容忍我,我正在设计一个网站,允许用户通过按下按钮来改变背景,这一切都很好,很好,但我希望图像能够以时间延迟循环。本质上,我希望用户能够单击一个按钮来更改背景,但我也希望在设定的时间段后单击相同的按钮,在背景中运行javascript循环,这可能吗 更改背景的代码如下所示: $(文档).ready(函数(){ var i=0; $(“#n”)。单击(函数(){ i++; 如果(i>16){i=1;}; $('body').css('backg

我对javascript非常陌生,所以如果我犯了错误,请容忍我,我正在设计一个网站,允许用户通过按下按钮来改变背景,这一切都很好,很好,但我希望图像能够以时间延迟循环。本质上,我希望用户能够单击一个按钮来更改背景,但我也希望在设定的时间段后单击相同的按钮,在背景中运行javascript循环,这可能吗

更改背景的代码如下所示:

$(文档).ready(函数(){
var i=0;
$(“#n”)。单击(函数(){
i++;
如果(i>16){i=1;};
$('body').css('background-image','url(img/'+i+'.jpg)');
});
$(“#p”)。单击(函数(){
我--;

如果(i我的建议是不要模拟单击,而只是调用与单击相同的函数

让我们创建一个可以调用的函数:

function increment() {
  i++;
  if ( i > 16 ){ i = 1; };
  $('body').css('background-image',  'url(img/' + i + '.jpg)');  
}
然后,我们可以将其用于您已有的常规单击:

$("#n").click(increment)
我们还可以定义对该函数的重复调用:

setInterval(increment, 1000)
对于像这样的非时间敏感任务来说,它是非常整洁的。查看提供的链接,了解它是如何工作的,如果你想停止它,如何取消它

@Ritesh Ganjewala在中编写了一个很好的小片段,它将向您展示
setInterval
的功能

@trincot还有一个功能,虽然理解起来有点复杂,但通过使用相同的函数递增和递减计数器,可以减少重复代码。这是编程时应该努力做到的。这叫做。

可以用于循环-

setInterval(()=>{
log('这将每500毫秒重复一次');

},500);
根据设计,您无法使用JavaScript创建用户输入。仔细想想,这很有意义,某些浏览器功能(如请求权限)只有在用户执行操作时才能完成。您不会希望网站同意在没有您输入的情况下授予权限

因此,在您的情况下,最好让事件侦听器(用于用户输入)和setTimeout或requestAnimationFrame(用于自动循环)调用相同的函数

document.getElementById('n')。addEventListener('click',nextColor);
document.getElementById('p')。addEventListener('click',prevColor);
var i=0;
函数nextColor(){
i++;
如果(i>16){i=1;};
document.body.style.backgroundImage=`url(img/${i}.jpg)`;
}
函数prevColor(){
我--;

如果(i不尝试向按钮发送单击事件。而是隔离此类单击执行的功能,然后使用
setTimeout
执行该功能。当用户再次单击时,您可能还希望重置正在进行的超时

下面是它的样子:

$(document).ready(function(){
    var i = 0;
    var delay = 1000; // number of milliseconds 
    var timer = setTimeout(next, delay); // <-- set the time out

    function next(step=1) { // optional argument that should be 1 or -1
        i = (i + 16 + step) % 16; // Use modulo arithmetic to rotate in the range [0..15]
        $('body').css('background-image',  'url(img/' + (i+1) + '.jpg)'); 
        clearTimeout(timer); // interrupt the ongoing time out ...
        timer = setTimeout(next, delay); // <-- and start it again
    }

    $("#n").click(next);

    $("#p").click(next.bind(null, -1)); // bind the argument to be -1
});
$(文档).ready(函数(){
var i=0;
var delay=1000;//毫秒数
var timer=setTimeout(next,delay);//试试这个,这将允许您以固定的时间延迟运行函数

function doThis() {
    console.log('2 seconds over ...');
}

var xyz = setInterval(doThis, 2000);
如果你需要阻止这一切

 clearInterval(xyz);


好吧,我从几个人那里得到了一些答案,我现在得到的是:

<script>

    setInterval(() => {
      $("#n").click();
    }, 7000);

</script>

设置间隔(()=>{
$(“#n”)。单击();
}, 7000);
每7秒钟点击一次我想要的按钮,效果非常好,谢谢大家的帮助!

是的,有可能

单击要更改背景颜色的按钮时,还可以启动超时,该超时将在指定的时间段后调用函数(回调函数),在您的情况下,该函数将更改图像。setinterval将在指定的时间段后重复执行相同的操作

$(document).ready(function(){

var i = 0;

  function increment() {
    i++;
    if ( i > 16 ){ i = 1; };
    $('body').css('background-image',  'url(img/' + i + '.jpg)');  
  }

  function decrement() {
    i--;
    if ( i <= 0 ){ i = 16; };
    $('body').css('background-image',  'url(img/' + i + '.jpg)');  
  }

  $("#p").click(function(){
    increment();
    setInterval(increment, 1000);
  }

  $("#n").click(function(){
    decrement();
    setInterval(decrement, 1000);
  } 

}
$(文档).ready(函数(){
var i=0;
函数增量(){
i++;
如果(i>16){i=1;};
$('body').css('background-image','url(img/'+i+'.jpg)');
}
函数减量(){
我--;

如果(我查一下setTimeout,它应该可以做你想做的事情)非常感谢你,我对它做了一点修改,它直接工作了away@user112918如果你觉得这是你问题的正确答案,你应该将其标记为已被接受,这样Riteh Ganjewala(也是一位新的贡献者)就可以从中获得一些声誉。