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


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 相关文章推荐
jquery $(document).ready() 与window.onload的区别
Dec 28 Javascript
非阻塞动态加载javascript广告实现代码
Nov 17 Javascript
Jquery中显示隐藏的实现代码分析
Jul 26 Javascript
使用js显示当前时间示例
Mar 02 Javascript
js控制输入框获得和失去焦点时状态显示的方法
Jan 30 Javascript
JQuery中Bind()事件用法分析
May 05 Javascript
jQuery实现文本框输入同步的方法
Jun 20 Javascript
理解javascript中Map代替循环
Feb 26 Javascript
正则表达式,替换所有HTML标签的简单实例
Nov 28 Javascript
springMVC + easyui + $.ajaxFileUpload实现文件上传注意事项
Apr 23 Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
Jan 23 Javascript
详解es6新增数组方法简便了哪些操作
May 09 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
php cookie 作用范围?不要在当前页面使用你的cookie
2009/03/24 PHP
PHP用SAX解析XML的实现代码与问题分析
2011/08/22 PHP
php操作JSON格式数据的实现代码
2011/12/24 PHP
YII Framework框架教程之安全方案详解
2016/03/14 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
2017/05/29 PHP
javascript 操作cookies及正确使用cookies的属性
2009/10/15 Javascript
js中indexof的用法详细解析
2013/12/24 Javascript
Javascript Object 对象学习笔记
2014/12/17 Javascript
js实现跨域的多种方法
2015/12/25 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
vue.js2.0点击获取自己的属性和jquery方法
2018/02/23 jQuery
详解各版本React路由的跳转的方法
2018/05/10 Javascript
详解一个基于套接字实现长连接的express
2019/03/28 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
Vue基本指令实例图文讲解
2021/02/25 Vue.js
Python字符串切片操作知识详解
2016/03/28 Python
Jupyter notebook远程访问服务器的方法
2018/05/24 Python
详解python中TCP协议中的粘包问题
2019/03/22 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
2020/03/31 Python
PyQt5如何将.ui文件转换为.py文件的实例代码
2020/05/26 Python
记录模型训练时loss值的变化情况
2020/06/16 Python
PHP两种查询函数array/row的区别
2013/06/03 面试题
进程的查看和调度分别使用什么命令
2015/03/25 面试题
Linux操作面试题
2012/05/16 面试题
目标责任书范文
2014/04/14 职场文书
小学生期末评语
2014/04/21 职场文书
劳资协议书范本
2014/04/23 职场文书
英文演讲稿开场白
2014/08/25 职场文书
2014年销售人员工作总结
2014/11/27 职场文书
现实表现材料范文
2014/12/23 职场文书
煤矿安全保证书
2015/02/27 职场文书
2015年教师教学工作总结
2015/04/28 职场文书
送给客户微信问候语!
2019/07/04 职场文书
通过Python把学姐照片做成拼图游戏
2022/02/15 Python
让JavaScript代码更加精简的方法技巧
2022/06/01 Javascript