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


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 相关文章推荐
扩展String功能方法
Sep 22 Javascript
JavaScript 验证码的实例代码(附效果图)
Mar 22 Javascript
javascript 拷贝节点cloneNode()使用介绍
Apr 03 Javascript
jquery if条件语句的写法
May 19 Javascript
Vue.js创建Calendar日历效果
Nov 03 Javascript
JS中判断null的方法分析
Nov 21 Javascript
js原生之焦点图转换加定时器实例
Dec 12 Javascript
ES6(ECMAScript 6)新特性之模板字符串用法分析
Apr 01 Javascript
js实现点击展开隐藏效果(实例代码)
Sep 28 Javascript
微信小程序实现swiper切换卡内嵌滚动条不显示的方法示例
Dec 20 Javascript
详解小程序用户登录状态检查与更新实例
May 15 Javascript
Jquery高级应用Deferred对象原理及使用实例
May 28 jQuery
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处理文件的小例子(解压缩,删除目录)
2013/02/03 PHP
PHP页面实现定时跳转的方法
2014/10/31 PHP
CI框架支持$_GET的两种实现方法
2016/05/18 PHP
php 基础函数
2017/02/10 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
2017/08/17 PHP
asp 的 分词实现代码
2007/05/24 Javascript
javascript日期计算实例分析
2015/06/29 Javascript
浅谈js中的延迟执行和定时执行
2016/05/31 Javascript
详解vue组件通信的三种方式
2017/06/30 Javascript
nodejs开发微信小程序实现密码加密
2017/07/11 NodeJs
JS+canvas实现的五子棋游戏【人机大战版】
2017/07/19 Javascript
微信小程序url与token设置详解
2017/09/26 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
2017/11/21 Javascript
详解vue axios用post提交的数据格式
2018/08/07 Javascript
Vue表单控件数据绑定方法详解
2020/02/05 Javascript
[01:10:57]Liquid vs OG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python可变参数用法实例分析
2017/04/02 Python
Python数据分析库pandas基本操作方法
2018/04/08 Python
Python hashlib模块实例使用详解
2019/12/24 Python
python如何求数组连续最大和的示例代码
2020/02/04 Python
Python中文分词库jieba,pkusegwg性能准确度比较
2020/02/11 Python
Python confluent kafka客户端配置kerberos认证流程详解
2020/10/12 Python
美国南部最大的家族百货公司:Belk
2017/01/30 全球购物
澳大利亚自然和有机的健康美容产品一站式商店:Ziani Beauty
2017/12/28 全球购物
英文留学推荐信范文
2014/01/25 职场文书
大学生简短的自我评价分享
2014/02/20 职场文书
新春寄语大全
2014/04/09 职场文书
教师先进工作者事迹材料
2014/05/01 职场文书
党支部遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
实习生个人总结范文
2015/02/28 职场文书
党支部审查意见
2015/06/02 职场文书
唐山大地震观后感
2015/06/05 职场文书
公司财务管理制度
2015/08/04 职场文书
Java 将PPT幻灯片转为HTML文件的实现思路
2021/06/11 Java/Android
Python学习之异常中的finally使用详解
2022/03/16 Python
python数字图像处理数据类型及颜色空间转换
2022/06/28 Python