vue-touch实现上划翻页

本文详细介绍如何在Vue项目中引入并使用vue-touch组件库,实现触摸设备上的滑动事件监听,包括全局安装、main.js引入及具体组件内的事件绑定与处理逻辑。

1、全局引入:

npm insall vue-touch@next --save

2、main.js中引入:

import VueTouch from 'vue-touch'
Vue.use(VueTouch, {name: 'v-touch'})

3、代码中使用

<template>
    <div class="hello" id="start">
    </div>
</template>

<script>
export default {
  name: 'Start',
  data () {
    return {
      startX: 0, // 鼠标开始点击的x坐标
      startY: 0, // 鼠标开始点击的Y坐标
    }
  },
  mounted () {
    // 给被滑动对象添加事件
    let element = document.getElementById('start')
    this.addHandler(element, 'touchstart', this.handleTouchEvent)
    this.addHandler(element, 'touchend', this.handleTouchEvent)
    this.addHandler(element, 'touchmove', this.handleTouchEvent)
  },
  components: {
    Logo
  },
  methods: {
      // 给目标添加事件,处理兼容
    addHandler (element, type, handler) {
        if (element.addEventListener) {
            element.addEventListener(type, handler, false)
        } else if (element.attachEvent) {
            element.attachEvent('on' + type, handler)
        } else {
            element['on' + type] = handler
        }
    },
    // 具体的滑动处理
    handleTouchEvent (event) {
      switch (event.type) {
        case 'touchstart':
          this.startX = event.touches[0].pageX
          this.startY = event.touches[0].pageY
          break
        case 'touchend':
          var spanX = event.changedTouches[0].pageX - this.startX
          var spanY = event.changedTouches[0].pageY - this.startY
          if(spanY < -50){
              this.$router.push('/end')
          }
          break
        case 'touchmove':
          // 阻止默认行为
          event.preventDefault()
          break
      }
    },
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
@import './css/style.css';
</style>

使用Vue实现抖音上下翻页效果有以下两种常见方法: - **使用v-touch插件**:上下滑动翻页使用v-touch,它是基于hammer.js进行的vue封装。当然,也可以不使用该插件,直接用原生js,通过`touchStart`、`touchMove`、`touchEnd`来实现[^1]。 - **结合Vue3和Swiper**:可以借助Vue3和Swiper来实现。这是一个Vue组件,用于展示垂直方向的轮播图,每个轮播项包含视频及相关信息。视频能自动播放、循环播放,还有播放进度条。每个轮播项下方会展示视频的作者、简介信息以及点赞、评论、收藏和分享等操作按钮。点击视频作者头像可展开/收起回复列表,点击按钮能触发相应业务逻辑操作,如点赞、收藏、评论和分享[^2]。 若要实现分页展示效果以减少服务器响应时间,在对接接口时,若后端返回的参数内有`page`(页数)、`pagesize`(一页的数据条数),可使用vue3 setup进行演示,让接口的数据不直接全部展示在页面上 [^3]。 ### 示例代码 ```vue <template> <div id="app"> <swiper :options="swiperOptions"> <swiper-slide v-for="(item, index) in videoList" :key="index"> <video :src="item.videoUrl" autoplay muted loop></video> <div class="video-info"> <p>{{ item.author }}</p> <p>{{ item.description }}</p> <button @click="like(item)">点赞</button> <button @click="comment(item)">评论</button> <button @click="collect(item)">收藏</button> <button @click="share(item)">分享</button> </div> </swiper-slide> </swiper> </div> </template> <script setup> import { ref } from 'vue'; import Swiper, { Navigation, Pagination } from 'swiper'; import 'swiper/css'; import 'swiper/css/navigation'; import 'swiper/css/pagination'; Swiper.use([Navigation, Pagination]); const videoList = ref([ { videoUrl: 'video1.mp4', author: '作者1', description: '视频描述1' }, { videoUrl: 'video2.mp4', author: '作者2', description: '视频描述2' }, // 更多视频数据 ]); const swiperOptions = ref({ direction: 'vertical', loop: true, pagination: { el: '.swiper-pagination', clickable: true, }, }); const like = (item) => { // 点赞逻辑 }; const comment = (item) => { // 评论逻辑 }; const collect = (item) => { // 收藏逻辑 }; const share = (item) => { // 分享逻辑 }; </script> <style scoped> .swiper { width: 100%; height: 100vh; } .swiper-slide { display: flex; justify-content: center; align-items: center; } video { width: 100%; height: 100%; object-fit: cover; } .video-info { position: absolute; bottom: 20px; left: 20px; color: white; } </style> ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值