1. 程式人生 > 程式設計 >微信小程式實現可長按移動控制元件

微信小程式實現可長按移動控制元件

微信小程式可長按移動控制元件,供大家參考,具體內容如下

–包含超出邊界監測,效能不夠理想【原因: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:(",")")
  //監測按鈕放置區域
  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,})
  }
 },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> -->

微信小程式實現可長按移動控制元件

微信小程式實現可長按移動控制元件

微信小程式實現可長按移動控制元件

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。