Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.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 在没有setTimeout的情况下删除和添加类时,不会出现Css动画_Javascript_Css_Animation - Fatal编程技术网

Javascript 在没有setTimeout的情况下删除和添加类时,不会出现Css动画

Javascript 在没有setTimeout的情况下删除和添加类时,不会出现Css动画,javascript,css,animation,Javascript,Css,Animation,将class.is animated添加到.box元素时,它将执行更改背景的简单动画。 我想让它做这个简单的动画,比如说每2秒。问题是,如果它已经有了.is animated类,并且我删除了它,然后再次添加,那么动画不会发生,除非我将添加内容放入setTimeout函数中。为什么会这样?在这种情况下是否必须使用setTimeout HTML CSS .box{ 显示:内联块; 高度:50px; 宽度:50px; 背景:红色; } .box.is-animated{animation:cha

将class.is animated添加到.box元素时,它将执行更改背景的简单动画。 我想让它做这个简单的动画,比如说每2秒。问题是,如果它已经有了.is animated类,并且我删除了它,然后再次添加,那么动画不会发生,除非我将添加内容放入setTimeout函数中。为什么会这样?在这种情况下是否必须使用setTimeout

HTML


CSS

.box{
显示:内联块;
高度:50px;
宽度:50px;
背景:红色;
}
.box.is-animated{animation:changebg 1s ease;}
.box_two{左边距:50px;}
@关键帧更改bg{
0%{背景:红色;}
75%{背景:绿色;}
100%{背景:红色;}
}
JS

var-box\u-one=document.querySelector('.box\u-one');
setInterval(函数(){
box_one.classList.remove('is-animated');
box_one.classList.add('is-animated');
}, 2000);
var-box_-two=document.querySelector('.box_-two');
setInterval(函数(){
框2.classList.remove('is-animated');
setTimeout(函数(){
框2.classList.add('is-animated');
}, 100);
}, 2000);

这不需要js,只需在动画属性中添加“无限”

至于问题本身,正如Niet the Dark Absol所指出的,如果在同一个迭代中添加和删除一个类,css永远不会计算它,那么确实需要使用超时

.box{
显示:内联块;
高度:50px;
宽度:50px;
背景:红色;
}
.box.is-animated{animation:changebg 2s ease infinite;}
.box_two{左边距:50px;}
@关键帧更改bg{
0%{背景:红色;}
50%{背景:绿色;}
100%{背景:红色;}
}

如果在同一个JS“循环”中删除该类并再次添加,它是否真的被删除了?(CSS看不到!)