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


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 相关文章推荐
javaScript 简单验证代码(用户名,密码,邮箱)
Sep 28 Javascript
jQuery代码优化 选择符篇
Nov 01 Javascript
Bootstrap每天必学之js插件
Nov 30 Javascript
15个常用的jquery代码片段
Dec 19 Javascript
JavaScript中文件上传API详解
Apr 01 Javascript
jQuery复制节点用法示例(clone方法)
Sep 08 Javascript
MUI实现上拉加载和下拉刷新效果
Jun 30 Javascript
关于 angularJS的一些用法
Nov 29 Javascript
angularjs 获取默认选中的单选按钮的value方法
Feb 28 Javascript
jQuery实现表单动态添加与删除数据操作示例
Jul 03 jQuery
JavaScript实现拖拽功能
Feb 11 Javascript
JS前端宏任务微任务及Event Loop使用详解
Jul 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
thinkPHP分页功能实例详解
2017/05/05 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
php workerman定时任务的实现代码
2018/12/23 PHP
PHP实现微信退款的方法示例
2019/03/26 PHP
用jQuery实现检测浏览器及版本的脚本代码
2008/01/22 Javascript
JavaScript操作Oracle数据库示例
2015/03/06 Javascript
jquery结合html实现中英文页面切换
2016/11/29 Javascript
基于vue2框架的机器人自动回复mini-project实例代码
2017/06/13 Javascript
详解angularjs获取元素以及angular.element()用法
2017/07/25 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
2017/08/14 Javascript
vue-router传递参数的几种方式实例详解
2018/11/13 Javascript
[jQuery] 事件和动画详解
2019/03/05 jQuery
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
Python判断变量是否已经定义的方法
2014/08/18 Python
python daemon守护进程实现
2016/08/27 Python
Python 正则表达式入门(初级篇)
2016/12/07 Python
python3获取当前文件的上一级目录实例
2018/04/26 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
django2.2安装错误最全的解决方案(小结)
2019/09/24 Python
pip 安装库比较慢的解决方法(国内镜像)
2019/10/06 Python
python使用python-pptx删除ppt某页实例
2020/02/14 Python
详解Python修复遥感影像条带的两种方式
2020/02/23 Python
python设置中文界面实例方法
2020/10/27 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
2021/02/03 Python
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
英国行业制服供应商:Alexandra
2019/09/14 全球购物
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
客服服务心得体会
2013/12/30 职场文书
本科毕业生专业自荐书范文
2014/02/05 职场文书
英语专业职业生涯规划范文
2014/03/05 职场文书
2014年巴西世界杯口号
2014/06/05 职场文书
先进事迹材料怎么写
2014/12/30 职场文书
2019最新版试用期劳动合同模板!
2019/07/04 职场文书
Python列表删除重复元素与图像相似度判断及删除实例代码
2021/05/07 Python
MySQL如何使用使用Xtrabackup进行备份和恢复
2021/06/21 MySQL
React列表栏及购物车组件使用详解
2021/06/28 Javascript