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

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

–包含超出边界监测,性能不够理想【原因: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> -->

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

(0)

相关推荐

  • 微信小程序内拖动图片实现移动、放大、旋转的方法

    屏幕就像是数学上的坐标轴,且在第四象限,以屏幕左上角为圆点,X轴向右为正向左为负,Y轴向下为正向上为负(这点和数学上相反的)以圆点为基点画个距离圆点上下50宽高100的矩形来演示canvas基本用法 微信小程序这里提供了两个API wx.createContext() 创建并返回绘图上下文context对象 getActions 获取当前context上存储的绘图动作,对应wx.drawCanvas(object)中的actions clearActions 清空当前的存储绘图动作 wx.dra

  • 微信小程序移动拖拽视图-movable-view实例详解

    JS中的sender参数(sender是事件的传值)前提是只有一个touch移动的时候.多个touch需要在 changedTouches 数组中查找 redclcik:function(sender){ wx.showModal({ title: '点击红色', content: '', }) console.log(sender); }, redmove:function(sender){ console.log(sender); // console.log(sender.changedT

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

    微信小程序可长按移动控件,供大家参考,具体内容如下 –包含超出边界监测,性能不够理想[原因:setData在毫秒级刷新时会极大程度影响渲染性能] Javascript Page({ /** * 页面的初始数据 */ data: { //浮动按钮坐标 flow_y: 130, flow_x: 20, pre_y:0, pre_x:0, //标记移动 moveFlag: false, //标记控件是否可放置 canNotPlace: false, imgSrc:"", }, //长按按钮移

  • 微信小程序webview实现长按点击识别二维码功能示例

    本文实例讲述了微信小程序webview实现长按点击识别二维码功能.分享给大家供大家参考,具体如下: 场景:微信小程序,使用webview控件.需求:点击图片后长按图片出现"识别二维码" 1.JS代码: <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> <script type="text/javascript"> $(fu

  • java与微信小程序实现websocket长连接

    本文实例为大家分享了java与微信小程序实现websocket长连接的具体代码,供大家参考,具体内容如下 背景: 需要在小程序实现地图固定坐标下实时查看消息 java环境 :tomcat7 jdk1.7 1.java websocket 类 package com.qs.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.

  • 微信小程序实现文字长按复制与一键复制功能全过程

    目录 一.不引入外部组件的实现方式 二.引入外部组件的实现方式 总结 一.不引入外部组件的实现方式 <!-- index.wxml --> <view> <!-- 长按复制 --> <view bindlongtap="copyText" data-key="{{item.cdkey}}">{{ item.cdkey }}</view> <text bindlongtap="copyText

  • 微信小程序实现点击拍照长按录像功能的实现代码

    代码里面注释写的都很详细,直接上代码.官方的组件属性中有触摸开始和触摸结束属性.本功能依靠这些属性实现. .wxml代码: <!-- 相机 pages/camera/camera.wxml--> <!-- 相机 --> <camera wx:if="{{!videoSrc}}" device-position="back" flash="off" binderror="error" style=&

  • 微信小程序点击图片实现长按预览、保存、识别带参数二维码、转发等功能

    1.多张图片循环渲染后预览.保存.识别带参数二维码 wxml页面 <view wx:for="{{imgalist}}" wx:for-item="image" class="previewimg"> <image src="{{image}}" data-src="{{image}}" bindtap="previewImage"></image>

  • 微信小程序获取音频时长与实时获取播放进度问题

    首先在没有播放音频之前,居然拿不到总时长 但是在播放之后也需要设置setTimeout来获取 所以在监听音频播放进度更新事件中获取.顺便获取当前播放进度 按照官方的写法 audioPlayed: function () { myAudio.play() setTieout(() => { myAudio.onTimeUpdate(() => { console.log(myAudio.duration) //总时长 console.log(myAudio.currentTime) //当前播放

  • 微信小程序里长按识别二维码的实现过程

    前言 我们都知道公众号里的二维码可以长按识别,但是小程序限制比较严格,没有办法实现二维码的长按识别,一直以来我都是这样认为的,微信的官方规则里也是这么写的,直到今天上午,我无意间发现一个小程序里的二维码居然可以长按识别,于是就好奇的去研究了一番,结果还真的可以实现小程序里长按识别二维码.不知道是官方的漏洞还是程序的bug,但是既然这个功能可以实现,那当然要愉快的用上一用啦 老规矩,先看效果图 可以看到,我们成功的在小程序里实现了长按识别二维码的功能.下面就教大家如何一步步实现吧.因为官方的规格还

  • 微信小程序长按识别二维码的几种情况分析

    目录 一.image标签 + show-menu-by-longpress=“{{true}}” 二.wx.previewImage 三. web-view 支持长按识别的码 补充:扫码中有几个可配置的参数注意下 总结 小程序中的图片已支持长按识别了,总结一下几种情况下: 一.image标签 + show-menu-by-longpress=“{{true}}” <image src="{{qrcode}}" mode="widthFix" show-menu

  • uni-app实现微信小程序长按拍视频功能

    本文实例为大家分享了uni-app实现微信小程序长按拍视频功能的具体代码,供大家参考,具体内容如下 html <!-- 上传视频 -->      <view class="Voice_input">                 <text class="Voice_title">上传视频:</text>                 <view class="" >       

随机推荐