Vue.js 实现动态搜索列表并添加动画效果
该代码使用 Vue.js 实现了一个简单的动态搜索列表,并使用 Velocity.js 添加了动画效果。以下是代码的优化版本:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue.js 动态搜索列表</title>
<script src="http://www.mrfront.com/docs/velocity.js/index.html"></script>
</head>
<body>
<div id="app">
<input placeholder="请输入要查找的内容" v-model="query">
<transition-group name="item" tag="ul" @before-enter="beforEnter"
@enter="enter" @leave="leave" v-bind:css="false">
<li v-for="(item,index) in ComputedList" :key="item.msg" :data-index="index">
{{item.msg}}
</li>
</transition-group>
</div>
<script>
var vm = new Vue({
el: '#app',
data() {
return {
query: '',
items: [
{ msg: '张三' }, { msg: '李四' }, { msg: '张芳芳' }, { msg: '王琳琳' }, { msg: '丰源' }
]
}
},
computed: {
ComputedList() {
return this.items.filter(function(item) {
return item.msg.toLowerCase().indexOf(this.query.toLowerCase()) !== -1
}.bind(this))
}
},
methods: {
beforeEnter(el) {
el.style.opacity = '0'
el.style.height = '0'
},
enter(el, done) {
var delay = el.dataset.index * 150
setTimeout(function() {
Velocity(el, { opacity: '1', height: '1.6em' }, { complete: done })
}, delay)
},
leave(el, done) {
var delay = el.dataset.index * 150
setTimeout(function() {
Velocity(el, { opacity: '0', height: '0' }, { complete: done })
}, delay)
}
}
})
</script>
</body>
</html>
代码优化说明:
- 将
<transition-gruop>改为<transition-group> - 在
computed中的ComputedList函数中添加了return语句,并使用.bind(this)将this指向当前 Vue 实例,确保this.query指向正确的变量。 - 在
methods中的beforeEnter、enter和leave函数中,将opacity和height的值改为字符串类型,以确保正确设置元素的样式。 - 删除了
enter和leave函数中多余的)。
代码示例展示了如何使用 Vue.js 实现动态搜索列表,并使用 Velocity.js 添加动画效果,增强用户体验。开发者可以根据实际需求,进一步完善代码功能,例如添加更多的动画效果,或者自定义搜索逻辑等。
原文地址: https://www.cveoy.top/t/topic/nQuk 著作权归作者所有。请勿转载和采集!