当前位置:首页 > VUE

vue实现左右滑动效果

2026-01-23 03:36:20VUE

使用 Vue 实现左右滑动效果

基于 touch 事件实现

监听 touchstarttouchmovetouchend 事件来实现滑动效果。通过计算触摸点的位移判断滑动方向。

<template>
  <div 
    @touchstart="handleTouchStart"
    @touchmove="handleTouchMove"
    @touchend="handleTouchEnd"
    class="slider-container"
  >
    <div class="slider-content" :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
      // 添加滑动结束后的逻辑,如复位或切换页面
    }
  }
}
</script>

<style>
.slider-container {
  overflow: hidden;
  position: relative;
}
.slider-content {
  transition: transform 0.3s ease;
  will-change: transform;
}
</style>

使用 CSS Scroll Snap

利用 CSS 的 scroll-snap 属性实现原生滑动效果,无需复杂 JavaScript 逻辑。

<template>
  <div class="scroll-container">
    <div class="scroll-content">
      <div class="slide-item">Slide 1</div>
      <div class="slide-item">Slide 2</div>
      <div class="slide-item">Slide 3</div>
    </div>
  </div>
</template>

<style>
.scroll-container {
  width: 100%;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  -webkit-overflow-scrolling: touch;
}
.scroll-content {
  display: flex;
  width: max-content;
}
.slide-item {
  scroll-snap-align: start;
  width: 100vw;
  flex-shrink: 0;
}
</style>

使用第三方库(如 Swiper.js)

对于更复杂的滑动需求,可以使用成熟的滑动库 Swiper.js。

安装 Swiper:

npm install swiper

Vue 组件中使用:

<template>
  <swiper
    :slides-per-view="1"
    :space-between="50"
    @swiper="onSwiper"
    @slideChange="onSlideChange"
  >
    <swiper-slide>Slide 1</swiper-slide>
    <swiper-slide>Slide 2</swiper-slide>
    <swiper-slide>Slide 3</swiper-slide>
  </swiper>
</template>

<script>
import { Swiper, SwiperSlide } from 'swiper/vue'
import 'swiper/swiper-bundle.css'

export default {
  components: {
    Swiper,
    SwiperSlide
  },
  methods: {
    onSwiper(swiper) {
      console.log(swiper)
    },
    onSlideChange() {
      console.log('slide change')
    }
  }
}
</script>

使用 Vue Transition 实现动画

结合 Vue 的过渡系统实现滑动动画效果。

<template>
  <div class="slider-wrapper">
    <transition :name="transitionName">
      <div :key="currentIndex" class="slide">
        {{ items[currentIndex] }}
      </div>
    </transition>
    <button @click="prev">Prev</button>
    <button @click="next">Next</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: ['Item 1', 'Item 2', 'Item 3'],
      currentIndex: 0,
      transitionName: 'slide-next'
    }
  },
  methods: {
    next() {
      this.transitionName = 'slide-next'
      this.currentIndex = (this.currentIndex + 1) % this.items.length
    },
    prev() {
      this.transitionName = 'slide-prev'
      this.currentIndex = (this.currentIndex - 1 + this.items.length) % this.items.length
    }
  }
}
</script>

<style>
.slide {
  position: absolute;
  width: 100%;
}
.slide-next-enter-active,
.slide-next-leave-active,
.slide-prev-enter-active,
.slide-prev-leave-active {
  transition: transform 0.5s ease;
}
.slide-next-enter-from {
  transform: translateX(100%);
}
.slide-next-leave-to {
  transform: translateX(-100%);
}
.slide-prev-enter-from {
  transform: translateX(-100%);
}
.slide-prev-leave-to {
  transform: translateX(100%);
}
</style>

每种方法适用于不同场景,原生实现适合简单需求,CSS Scroll Snap 提供较好性能,Swiper.js 适合复杂轮播需求,Vue Transition 适合需要自定义动画的场景。

vue实现左右滑动效果

标签: 效果vue
分享给朋友:

相关文章

vue实现前端分离

vue实现前端分离

Vue 实现前后端分离 前后端分离是一种架构模式,前端负责页面渲染和交互逻辑,后端提供数据接口。Vue.js 作为前端框架,非常适合实现前后端分离的开发模式。 核心实现步骤 创建 Vue 项目 使…

vue实现选择分类

vue实现选择分类

Vue 实现选择分类的方法 使用 v-model 绑定选择值 在 Vue 中可以通过 v-model 指令实现双向数据绑定,适用于下拉选择框(<select>)。以下是一个基本示例:…

vue表格重置怎么实现

vue表格重置怎么实现

重置表格数据的方法 在Vue中重置表格数据通常需要操作绑定的数据源,以下是几种常见实现方式: 直接重置数据源 // 假设表格绑定的是tableData this.tableData = [...t…

vue手写签名如何实现

vue手写签名如何实现

实现手写签名的基本思路 在Vue中实现手写签名功能,通常需要借助HTML5的Canvas API来捕获用户的绘制操作。核心流程包括初始化画布、监听触摸/鼠标事件、记录轨迹以及生成签名图片。 安装依…

vue实现3d宇宙

vue实现3d宇宙

Vue实现3D宇宙效果 使用Three.js库 Three.js是一个强大的JavaScript 3D库,可以轻松集成到Vue项目中。安装Three.js依赖: npm install three…

vue实现画圆弧并着色

vue实现画圆弧并着色

在 Vue 中实现画圆弧并着色 使用 Canvas API 绘制圆弧 在 Vue 组件的 mounted 钩子中,通过 Canvas API 绘制圆弧。创建一个 canvas 元素并获取其上下文:…