javascript - jQuery UI sortable 在排序时触发 css3 动画

标签 javascript jquery jquery-ui jquery-ui-sortable

我有一些 sortables,它们通过一个类定义了 CSS3 关键帧动画。排序时,我注意到在 this Fiddle. 中看到的奇怪行为

.slideLeft {
  animation-name: slideLeft;
  -webkit-animation-name: slideLeft;    

  animation-duration: 1s;   
  -webkit-animation-duration: 1s;

  animation-timing-function: ease-in-out;   
  -webkit-animation-timing-function: ease-in-out;       

  visibility: visible !important;   
}

@keyframes slideLeft {
  0% {
     transform: translateX(150%);
  }
  50%{
    transform: translateX(-8%);
  }
  65%{
    transform: translateX(4%);
  }
  80%{
    transform: translateX(-4%);
  }
  95%{
    transform: translateX(2%);
  }         
  100% {
    transform: translateX(0%);
  }
}

启动 jQuery 排序。

$(function() {
  $( "#sortable" ).sortable();
});

动画在排序 startstop 时触发,而动画类未被重新应用。 jQuery 修改 DOM 似乎导致了某种回流。但是它是如何一直触发动画的,又是如何避免的呢?目标是排序时完全没有动画,同时保持类。

回答: 这是有道理的,因为我们拖动的项目只是一个克隆,它在 start 上动画,因为我们插入克隆到 DOM。 stop 上出现的动画具有相同的原因,因为克隆随后被附加到它的新位置,再次触发文档的重排。

最佳答案

我认为,您需要在动画完成后从 li 项目中删除 slideLeft 类。像这样的东西:

$(function(){
    $( "#sortable" ).sortable();
    //one second later the slideLeft class  is removed from each li.
    window.setTimeout(function(){
      $( "#sortable" ).find(".slideLeft").removeClass("slideLeft");
    }, 1000)

});

希望对你有用。

PD.

当对列表进行排序时,jquery-ui 会更改 DOM,因为元素被移除并再次插入。另外 jquery-ui 会创建另一个与 placeholder 具有相同属性的元素,显示移动元素的位置。

然后如果你不删除 slideLeft 类,动画将随着列表中的每个变化播放

关于javascript - jQuery UI sortable 在排序时触发 css3 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31678925/

相关文章:

javascript - 带参数的自定义验证

javascript - element.cloneNode(true)(深度克隆)的效率如何?

jQuery 工具提示显示在下拉菜单后面

javascript - 用 html 内容替换 ChildNode 值

javascript - 如何将 slideDown() 与 appendTo() 一起使用

javascript - 仅获取数据层中数组的第一个值

javascript - 通过 OAuthSimple.js 发布到 Twitter

javascript - jQuery 立即停止动画

jquery - 使用 JQueryUI 初始化工具提示

javascript - 在 `Draggable` 之后追加 `Droppable`