微信小程序 实现最简单的组件拖拽

这篇具有很好参考价值的文章主要介绍了微信小程序 实现最简单的组件拖拽。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

最近在自主学习微信小程序的开发;对于零基础入门(没有学习过前端)的我,查阅了许多微信小程序拖拽的实现,大部分要么实现起来太复杂了,要么封装组件太复杂了,附带了拖拽之后排序等功能;因此写下这篇个人觉得最好理解的 微信小程序元素拖拽的实现;

原理

这边采用了 微信小程序中的 bindtouchstartbindtouchmovebindtouchend 三兄弟 实现 开始触摸、触摸后移动、触摸结束;并加上一些坐标的转换,实现简单的 拖动功能;

第一步 touchStart

拖拽的开始 (一切尽在图中)
微信小程序 实现最简单的组件拖拽

控件的位置为 left:posX; top:posY;

通过bindtouchstart 得到首次的触摸点坐标:touch.pageY;touch.pageX;

此时 可以得到 触摸点和 控制的位置坐标差为

chaX = touch.pageX - posX;

chaY = touch.pageY - posY;

将这两个值 暂存;用于拖动的后 位置的转换;

第二步 toucMove

通过bindtouchmove 可以得到 触摸移动的实时坐标:touch.pageY;touch.pageX;

然后通过刚刚得到chaX 和 chaY 可以转换得到 实时移动的控件位置:

new_posX = touch.pageX - chaX;
new_posY = touch.pageY - chaY;

将这两个值都更新至 控件的位置信息上;此时 可以实时渲染出 控件的移动;

第三步 touchEnd

通过bindtouchend 用于处理 拖拽动作的结束,清空临时数据等;

代码

WXML 代码

  • position: absolute; 绝对位置 用于left 和 top的使用
  • left:{{posX}}px; 显示的位置X
  • top:{{posY}}px; 显示的位置Y
  • bindtouchstart=“touchStart” 设置绑定的函数
  • bindtouchmove=“touchMove” 设置绑定的函数
  • bindtouchend=“touchEnd” 设置绑定的函数
  • 其余元素只是为了控件展示
<view class="stick" style="position: absolute; text-align: center; width: 200rpx; height:50rpx;background: rgb(100, 180, 100);display: block;left:{{posX}}px;top:{{posY}}px" bindtouchmove="touchMove" bindtouchstart="touchStart" bindtouchend="touchEnd" >
        <view>AAAA</view>
    </view>

js代码

Page({
    data: {
        chaX: 0,// 转换值X
        chaY: 0,// 转换值Y
        touch: false, // 触摸标记
        posX:100, // 初始位置
        posY:20, // 初始位置
    },

    // 开始触摸
    touchStart: function (e) {
        console.log("== touchStart ==");// 拖动开始
        // e.touches[0] 内容就是触摸点的坐标值
        var tranX = e.touches[0].pageX-this.data.posX;
        var tranY = e.touches[0].pageY-this.data.posY;
        console.log("start tranX: " + tranX);
        console.log("start tranY: " + tranY);
        // 存储chaX和chaY 并设置 touch: true
        this.setData({
            touch: true, 
            chaX:tranX,
            chaY:tranY
        });
    },
    // 触摸移动
    touchMove: function (e) {
        if (!this.data.touch) return;
        // e.touches[0] 内容就是触摸点的坐标值
        var new_posX = e.touches[0].pageX-this.data.chaX;
        var new_posY = e.touches[0].pageY-this.data.chaY;
        console.log(" move new_posX: " + new_posX);
        console.log(" move nwe_posY: " + new_posY);
        this.setData({
            posX: new_posX,
            posY: new_posY
        });
    },
    // 触摸结束
    touchEnd: function (e) {
        console.log("== touchEnd ==")
        if (!this.data.touch) return;
        this.setData({
            touch: flase,
            chaX:0,
            chaY:0
        });
    }
})

参考资料

