uniapp项目实践自定义滑动触摸组件实现示例

 更新时间:2023年09月06日 08:37:45   作者:MarkGuan  
这篇文章主要介绍了uniapp项目实践自定义滑动触摸组件实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

准备工作

在 APP 的日常开放过程中,我们经常可以看到上拉刷新、下拉刷新、左滑、右滑、触底加载等效果,那其中的原理是如何呢,又是如何实现的呢,下面就一探究竟。这篇文章主要是讲述自定义滑动触摸组件的方放,兼容网页 H5 端、微信小程序端和 App 端。

  • components新建一个q-swiper文件夹,并新建一个q-swiper.vue的组件;
  • 按照前一篇所说的页面结构,编写好预定的滑动触摸页面;

原理分析

自定义滑动触摸组件就是采用普通的方法进行判断滑动上下左右的距离,从而实现滑动效果。

主要使用到的事件有ontouchstartontouchendonmousedownonmouseup

根据pageXpageYclientXclientY来判断滑动方向从而实现滑动功能。

组件实现

准备工作和原理分析完成后,接下来写一个简单的自定义滑动模块组件。

模板部分

<view
  class="q-swiper"
  @touchstart="handlerStart"
  @touchend="handlerEnd"
  @mousedown="handlerStart"
  @mouseup="handlerEnd">
  <slot name="content">
    <!-- 插槽自定义内容 -->
  </slot>
</view>

样式部分

.q-swiper {
  width: 100%;
  height: 100%;
}

脚本部分

  • 引入依赖包和属性设置
import { reactive } from "vue";
// 滑动信息
const touchInfo = reactive({
  touchX: "",
  touchY: "",
});
// 滑动类型
const touchTypes = reactive({
  left: {
    id: 1,
    name: "左滑",
    val: "left",
  },
  right: {
    id: 2,
    name: "右滑",
    val: "right",
  },
  up: {
    id: 3,
    name: "上滑",
    val: "up",
  },
  down: {
    id: 4,
    name: "下滑",
    val: "down",
  },
});
// 发送事件
const emits = defineEmits(["change"]);
  • 滑动方法定义
// 滑动开始
function handlerStart(e) {
  let { clientX, clientY } = e.changedTouches[0];
  touchInfo.touchX = clientX;
  touchInfo.touchY = clientY;
}
// 滑动结束
function handlerEnd(e) {
  let { clientX, clientY } = e.changedTouches[0];
  let diffX = clientX - touchInfo.touchX,
    diffY = clientY - touchInfo.touchY,
    absDiffX = Math.abs(diffX),
    absDiffY = Math.abs(diffY),
    type = "";
  if (absDiffX > 50 && absDiffX > absDiffY) {
    type = diffX >= 0 ? "right" : "left";
  }
  if (absDiffY > 50 && absDiffX < absDiffY) {
    type = diffY < 0 ? "up" : "down";
  }
  if (type) {
    console.log("滑动信息:", touchTypes[type]);
    emits("change", touchTypes[type]);
  }
}

实战演练

写好滑动组件后,可以在 H5 、小程序和 App 里面使用了,下面是页面模板和脚本使用方法。

模板使用

<q-swiper @change="changeSwiper">
  <template v-slot:content>
    <view class="swiper-box"> 滑动方向:{{ swiperDir.name }} </view>
    <view
      :class="{'swiper-section': true, [swiperDir.val != 'click' ? swiperDir.val : '']: true}"></view>
  </template>
</q-swiper>

样式编写

.swiper-box {
  padding: 30rpx;
  font-size: 24rpx;
}
.swiper-section {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: #f99;
  opacity: 0.8;
  transition: all 0.5s;
  &.up {
    transform: translateX(0) translateY(-100%);
  }
  &.down {
    transform: translateX(0) translateY(0);
  }
  &.left {
    transform: translateX(0) translateY(0);
  }
  &.right {
    transform: translateX(100%) translateY(0);
  }
}

脚本使用

鼠标或手指上下左右滑动页面,调用下面方法进行滑动。

  • 定义数据
// 导入依赖
import { reactive } from "vue";
// 滑动方向
let swiperDir = reactive({
  name: "左滑",
  val: "left",
});
  • 方法调用
// 监听事件
function changeSwiper(dir) {
  swiperDir.name = dir.name;
  swiperDir.val = dir.val;
}

案例展示

  • h5 端效果

  • 小程序端效果

  • APP 端效果

最后

以上就是自定义滑动触摸组件的主要内容,更多关于uniapp项目实践自定义滑动触摸组件的资料请关注脚本之家其它相关文章!

相关文章

  • JavaScript 数组的深度复制解析

    JavaScript 数组的深度复制解析

    一般情况下,使用 “=” 可以实现赋值。但对于数组、对象、函数等这些引用类型的数据,这个符号就不好使了。这篇文章主要介绍了JavaScript 数组的深度复制解析的相关资料,需要的朋友可以参考下
    2016-11-11
  • 奇偶行高亮显示及鼠标划过高亮显示类

    奇偶行高亮显示及鼠标划过高亮显示类

    奇或偶数行高亮显示及鼠标莫过高亮显示,一个经常用到的效果,也能谷歌到大把的这种效果JS,但好像还没有一个封装成类直接用的.想象自己当初谷歌这个类时,还真没少折腾时间.
    2010-07-07
  • JS中addEventListener的使用示例详解

    JS中addEventListener的使用示例详解

    addEventListener是JavaScript中的一个方法,用于向一个元素添加事件监听器,本文给大家介绍JS中addEventListener的使用示例代码,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • 详解JavaScript闭包的优缺点和作用

    详解JavaScript闭包的优缺点和作用

    闭包是指在 JavaScript 中,内部函数可以访问其外部函数作用域中的变量,即使外部函数已经执行完毕,这种特性被称为闭包,本文将给大家介绍一下JavaScript闭包的优缺点和作用,需要的朋友可以参考下
    2023-09-09
  • 概述一个页面从输入URL到页面加载完的过程

    概述一个页面从输入URL到页面加载完的过程

    本文主要对一个页面从输入 URL 到页面加载完的过程中都发生了什么事情进行概述,对我们学习网络语言有一定的帮助,下面就跟小编一起来看下吧
    2016-12-12
  • 轻松解决JavaScript定时器越走越快的问题

    轻松解决JavaScript定时器越走越快的问题

    这篇文章主要介绍了轻松解决JavaScript定时器越走越快的问题 ,本文通过实例带给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • 微信小程序跨页面数据传递事件响应实现过程解析

    微信小程序跨页面数据传递事件响应实现过程解析

    这篇文章主要介绍了微信小程序跨页面数据传递事件响应实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • TypeScript实现单链表的示例代码

    TypeScript实现单链表的示例代码

    链表是一种物理存储单元上非连续、非顺序的存储结构,本文主要介绍了TypeScript实现单链表的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • JS中把函数作为另一函数的参数传递方法(总结)

    JS中把函数作为另一函数的参数传递方法(总结)

    下面小编就为大家带来一篇JS中把函数作为另一函数的参数传递方法(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • JS判断、校验MAC地址的2个实例

    JS判断、校验MAC地址的2个实例

    这篇文章主要介绍了JS判断、校验MAC地址的2个实例,需要的朋友可以参考下
    2014-05-05

最新评论