javascript – 如何使用Vue.js为列表排序设置动画
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 如何使用Vue.js为列表排序设置动画,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2666字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 如何使用Vue.js为列表排序设置动画](/upload/InfoBanner/zyjiaocheng/726/25c2150ace1d4d7e9a2b7c6c9b5e31c6.jpg)
我正在尝试使用Vue.js对列表进行排序动画,但并非所有项目都是动画的.你知道为什么吗?以及如何使它工作?
new Vue({
el: '#app',
data: {
reverse: 1,
items: [
{ name: 'Foo' },
{ name: 'Bar' },
{ name: 'Baz' },
{ name: 'Qux' }
]
}
})
.moving-item {
transition: all 1s ease;
-webkit-transition: all 1s ease;
}
ul {
list-style-type: none;
padding: 0;
position: relative;
}
li {
position: absolute;
border: 1px solid #42b983;
height: 20px;
width: 150px;
padding: 5px;
margin-bottom: 5px;
color: #42b983;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.0-alpha.2/vue.min.js"></script>
<div id="app">
<button on-click="reverse = Math.abs(reverse-1)">
<span v-if="reverse == 0">△</span>
<span v-if="reverse == 1">▽</span> Order
</button>
<ul>
<li class="moving-item" v-for="item in items | orderBy 'name' reverse" bind-style="{ top: ($index * 35) + 'px'}">{{ item.name }}</li>
</ul>
</div>
解决方法:
我认为问题是在排序期间只有一个元素留在DOM中.其他三个被删除并重新插入以满足新的排序 – 但结果他们没有触发动画.
通常,使用Vue过渡系统(http://vuejs.org/guide/transitions.html)完成动画.但是,使用该技术将发生删除和重新插入而不跟踪位置状态的相同基本问题.通常,项目的动画独立于其先前和新位置(如旧位置的淡出和新位置的淡入).
如果你真的需要从旧位置动画到新位置,我认为你需要编写自己的Javascript转换,记住每个项目在删除之前的位置,并在插入时将其动画到新位置.
这里有一个例子应该是一个很好的起点:http://vuejs.org/guide/transitions.html#JavaScript_Only_Transitions
另一种选择是不按过滤器排序,而是在javascript中进行排序(这样v-for只渲染一次).然后针对项目上的新索引参数定位绑定样式,如下所示:
new Vue({
el: '#app',
data: {
reverse: 1,
items: [
{ name: 'Foo', position: 0 },
{ name: 'Bar', position: 1 },
{ name: 'Baz', position: 2 },
{ name: 'Qux', position: 3 }
]
},
methods: {
changeOrder: function (event) {
var self = this;
self.reverse = self.reverse * -1
var newItems = self.items.slice().sort(function (a, b) {
var result;
if (a.name < b.name) {
result = 1
}
else if (a.name > b.name) {
result = -1
}
else {
result = 0
}
return result * self.reverse
})
newItems.forEach(function (item, index) {
item.position = index;
});
}
}
})
.moving-item {
transition: all 1s ease;
-webkit-transition: all 1s ease;
}
ul {
list-style-type: none;
padding: 0;
position: relative;
}
li {
position: absolute;
border: 1px solid #42b983;
height: 20px;
width: 150px;
padding: 5px;
margin-bottom: 5px;
color: #42b983;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.0-alpha.2/vue.min.js"></script>
<div id="app">
<button on-click="changeOrder">
<span v-if="reverse == -1">△</span>
<span v-if="reverse == 1">▽</span> Order
</button>
<ul>
<li class="moving-item" v-for="item in items" bind-style="{ top: (item.position * 35) + 'px'}">{{ item.name }}</li>
</ul>
</div>
内容总结
以上是互联网集市为您收集整理的javascript – 如何使用Vue.js为列表排序设置动画全部内容,希望文章能够帮你解决javascript – 如何使用Vue.js为列表排序设置动画所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。