微信小程序实现可长按移动控件


Posted in Javascript onNovember 01, 2020

微信小程序可长按移动控件,供大家参考,具体内容如下

?包含超出边界监测,性能不够理想【原因:setData在毫秒级刷新时会极大程度影响渲染性能】

Javascript

Page({
 /**
 * 页面的初始数据
 */
 data: {
 //浮动按钮坐标
 flow_y: 130,
 flow_x: 20,

 pre_y:0,
 pre_x:0,
 //标记移动
 moveFlag: false,
 //标记控件是否可放置
 canNotPlace: false,
 imgSrc:"",
 },


 //长按按钮移动控件
 longPress: function (e) {
 console.log(e)
 this.setData({
 moveFlag: true,
 pre_x:e.touches[0].clientX,
 pre_y:e.touches[0].clientY,
 })
 // console.log(e)
 console.log("begin:(", this.data.flow_x, this.data.flow_y, ")")
 // this.setData({
 // flow_x: 1334-e.touches[0].pageX, // 获取触摸时的原点
 // flow_y: 750-e.touches[0].pageY,
 // })
 //console.log(startX)

 },

 // 触摸结束事件
 touchEnd: function (e) {
 this.setData({
 moveFlag: false
 })

 // console.log("flow:(", this.data.flow_x, this.data.flow_y, ")")
 //监测按钮放置区域
 if (!((this.data.flow_x < 730) && (this.data.flow_x > 20))&&((this.data.flow_y < 1150) && (this.data.flow_y > 130))) {
 this.setData({
 flow_x: 20, // 转换rpx
 flow_y: 130,
 })
 }
 // this.setData({
 // flow_x: 20, // 转换rpx
 // })
 },

 touchMove: function (e) {
 //根据move差值动态布局
 if (this.data.moveFlag) {
 // console.log("page:(", e.touches[0].pageX, e.touches[0].pageY, ")")
 // console.log(move_x,move_y)

 var x =this.data.flow_x -(e.touches[0].clientX-this.data.pre_x)*2
 var y =this.data.flow_y -(e.touches[0].clientY-this.data.pre_y)*2
 this.setData({
 flow_x: x, // 转换rpx
 flow_y: y,
 })
 // console.log(x,y)
 // this.setData({
 // flow_x: x, // 转换rpx
 // flow_y: y,
 // })
 if (!(((x < 730) && (x > 20))&&((y < 1000) && (y > 130)))) {
 this.setData({
  canNotPlace: true,
 })
 } else {
 this.setData({
  canNotPlace: false,
 })
 }
 this.setData({
 pre_x:e.touches[0].clientX,
 pre_y:e.touches[0].clientY,
 })
 }
 },


 catchtouchmove: function () {
 //防止蒙层触摸穿透
 },



 /**
 * 生命周期函数--监听页面加载
 */
 onLoad: function (options) {

 },

 /**
 * 生命周期函数--监听页面初次渲染完成
 */
 onReady: function () {
 wx.hideLoading()
 },

 /**
 * 生命周期函数--监听页面显示
 */
 onShow: function () {

 },

 /**
 * 生命周期函数--监听页面隐藏
 */
 onHide: function () {

 },

 /**
 * 生命周期函数--监听页面卸载
 */
 onUnload: function () {

 },

 /**
 * 页面相关事件处理函数--监听用户下拉动作
 */
 onPullDownRefresh: function () {
 this.getArticle()
 },

 /**
 * 页面上拉触底事件的处理函数
 */
 onReachBottom: function () {

 },

 /**
 * 用户点击右上角分享
 */
 onShareAppMessage: function () {

 }
})

WXSS

.follow_icon{
 position: fixed;
 /* margin: 0 10rpx; */
 width:70rpx;
 height:70rpx;
 bottom: var(--flow_y--);
 right: var(--flow_x--);
 z-index: 1001;
}

/*mask*/
.drawer_screen {
 width: 100%;
 height: 100%;
 position: fixed;
 top: 0;
 left: 0;
 z-index: 5;
 background: #000;
 opacity: 0.5;
 overflow: hidden;
}

WXML

<!-- 刷新按钮 -->
<!-- <view bindtap='getArticle' style="opacity:0.8"> -->
<view catchtouchmove="catchtouchmove" ><image bindtap='getArticle' bindlongpress="longPress" bindtouchmove='touchMove' bindtouchend="touchEnd" style="--flow_y--:{{flow_y}}rpx;--flow_x--:{{flow_x}}rpx;" class="follow_icon" src="{{imgSrc}}"></image></view>

