Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/40.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 在继续之前,等待使用js设置CSS属性。_Javascript_Css - Fatal编程技术网

Javascript 在继续之前,等待使用js设置CSS属性。

Javascript 在继续之前,等待使用js设置CSS属性。,javascript,css,Javascript,Css,考虑这个JS函数: function myFunc() { const date = new Date(); const secs = date.getSeconds(); const secDeg = 360*(secs / 60)+ 90 ; hand.style.transitionDuration = '0s'; hand.style.transform = `rotate(${secDeg}deg)`; hand.style.transitionDurati

考虑这个JS函数:

function myFunc() {

  const date = new Date();
  const secs = date.getSeconds();
  const secDeg = 360*(secs / 60)+ 90 ;

  hand.style.transitionDuration = '0s';
  hand.style.transform = `rotate(${secDeg}deg)`;
  hand.style.transitionDuration = '2s';
}

我希望旋转以0秒的过渡完成。但是,即使在旋转后设置,它仍使用值“2s”。这是因为
rotate()
完成时间太长吗?我该怎么处理?我想我可以用
transitionend
事件监听器来做,但是有没有更干净的方法呢?

它被调用为fast,所以它会在当时覆盖计时器;)因此,使用延迟或事件结束是最好的

(如果您有jquery)


另一个选项是使用jqueryanimate函数,它在完成时有一个回调。或者(插件)当我将transitionDuration设置为0时,我似乎无法侦听“transitionend”事件:/。如中所示,即使发生旋转,“transitionend”也不会触发,因为transitionDuration为零。不得不使用setTimeout,我真的不喜欢它。
function myFunc() {

  const date = new Date();
  const secs = date.getSeconds();
  const secDeg = 360*(secs / 60)+ 90 ;

  hand.style.transitionDuration = '0s';
  hand.style.transform = `rotate(${secDeg}deg)`;
  $(hand).one("webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend",
              function(event) {
                  hand.style.transitionDuration = '2s';
  });
}