移动端h5实现拖拽的两种方法(移动端h5实现拖拽的两种方法是)

移动端的项目经常会引入手势库来实现拖拽

不过如果只是一两个页面用到拖拽,再引入一个手势库就很不划算

最近的项目中就有这么一个需求:

移动端h5实现拖拽的两种方法(移动端h5实现拖拽的两种方法是)

需求

因为就这一个地方需要拖拽,所以我就没有引入第三方库

移动端的拖拽有两种主流的实现方案:

1. 将元素设置为固定定位,然后在拖拽的时候修改其定位,实现拖拽的效果;

2. 使用 transform 中的平移 translate 属性实现拖拽。

方案一:固定定位 fixed

这种方案的核心就是给元素添加固定定位 position:fixed;

但定位之后,元素会脱离文档流,会影响原有但布局

因此在开始拖拽 (触发 touchstart 事件) 的时候,需要将原本的元素 A 拷贝一份 ( cloneNode() )

给新元素 A2 添加定位,同时给原本的元素 A 设置 visibility: hidden; 使之隐藏并占位

1.1 创建遮罩

首先封装一个创建遮罩的方法,用于放置拷贝出来的元素,并防止误触

移动端h5实现拖拽的两种方法(移动端h5实现拖拽的两种方法是)

创建遮罩

1.2 开始拖拽

在触发 touchstart 事件的时候,首先创建遮罩

并通过 getBoundingClientRect() 方法获取到元素 A 的坐标,记录起点信息

为了记录起点信息,需要 data 中创建一个对象 source,用于记录点击的位置 client,和初始定位坐标 start

移动端h5实现拖拽的两种方法(移动端h5实现拖拽的两种方法是)

开始拖拽

1.3 处理拖拽

拖拽的时候,监听 touchmove 事件

用【当前鼠标点位置】减去【初始点击位置】得到移动的距离

再结合初始坐标信息,更新拖拽元素的坐标

移动端h5实现拖拽的两种方法(移动端h5实现拖拽的两种方法是)

处理拖拽

1.4 拖拽结束

拖拽结束的时候,记录终点位置,删除遮罩

移动端h5实现拖拽的两种方法(移动端h5实现拖拽的两种方法是)

拖拽结束

不过上面的代码只实现了拖拽的功能,并没有对目标元素 A 进行显示/隐藏的操作

可以根据业务场景自行添加,或者参考方案二

方案二:平移动画 translate

这种方案更为简单,不需要创建额外的 DOM 元素

只需对原本的元素添加 transform 属性,甚至不需要 transition 属性

然后在拖拽过程中,实时更新 transform: translate(X, Y) 中 x, y 的坐标信息,实现拖拽

2.1 开始拖拽

开始拖拽的时候,只需要记录起点坐标

移动端h5实现拖拽的两种方法(移动端h5实现拖拽的两种方法是)

开始拖拽

为了防止拖拽的过程中误触,建议使用方案一的 createModal() 方法创建一个遮罩

2.2 处理拖拽

根据当前坐标和起点坐标,计算出距离,然后更新 translate 的坐标

移动端h5实现拖拽的两种方法(移动端h5实现拖拽的两种方法是)

处理拖拽

2.3 拖拽结束

拖拽完成后,清除平移动画

移动端h5实现拖拽的两种方法(移动端h5实现拖拽的两种方法是)

拖拽结束

小结:

方案一在获取目标元素的坐标信息的时候使用了 getBoundingClientRect() 方法

但这个方法性能不高,应当少用

而且即时使用了该方法,最后得到的 left 和 top 也不够精确,touchstart 的时候,元素有明显的闪动

我的项目使用了 vue.js,但拖拽功能用到 vue 的地方不多,将几个用于记录的对象提出来,就能复用于其他框架

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2024年5月13日 下午5:28
下一篇 2024年5月13日 下午5:40

相关推荐

  • 虚拟币交易所系统开发,场外币币交易平台搭建

    场外币币交易就是在线下线下商量交易。平台只是起到担保的作用,解决违约的问题。区块链技术是作为场外交易能够顺利进行不可缺少的一部分,通过虚拟币交易所绕过第三方,提高效率。 在场外交易…

    科研百科 2024年5月2日
    50
  • 教育集团项目化管理系统

    教育集团项目化管理系统 近年来,随着教育行业的发展,教育集团已经成为了教育行业的重要参与者。教育集团通过整合各种教育资源,为学生提供更好的教育服务,已经成为了教育行业的主流趋势。但…

    科研百科 2024年12月25日
    0
  • 科研项目 设备费占比

    科研项目的设备费占比 在科研项目中,设备费占比是非常重要的一项指标。设备费是指用于购买科研项目所需的设备的费用,包括实验室设备、仪器、计算机设备等。这些设备是进行科学研究的必要条件…

    科研百科 2024年12月2日
    1
  • 「ColorOS诊所」管理手机系统自动更新项目,更我所需(coloros自动更新关闭)

    「ColorOS诊所」管理手机系统自动更新项目,更我所需 我们手机存在一些自动更新功能,主要就是系统版本更新和应用功能更新,对于这些自动更新内容我们都可以自定义设置,按需选择是否自…

    科研百科 2024年2月15日
    114
  • 了解一下最初的Photoshop故事以及创始人

    Photoshop最初的创始人,托马斯·诺尔(Thomas Knoll)在1987年写了一系列计算机代码,用于在当时的黑白位图显示器上显示和修改灰度图像,。当然当时他并不知道这个初…

    科研百科 2024年5月1日
    60
  • 科技项目资金来源证明怎么写

    科技项目资金来源证明怎么写 科技项目资金来源证明是科技项目申请过程中非常重要的文件之一,它需要清晰地展示项目的资金来源,以便项目支持者了解项目的资金构成,并决定是否支持项目。 科技…

    科研百科 2024年10月29日
    0
  • tb项目管理软件

    tb项目管理软件:轻松管理项目进度和成本 TB项目管理软件是一种功能强大的软件,可以帮助项目经理和团队成员轻松管理项目进度和成本。无论是小型项目还是大型项目,TB项目管理软件都可以…

    科研百科 2024年8月16日
    18
  • 代码生成器使用指南—JeecgBoot 低代码平台(代码生成器推荐)

    JeecgBoot 提供强大的代码生成器,让前后端代码一键生成,实现低代码开发。支持单表、树列表、一对多、一对一等数据模型,增删改查功能一键生成,菜单配置直接使用。 1、通过 on…

    科研百科 2024年7月5日
    35
  • 项目管理师认证

    项目管理师认证:提升职业竞争力 随着全球化进程的加速和项目管理在各行各业的广泛应用,项目管理师认证已经成为国际认可的职业证书,对于提升个人职业竞争力和获得更好的职业发展机会具有重要…

    科研百科 2024年7月25日
    55
  • 汽车美容管理软件能够与会员拉近关系?(汽车美容管理软件能够与会员拉近关系吗)

    恒易达科技11年行业软件专业经验,专业定制开发汽车维修管理软件(181微7233电6615)、汽车美容管理软件等,选择恒易达汽车维修管理软件是您明智的选择! 简化办卡流程,降低会员…

    科研百科 2022年11月28日
    111