<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>搜索列表</title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
		<script src="https://cdn.jsdelivr.net/npm/velocity-animate"></script>
	</head>
	<body>
		<div id="app">
			<input placeholder="请输入要查找的内容" v-model="query">
			<fade :query="query" :items="items">
				<li v-for="(item, index) in filteredItems" :key="item.msg" :data-index="index">{{ item.msg }}</li>
			</fade>
		</div>
<pre><code>	&lt;template id=&quot;fade-template&quot;&gt;
		&lt;transition-group name=&quot;item&quot; tag=&quot;ul&quot; @before-enter=&quot;beforeEnter&quot; @enter=&quot;enter&quot; @leave=&quot;leave&quot; :css=&quot;false&quot;&gt;
			&lt;slot&gt;&lt;/slot&gt;
		&lt;/transition-group&gt;
	&lt;/template&gt;

	&lt;script&gt;
		Vue.component('fade', {
			props: ['query', 'items'],
			template: '#fade-template',
			methods: {
				beforeEnter(el) {
					el.style.opacity = 0;
					el.style.height = 0;
				},
				enter(el, done) {
					const delay = el.dataset.index * 150;
					setTimeout(() =&gt; {
						Velocity.animate(el, { opacity: 1, height: '1.6em' }, { complete: done });
					}, delay);
				},
				leave(el, done) {
					const delay = el.dataset.index * 150;
					setTimeout(() =&gt; {
						Velocity.animate(el, { opacity: 0, height: 0 }, { complete: done });
					}, delay);
				}
			},
			computed: {
				filteredItems() {
					const query = this.query.toLowerCase();
					return this.items.filter(item =&gt; item.msg.toLowerCase().indexOf(query) !== -1);
				}
			}
		});

		new Vue({
			el: '#app',
			data: {
				query: '',
				items: [
					{ msg: '张三' },
					{ msg: '李四' },
					{ msg: '王五' },
					{ msg: '徐凤年' },
					{ msg: '李纯' },
				]
			}
		});
	&lt;/script&gt;
&lt;/body&gt;
</code></pre>
</html>
Vue 搜索列表动画效果实现

原文地址: https://www.cveoy.top/t/topic/nQuK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录