jQuery - 动画完成持续时间

Posted

技术标签:

【中文标题】jQuery - 动画完成持续时间【英文标题】:jQuery - animationComplete duration 【发布时间】:2019-07-20 00:24:33 【问题描述】:

我的项目使用 jQuery 移动库中提供的 animationComplete 函数 - https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.js

由于一系列对象是动画以及要在每个动画点上完成的一系列执行,animationComplete 函数作为一个很好的回调来执行所需的函数。

但是,考虑到库中故意将持续时间增加了 3 倍,animationComplete 回调的持续时间似乎有所延迟)。

// Parse the durration since its in second multiple by 1000 for milliseconds
// Multiply by 3 to make sure we give the animation plenty of time.
duration = parseFloat(
    $( this ).css( props[ animationType ].duration )
 ) * 3000;

是否有更好的方法来实现相同的目标(可能不使用库)?

【问题讨论】:

你也可以使用 jquery animate。 嗨丹尼尔,过渡是在 css 中完成的,我无法更改它。有没有更好的方法来用 javascript 收听它? Callback when CSS3 transition finishes的可能重复 【参考方案1】:

您可以使用 eventlistener animationend 来检查 css 动画的结束。

const myBtn = document.getElementsByTagName('button')[0];
const myH1 = document.getElementById('myh1');

const removeClass = (e) => 
  console.log('animation ends');
  e.target.classList.remove('animated', 'bounce');


const animate = () => 
  myH1.classList.add('animated', 'bounce');

  myH1.addEventListener("webkitAnimationEnd", removeClass);
  myH1.addEventListener("mozAnimationEnd", removeClass);
  myH1.addEventListener("MSAnimationEnd", removeClass);
  myH1.addEventListener("oanimationend", removeClass);
  myH1.addEventListener("animationend", removeClass);


myBtn.addEventListener('click', animate);
@-webkit-keyframes bounce 
  from,
  20%,
  53%,
  80%,
  to 
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  
  40%,
  43% 
    -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
    animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
    -webkit-transform: translate3d(0, -30px, 0);
    transform: translate3d(0, -30px, 0);
  
  70% 
    -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
    animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
    -webkit-transform: translate3d(0, -15px, 0);
    transform: translate3d(0, -15px, 0);
  
  90% 
    -webkit-transform: translate3d(0, -4px, 0);
    transform: translate3d(0, -4px, 0);
  


@keyframes bounce 
  from,
  20%,
  53%,
  80%,
  to 
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  
  40%,
  43% 
    -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
    animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
    -webkit-transform: translate3d(0, -30px, 0);
    transform: translate3d(0, -30px, 0);
  
  70% 
    -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
    animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
    -webkit-transform: translate3d(0, -15px, 0);
    transform: translate3d(0, -15px, 0);
  
  90% 
    -webkit-transform: translate3d(0, -4px, 0);
    transform: translate3d(0, -4px, 0);
  


.bounce 
  -webkit-animation-name: bounce;
  animation-name: bounce;
  -webkit-transform-origin: center bottom;
  transform-origin: center bottom;


.animated 
  -webkit-animation-duration: 2s;
  animation-duration: 2s;
  -webkit-animation-fill-mode: both;
  animation-fill-mode: both;
<h1 id="myh1">Animate me</h1>
<button>click to animate</button>

【讨论】:

以上是关于jQuery - 动画完成持续时间的主要内容,如果未能解决你的问题,请参考以下文章

jQuery的动画方法

jQuery中短距离和长持续时间的微妙字体大小动画

jQuery动画 - 持续时间不起作用

javascript-jquery对象的动画处理

如何按比例设置此 jQuery 动画的持续时间?

每次在 jquery 中调用此函数时,如何添加自定义动画持续时间