<!-- 蒙版屏蔽,防止触控穿透 -->
<view style="{{!canNotPlace?'background: #777;':'background: #b81e1e;'}}" catchtouchmove="catchtouchmove" class="drawer_screen" data-statu="open" wx:if="{{moveFlag}}"></view> 
<!-- </view> -->

微信小程序实现可长按移动控件

微信小程序实现可长按移动控件

微信小程序实现可长按移动控件

为大家推荐现在关注度比较高的微信小程序教程一篇:《微信小程序开发教程》小编为大家精心整理的,希望喜欢。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
通过隐藏option实现select的联动效果
Nov 10 Javascript
javascript Array.sort() 跨浏览器下需要考虑的问题
Dec 07 Javascript
javascript prototype原型操作笔记
Dec 07 Javascript
javascript中万恶的function实例分析
May 25 Javascript
setTimeout的延时为0时多个浏览器的区别
May 23 Javascript
JavaScript中的继承之类继承
May 01 Javascript
Vue 进阶教程之v-model详解
May 06 Javascript
JS获取鼠标坐标并且根据鼠标位置不同弹出不同内容
Jun 12 Javascript
用Cordova打包Vue项目的方法步骤
Feb 02 Javascript
深入解读Node.js中的koa源码
Jun 17 Javascript
JS实现前端动态分页码代码实例
Jun 02 Javascript
JSON stringify方法原理及实例解析
Oct 23 Javascript
Vue时间轴 vue-light-timeline的用法说明
Oct 29 #Javascript
antd日期选择器禁止选择当天之前的时间操作
Oct 29 #Javascript
vue制作toast组件npm包示例代码
Oct 29 #Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
Oct 29 #Javascript
解决antd日期选择组件,添加value就无法点击下一年和下一月问题
Oct 29 #Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
Oct 29 #Javascript
解决ant Design中Select设置initialValue时的大坑
Oct 29 #Javascript
You might like
CodeIgniter输出中文乱码的两种解决办法
2014/06/12 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
JS查看对象功能代码
2008/04/25 Javascript
JavaScript Event事件学习第一章 Event介绍
2010/02/07 Javascript
检查输入的是否是数字使用keyCode配合onkeypress事件
2014/01/23 Javascript
网站内容禁止复制和粘贴、另存为的js代码
2014/02/26 Javascript
JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)
2014/10/17 Javascript
JavaScript类型系统之Object详解
2016/01/07 Javascript
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
JavaScript实现简单评论功能
2017/08/17 Javascript
微信小程序实现YDUI的ScrollTab组件
2018/02/02 Javascript
layui 表格的属性的显示转换方法
2018/08/14 Javascript
vue 实现左右拖拽元素并且不超过他的父元素的宽度
2018/11/30 Javascript
vue实现路由懒加载及组件懒加载的方式
2019/06/11 Javascript
JS实现导航栏楼层特效
2020/01/01 Javascript
JS变量提升原理与用法实例浅析
2020/05/22 Javascript
详解vue修改elementUI的分页组件视图没更新问题
2020/11/13 Javascript
Python两个内置函数 locals 和globals(学习笔记)
2016/08/28 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
2017/03/24 Python
numpy.std() 计算矩阵标准差的方法
2018/07/11 Python
python实现本地图片转存并重命名的示例代码
2018/10/27 Python
Django使用模板后无法找到静态资源文件问题解决
2019/07/19 Python
Python线上环境使用日志的及配置文件
2019/07/28 Python
基于python的itchat库实现微信聊天机器人(推荐)
2019/10/29 Python
Python 脚本拉取 Docker 镜像问题
2019/11/10 Python
Python函数__new__及__init__作用及区别解析
2020/08/31 Python
国际礼品店:GiftsnIdeas
2018/05/03 全球购物
2013的个人自我评价
2013/12/26 职场文书
经贸日语专业自荐信
2014/09/02 职场文书
村长反四风问题个人对照检查材料
2014/09/21 职场文书
如何写贫困证明申请书
2014/10/29 职场文书
《山中访友》教学反思
2016/02/24 职场文书
暑假开始了,你的暑假学习计划写好了吗?
2019/07/04 职场文书
HTML+CSS实现导航条下拉菜单的示例代码
2021/08/02 HTML / CSS
为什么MySQL 删除表数据 磁盘空间还一直被占用
2021/10/16 MySQL
什么是Python装饰器?如何定义和使用?
2022/04/11 Python