jquery的removeClass(),addClass()无效

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');//这样写试试