有没有一种方法可以让javascript循环重复按下按钮?
我对javascript非常陌生,所以如果我犯了错误,请容忍我,我正在设计一个网站,允许用户通过按下按钮来改变背景,这一切都很好,很好,但我希望图像能够以时间延迟循环。本质上,我希望用户能够单击一个按钮来更改背景,但我也希望在设定的时间段后单击相同的按钮,在背景中运行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
$(文档).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(也是一位新的贡献者)就可以从中获得一些声誉。