Demo记录|移动端H5页面如何实现上下滑动触发事件的小功能

Demo记录|移动端H5页面如何实现上下滑动触发事件的小功能

简单记录一个小demo,如果写h5页面比较实用,可以实现一些有趣的功能。
我这里主要是用来另类的实现抖音视频上下切换播放,因为视频涉及的选集,不能按照网上大部分的使用列表切换来实现上下切换播放,所以使用上下滑动到一个临界点来触发切换播放事件。

实现效果

页面是在手机端via游览器上进行的实测。
页面如下:
请添加图片描述
当进行向下滑动时:
如果滑动的距离超过了100,则在停止滑动时触发对应的alert事件,且通过transform属性进行了页面y轴的实时位移。
请添加图片描述
同样的原理,当进行向上滑动时:
请添加图片描述

代码实现

代码是使用vue3实现,注释很清楚,可以根据原理进行代码转换。

<script setup>
import { onMounted, onUnmounted, ref } from 'vue';

// 在组件挂载时绑定触摸事件
onMounted(() => {
  window.addEventListener('touchstart', handleTouchStart);
  window.addEventListener('touchmove', handleTouchMove);
  window.addEventListener('touchend', handleTouchEnd);
});

// 在组件卸载时解绑触摸事件
onUnmounted(() => {
  window.removeEventListener('touchstart', handleTouchStart);
  window.removeEventListener('touchmove', handleTouchMove);
  window.removeEventListener('touchend', handleTouchEnd);
});

const startY = ref(0); // 记录触摸开始的Y坐标
const moveY = ref(0); // 记录滑动的Y距离
const isMoving = ref(false); // 是否正在滑动

// 监听touchstart事件,记录触摸开始的Y坐标
const handleTouchStart = (e) => {
  startY.value = e.touches[0].clientY;
};
// 监听touchmove事件,计算滑动的Y距离
const handleTouchMove = (e) => {
  if(!isMoving.value) {
    isMoving.value = true;
  }
  moveY.value = e.touches[0].clientY - startY.value;
};
// 监听touchend事件,判断滑动的距离是否超过100px,并执行相应的事件
const handleTouchEnd = () => {
  if(isMoving.value && moveY.value >= 100) {
    alert('向下滑动超过100px了');
  }
  if(isMoving.value && moveY.value <= -100) {
    alert('向上滑动超过100px了');
  }
  startY.value = 0;
  moveY.value = 0;
  isMoving.value = false;
};

</script>

<template>
  <!-- 通过transform实现滑动时页面的跟随 -->
  <div class="root" :style="{ transform: `translateY(${moveY}px)` }">
    <h3>Demo Page</h3>
    <p>滑动距离:{{moveY}}</p>
  </div>
</template>

<style lang="less" scoped>
.root {
  width: 100%;
  height: 100%;

  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;

  position: relative;
  background-color: rgb(0, 255, 234);
}
</style>
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐沐茶壶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值