javascript - 来回动画 div

标签 javascript css animation

我不是专家开发人员。我正在寻求一些帮助。

我试图使用toggleClass让div来回移动;

$('div').on('click', function() {
    $(this).toggleClass('active');
});

和关键帧;

.active {
    animation-name: moveme;
    animation-duration: 1s;
    animation-timing-function: linear;
    animation-fill-mode: forwards;
}

@keyframes moveme {
    0%  {transform: translate(0,0)}
    50%  {transform: translate(-200px, 0px)}
    100%  {transform: translate(-200px,-50px);}
}

现在,当 div 返回到之前的位置时,它不会产生动画。 我希望 div 使用相同的动画但向后进行动画处理。 我怎样才能做到这一点?

在这里您可以看到我正在努力实现的目标 jsfiddle.net/jmrMW/43/ 我只是为了示例而制作了一个简单的动画,但将来它会变得更加复杂。

先谢谢你了^^

最佳答案

Javascript 可以立即添加和删除类。并且您的 CSS 仅将动画绑定(bind)到 .active 类,因此当您第二次单击时 - 您会丢失您的类 - 您会丢失轻微的动画。

现在,您可以复制我之前提到的所有内容,但是来吧!程序员从不重复,他们只是利用。发现 CSS3 动画的所有威力不是一个好主意吗?

所以,我想建议另一种方法:设置animation-direction:alternateanimation-play-state:paused。然后定义用于移动的 CSS 类,无论哪种方式:

.moving {
  animation-play-state: running;
}

然后,在单击给定元素后将其应用到给定元素仅 1 秒:

var $moveable = $( '.moveable' ).eq( 0 );

$moveable.click(function() {
    $moveable.addClass( 'moving' );
    setTimeout(function() {
         $moveable.removeClass( 'moving' );
    }, 1000);
});

See fiddle.

更新

这个解决方案有一个主要缺点 - 在 JS 和 CSS 中使用计时器,这显然不匹配。动画现在是无限的,所以每次它都会比应该的更进一步。但是我们可以增加animation-iteration-count来禁止动画进入下一个周期。希望这仍然很有趣!

See fiddle.

关于javascript - 来回动画 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41871730/

相关文章:

jquery - 如何延迟加载背景图像

android - 如何在recyclerview上设置动画

javascript - CSS fade with JS callback 设置css display on completion中断动画

javascript - Jquery:需要帮助理解为什么它同时隐藏和显示列表元素,我在脚本中自相矛盾吗?

javascript - 如何以简单的方式获取当前版本中 yAxis highcharts 显示的最后一个值?

javascript - 在页面重新加载时保留表单数据

css - 在 Chrome 的 iframe 内下拉额外的空白

javascript - React Native 中的 If/else 语句

javascript - 由于不推荐使用Buffer(),因此将DesktopCapturer保存到Electron中的文件中

html - CSS 不适用于每个元素