我正在尝试编写一个指令,使用 CSS 过渡将元素从屏幕上的一个位置移动到另一个位置,其中位置由元素上的 Javascript / 属性确定,并且在预写的 CSS。另外,我需要一个回调,到 $scope 中的一个函数,在转换结束时完成,这是在自定义属性中指定的。所以元素看起来像
<button move-me="100" move-me-after="afterMove()">Move Me!</button>
为了为此使用 $animate,在我的自定义指令 moveMe 中,单击时我会动态地将样式块添加到页面
<style> .move-me-1 {....}</style>
然后使用
$animate.addClass(iElement, 'move-me-1', function() { ... });
完成后处理动画和回调。一个示例 plunkr 可在
http://plnkr.co/edit/XRMRO93vl248Ve02Jnpo?p=preview
这似乎过于复杂:向页面添加样式标签似乎相当复杂。我这样做是为了可以在外部样式表中指定转换本身,根据运行时间和计时函数,并使用 $animate.addClass 以便 Angular 可以确定触发回调的正确时间。
有没有更简单/更好的方法来实现我想要的?
这个例子被简化为我的实际用例。在我的例子中,动画元素是在指令中创建的,并在最后被删除,纯粹是一种临时的视觉辅助。除了位置之外,还使用状态之间的 CSS 过渡为元素的开始和最终样式动态确定高度 + 宽度。每一种风格都可以有不同的过渡时间+定时功能来达到我想要的效果。多个元素可以同时移动到/从不同的位置,所以 JS/CSS 必须允许这样做。