vue实现侧滑
Vue 实现侧滑功能的方法
使用 CSS 和 Vue 事件绑定
通过 Vue 的 v-on 指令监听触摸或鼠标事件,结合 CSS 过渡效果实现侧滑。以下是核心代码示例:
<template>
<div class="slide-container">
<div
class="slide-content"
@touchstart="handleTouchStart"
@touchmove="handleTouchMove"
@touchend="handleTouchEnd"
:style="{ transform: `translateX(${offsetX}px)` }"
>
<!-- 内容区域 -->
</div>
</div>
</template>
<script>
export default {
data() {
return {
startX: 0,
offsetX: 0,
isDragging: false
}
},
methods: {
handleTouchStart(e) {
this.startX = e.touches[0].clientX
this.isDragging = true
},
handleTouchMove(e) {
if (!this.isDragging) return
const currentX = e.touches[0].clientX
this.offsetX = currentX - this.startX
},
handleTouchEnd() {
this.isDragging = false
// 根据滑动距离决定是否完全展开或收起
if (this.offsetX > 100) {
this.offsetX = 200 // 展开宽度
} else {
this.offsetX = 0 // 收起
}
}
}
}
</script>
<style>
.slide-content {
transition: transform 0.3s ease;
will-change: transform;
}
</style>
使用第三方库(如 vue-touch)
对于更复杂的手势支持,可以集成 vue-touch 库:
import Vue from 'vue'
import VueTouch from 'vue-touch'
Vue.use(VueTouch, { name: 'v-touch' })
模板中使用 swipe 指令:
<v-touch @swipeleft="onSwipeLeft" @swiperight="onSwipeRight">
<div class="swipeable-content"></div>
</v-touch>
结合 Vuex 管理状态
当侧滑菜单需要跨组件通信时,建议使用 Vuex 管理展开/收起状态:
// store.js
export default new Vuex.Store({
state: {
isMenuOpen: false
},
mutations: {
toggleMenu(state) {
state.isMenuOpen = !state.isMenuOpen
}
}
})
移动端优化技巧
添加 CSS 属性防止滚动穿透:
body.menu-open {
overflow: hidden;
position: fixed;
width: 100%;
}
处理快速滑动惯性:
handleTouchEnd() {
const velocity = this.offsetX / (Date.now() - this.startTime)
if (Math.abs(velocity) > 0.3) {
this.offsetX = velocity > 0 ? 200 : 0
}
}
无障碍访问支持
为屏幕阅读器添加 ARIA 属性:

<div
class="slide-menu"
:aria-hidden="!isOpen"
tabindex="0"
@keydown.esc="closeMenu"
>
以上方法可根据具体需求组合使用,CSS 方案适合简单交互,而复杂场景建议采用成熟的手势库。






