css代码:
.anim{
animation:myfirst 5s;
}
@keyframes myfirst
{
from {background:red;}
to {background:yellow;}
}
js代码:
$('.btn').on('click',function(){
$('.div1').removeClass('anim').addClass('anim');
});
$('.btn')是一个按钮,执行一次后,想通过js控制class来执行第二次,但是.removeClass('anim').addClass('anim')会无效,这是为什么???
如果是下面这样就可以:
$('.div1').removeClass('anim');
setTimeout(function(){
$('.div1').addClass('anim');
},1);
$('.div1').removeClass('anim').siblings().addClass('anim');试试这个,
你第一种写法,js识别不了你到底是要移除还是添加,实际情况下并不是先执行一个再执行另一个的
$('.div1').removeClass('anim').addClass('anim');你这样js会在很短很短的时间(几乎你根本没法觉察出来)直接移出anim,然后添加anim类,所以肯定不会出现效果,
但是
$('.div1').removeClass('anim');
setTimeout(function(){
$('.div1').addClass('anim');
},1);
为什么就又可以了呢?很简单,setTimeout这个函数,js会将执行的内容放到队列里面去,所以会先执行完
removeClass,然后再去执行setTimeout,里面的内容,虽然setTimeout设置的时间只有1s但是引擎会知道有先后之分,所以就会看到你要的效果。你可以看下setTimeout具体的执行过程
$('.div1').removeClass('anim').addClass('anim');时,removeClass()和addClass()会被同步调用,过渡会立即完成。
$('.div1').removeClass('anim');
$('.div1').addClass('anim');//这样写试试