微信小程序 入门学习 资料收集文章来源地址https://www.toymoban.com/news/detail-491931.html

到了这里,关于微信小程序 实现最简单的组件拖拽的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序实现图片拖拽切换位置

    所用到组件 movable-area movable-view HTML JS CSS 图片到达可交换位置的容错值及图片一行的数量可以因需求而异。 如果有逻辑错误或冗余代码敬请指正。

    2024年02月12日
    浏览(45)
  • 【微信小程序-原生开发】列表 - 拖拽排序(官方组件 movable-area 和 movable-view 的用法)

    实现逻辑详见代码的注释 需要根据各项的内容,调整或动态生成 ITEM_HEIGHT 值 因 movable-view 是绝对定位,不方便实现水平居中,所以设定 width: 100%; 占满宽度

    2024年02月11日
    浏览(74)
  • 微信小程序picker组件的简单使用 单选

    classData是接口请求的数组 如果picker显示的值是[object,object]这样的 range-key=\\\"className\\\" range-key就是重点 修改成你要显示的字段

    2024年02月12日
    浏览(29)
  • 【微信小程序5】利用canvas实现纯色背景抠图功能

            最近,在小程序开发过程中,遇到了需要设置背景透明效果功能的需求。如果借助百度开放接口实现抠图功能是非常方便的,但是一个最大的缺点就是需要money支持。不得已,参考网上各家代码,实现了借助canvas来实现纯色背景抠图功能。只是非常简单的一个应用

    2024年02月01日
    浏览(38)
  • 基于微信小程序的校园监考管理系统设计与实现课题背景、目的、意义

     目录 一、整体目录(示范): 文档含项目技术介绍、E-R图、数据字典、项目功能介绍与截图等 二、运行截图 三、代码部分(示范): 四、数据库表(示范): 数据库表有注释,可以导出数据字典及更新数据库时间,欢迎交流学习 五、主要技术介绍: 六、项目调试学习(点

    2024年01月22日
    浏览(43)
  • 微信小程序组件 实现加载中效果

    大家好哇,我是梦辛工作室的灵,我又来了=-=,最近项目开发中,需实现一个加载效果,上图给大家看下: 感觉一般把,还是挺好写的,我就封装成了一个组件,方便大家以后使用,使用方法如下: 还是简单吧,原理其实也很简单,就是 n个正方形(中间一根线) 旋转 后就

    2024年02月12日
    浏览(37)
  • 微信小程序:简单实现查看天气小程序

    首先注册和风天气账号,创建一个免费版的项目,准备好api接口,查看自己的key 如果想获取某个城市天气信息就必须知道这个城市的location和key去请求 那么官方也提供了获取地址location的api,调用即可,其中location和key必填,location支持文字、以英文逗号分隔的经度,纬度坐标

    2024年02月13日
    浏览(51)
  • 微信小程序一键登录(简单实现)

    下载微信开发者工具: 微信开发者工具下载地址与更新日志 | 微信开放文档 (qq.com)  微信公众平台: 微信公众平台 (qq.com) 注册完成后,我们要获取一下APPid和小程序密钥 【注意】:appid和密钥一定要保存好      我们还需要一个接口的后台:  开源后台 我们使用的是微信小

    2024年02月11日
    浏览(37)
  • 微信小程序抽奖 简单功能实现

    抽奖是一种常见的互动活动,在微信小程序中也有很多不同的实现方式。以下是一份简单的微信小程序抽奖源码,供参考:在 wxml 文件中添加抽奖的页面布局: 在js 文件中添加抽奖逻辑: 实现了一个简单的地奖功能,用户点击“开始抽奖“按知后,抽奖结里会从奖品列表中贿机

    2024年02月16日
    浏览(35)
  • 微信小程序:简单实现地图导航功能实现

    里面的小图片需要自己找,真机调试时,点击导航即可进入地图,可导航,规划路线… 效果图 代码: wxml js wxss

    2024年02月11日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包