Javascript 使用具有间隔的函数来更改div的类?
我正在尝试创建一个简单的游戏,它有一个函数,选择一个随机div(从选择中),然后使用一个间隔设置一个随机倒计时,当倒计时达到0时,该div的类将改变。 然后我有它,所以当你点击分配给那个类的东西时,它会变回原来的类 在我运行代码的时候,div在倒计时后似乎在变化,但在我单击它们时不会变化。 但我的主要问题是,更改随机div的主函数只运行一次 div(“框”)以开头。请稍候 我的代码:Javascript 使用具有间隔的函数来更改div的类?,javascript,jquery,class,intervals,Javascript,Jquery,Class,Intervals,我正在尝试创建一个简单的游戏,它有一个函数,选择一个随机div(从选择中),然后使用一个间隔设置一个随机倒计时,当倒计时达到0时,该div的类将改变。 然后我有它,所以当你点击分配给那个类的东西时,它会变回原来的类 在我运行代码的时候,div在倒计时后似乎在变化,但在我单击它们时不会变化。 但我的主要问题是,更改随机div的主函数只运行一次 div(“框”)以开头。请稍候 我的代码: var react=function(){ var-box=parseInt(Math.random()*64)
var react=function(){
var-box=parseInt(Math.random()*64);
while($(“box”+box).hasClass(“now”)){
box=parseInt(Math.random()*64);
}
var timer=parseInt((Math.random()*10)+2);
var countdown=setInterval(函数(){
计时器-=1
$(“#box”+box).text(parseFloat(timer.toFixed(0));
如果(计时器问题在于如何绑定单击
事件。您将希望绑定该事件,而不是使用单击()
运行setInterval
时,它会向元素添加一个类“new”。但是,由于没有元素具有该类名(在$doc.ready中调用click()
时),因此不会触发任何处理程序
首先,一把小提琴演示了这一点:
下面是一个使用代码+委派事件的示例:
var react = function(){
var box = parseInt(Math.random()*64);
while($("#box"+box).hasClass("now")) {
box = parseInt(Math.random()*64);
}
var timer = parseInt((Math.random()*10)+2);
var countdown=setInterval(function(){
var $el = $('#box' + box);
timer-=1
$el.text(parseFloat(timer.toFixed(0)));
if(timer<=0){
clearInterval(countdown);
$el.text("")
.removeClass("wait")
.addClass("now");
}
},1000);
}
$(document).ready(function(){
$parent = $('.parent-to-now-elements') // $('body') works, but not as efficient
setInterval(react, 1000);
$parent.on('click', '.now', function(){
$(this).removeClass("now");
$(this).addClass("wait");
})
})
var react=function(){
var-box=parseInt(Math.random()*64);
while($(“#box”+box).hasClass(“now”)){
box=parseInt(Math.random()*64);
}
var timer=parseInt((Math.random()*10)+2);
var countdown=setInterval(函数(){
变量$el=$(“#box”+box);
计时器-=1
$el.text(parseFloat(timer.toFixed(0));
中频(定时器)
“但我的主要问题是,更改随机div的主函数只运行一次。”
我想你指的是下面这一行
setInterval(react(), 1000);
修改如下:
setInterval(react, 1000);
更新:
假设有固定数量的div,可以在页面加载时为所有div分配一个公共处理程序,如
$(document).ready(function(){
$('your-common-div-selector').click(function(){
if($(this).hasClass("now")&& !$(this).hasClass("wait")) {
this.removeClass("now");
this.addClass("wait");
});
});
顺便说一句:您的选择器错误:while($(“box”+box).hasClass(“now”)){
缺少一个#
来按ID选择元素。在setInterval内调用.click
的问题是,如果所选的随机div是以前选择过的,则您将另一个click
事件绑定到同一元素。这将导致元素触发回调两次(依此类推-取决于随机选择器的随机程度…)单击现在起作用,但间隔不会发生多次,我尝试了您的建议,它只是冻结了所有内容。您是如何委托单击事件的?我假设如下:$('.parent_元素')。on('click',now',function(){/*logic*/})
?-我会更新我的答案,再解释一下…@user3378151-没问题。我制作了一把小提琴(),证明它确实有效。祝游戏好运!