vue实现滑动
Vue 实现滑动效果的方法
使用 CSS 过渡和动画
通过 Vue 的过渡系统结合 CSS 实现滑动效果。适用于简单的元素入场/离场动画。
<template>
<transition name="slide">
<div v-if="show">滑动内容</div>
</transition>
</template>
<style>
.slide-enter-active, .slide-leave-active {
transition: all 0.5s ease;
}
.slide-enter-from, .slide-leave-to {
transform: translateX(100%);
}
</style>
使用第三方库(如 Swiper)
对于复杂的滑动组件(轮播图等),推荐使用专为 Vue 优化的 Swiper 库。
安装:
npm install swiper vue-awesome-swiper
使用示例:

<template>
<swiper :options="swiperOptions">
<swiper-slide>Slide 1</swiper-slide>
<swiper-slide>Slide 2</swiper-slide>
</swiper>
</template>
<script>
import { Swiper, SwiperSlide } from 'vue-awesome-swiper'
import 'swiper/css/swiper.css'
export default {
components: { Swiper, SwiperSlide },
data() {
return {
swiperOptions: {
autoplay: true,
loop: true
}
}
}
}
</script>
自定义手势滑动
通过 touch 事件实现原生滑动交互,适合需要精细控制的情况。
<template>
<div
@touchstart="startDrag"
@touchmove="onDrag"
@touchend="endDrag"
:style="{ transform: `translateX(${offsetX}px)` }"
>
可滑动内容
</div>
</template>
<script>
export default {
data() {
return {
startX: 0,
offsetX: 0,
isDragging: false
}
},
methods: {
startDrag(e) {
this.startX = e.touches[0].clientX
this.isDragging = true
},
onDrag(e) {
if (!this.isDragging) return
this.offsetX = e.touches[0].clientX - this.startX
},
endDrag() {
this.isDragging = false
// 添加滑动结束后的逻辑
}
}
}
</script>
使用 Vue 插件(如 vue-touch)
通过封装好的插件快速实现滑动功能。

安装:
npm install vue-touch@next
注册插件:
import Vue from 'vue'
import VueTouch from 'vue-touch'
Vue.use(VueTouch, { name: 'v-touch' })
使用示例:
<v-touch @swipeleft="onSwipeLeft" @swiperight="onSwipeRight">
<div>滑动区域</div>
</v-touch>
注意事项
- 移动端开发需确保添加 viewport meta 标签
- 考虑性能优化,避免频繁的 DOM 操作
- 复杂交互建议使用专业滑动库
- 注意处理 touch 事件与 click 事件的冲突






