当前位置:网站首页>小程序全面屏手势配置案例
小程序全面屏手势配置案例
2022-08-01 07:10:00 【大橘为重¨】
前言
- 文章提到的全面屏手势包括有 “左右滑动、放大缩小、双击、长按” ;
- 有关以上四类事件的配置可见博客 小程序更多的手势事件配置 。
一、案例
1、目录结构

2、示例代码
- touch.wxml文件下:
<view class="bg" bindtouchstart="myTouchStart" bindtouchmove="myTouchMove" bindtouchend="myTouchEnd" bindlongtap="myLongTap" bindtap="myTap">
</view>
- touch.wxss文件下:
.bg {
min-width: 100vw;
min-height: 100vh;
overflow: hidden;
}
- touch.js文件下:
//=======================手势事件模块=======================
let lastTapTime = 0, //记录上一次点击时间
zoomFlag = false, //定义 缩放事件 节流阀
distance = 0, //记录手指移动距离
scale = 1, //定义初始化的页面缩放大小
newScale = 0, //记录新的页面缩放大小
slipFlag = false, //定义 滑动事件 节流阀
startPoint = 0, //记录滑动的初始位置
slip_zoom_flag = true //定义滑动-缩放节流阀
let gestureFlag = false //定义手势功能节流阀,可用该变量使得全面屏手势触发时屏蔽页面组件的一般事件
//=====================手势事件模块end======================
Page({
/** * 页面的初始数据 */
data: {
},
myTouchStart(e) {
// 关闭手势功能节流阀
gestureFlag = false
//打开滑动-缩放节流阀
slip_zoom_flag = true
// ---------------------记录滑动事件信息---------------------
//开启滑动事件
slipFlag = true
//记录触摸点的坐标信息
startPoint = e.touches[0]
//---------------------记录滑动事件信息end---------------------
//---------------------记录缩放事件信息---------------------
// 单手指缩放开始,不做任何处理
if (e.touches.length == 1) return;
// 当两根手指放上去的时候,将距离(distance)初始化。
let xMove = e.touches[1].clientX - e.touches[0].clientX;
let yMove = e.touches[1].clientY - e.touches[0].clientY;
//计算开始触发两个手指坐标的距离
distance = Math.sqrt(xMove * xMove + yMove * yMove);
//---------------------记录缩放事件信息end---------------------
},
myTouchMove(e) {
// ----------------监听手势缩小放大事件----------------
// 单手指缩放不做任何操作
if (e.touches.length != 1) {
//关闭滑动-缩放节流阀,放置触发滑动事件
slip_zoom_flag = false
//双手指运动 x移动后的坐标和y移动后的坐标
let xMove = e.touches[1].clientX - e.touches[0].clientX;
let yMove = e.touches[1].clientY - e.touches[0].clientY;
//双手指运动新的 ditance
let newDistance = Math.sqrt(xMove * xMove + yMove * yMove);
//计算移动的过程中实际移动了多少的距离
let distanceDiff = newDistance - distance;
newScale = scale + 0.005 * distanceDiff
// 打开缩放监听
zoomFlag = true
//打开手势功能节流阀
gestureFlag = true
return
}
// ----------------监听手势缩小放大事件end----------------
// ----------------监听手势右滑事件----------------
if (((startPoint.clientX - e.touches[e.touches.length - 1].clientX) > 80) && slipFlag && slip_zoom_flag) {
console.log("左滑事件");
slipFlag = false
//打开手势功能节流发
gestureFlag = true
return
} else if (((startPoint.clientX - e.touches[e.touches.length - 1].clientX) < -80) && slipFlag && slip_zoom_flag) {
console.log("右滑事件");
slipFlag = false
//打开手势功能节流发
gestureFlag = true
return
}
// ----------------监听手势右滑事件end----------------
},
myTouchEnd() {
if (zoomFlag) {
if (newScale > 1.3) {
console.log("放大了");
} else if (newScale < 0.7) {
console.log("缩小了");
}
// 关闭缩放监听
zoomFlag = false
}
},
myLongTap() {
console.log("长按事件");
// 开启手势控制节流阀
gestureFlag = true
},
myTap(e) {
// 监听双击事件
let curTime = e.timeStamp
if (lastTapTime > 0) {
if (curTime - lastTapTime < 300) {
console.log("双击屏幕事件");
}
}
lastTapTime = curTime
},
/** * 生命周期函数--监听页面加载 */
onLoad: function (options) {
},
/** * 生命周期函数--监听页面初次渲染完成 */
onReady: function () {
},
/** * 生命周期函数--监听页面显示 */
onShow: function () {
},
/** * 生命周期函数--监听页面隐藏 */
onHide: function () {
},
/** * 生命周期函数--监听页面卸载 */
onUnload: function () {
},
/** * 页面相关事件处理函数--监听用户下拉动作 */
onPullDownRefresh: function () {
},
/** * 页面上拉触底事件的处理函数 */
onReachBottom: function () {
},
/** * 用户点击右上角分享 */
onShareAppMessage: function () {
}
})
提示:文章到此结束,文章仅为个人学习记录,若有不足还请大家指出。
边栏推荐
- 【南瓜书ML】(task4)神经网络中的数学推导(更新ing)
- 升级为重量级锁,锁重入会导致锁释放?
- R语言使用gt包和gtExtras包优雅地、漂亮地显示表格数据:gtExtras包的pad_fn函数与gt::fmt函数一起用于填充包含数值的特定列、对数据列的数值进行十进制对齐(从小数点对齐)
- 小程序通过云函数操作数据库【使用get取数据库】
- Image lossless compression software which works: try completely free JPG - C image batch finishing compression reduces weight tools | latest JPG batch dressing tools download
- 数据机构----线性表之单向链表
- Golang:go开启web服务
- VSCode 快捷键及通用插件推荐
- Fist game copyright-free music download, League of Legends copyright-free music, can be used for video creation, live broadcast
- MySQL row locks and gap locks
猜你喜欢

"By sharing" northwestern university life service | | bytes a second interview on three sides by HR

Vim三种模式

支付宝如何生成及配置公钥证书

响应式织梦模板园林景观类网站

第02章 MySQL的数据目录【1.MySQL架构篇】【MySQL高级】

金山打字通 官网 下载

Self-made a remote control software - VeryControl

日志导致线程Block的这些坑,你不得不防

Electromagnetic compatibility introductory tutorial (6) test project

Matlab simulink particle swarm optimization fuzzy pid control motor pump
随机推荐
Golang:go模版引擎的使用
curl (7) Failed connect to localhost8080; Connection refused
Offer刷题——1
基于百度OCR的网站验证码在线识别
「面经分享」西北大学 | 字节 生活服务 | 一面二面三面 HR 面
LeetCode240+312+394
JVM:运行时数据区-PC寄存器(程序计数器)
湖仓一体电商项目(一):项目背景和架构介绍
爆肝3万字,最硬核丨Mysql 知识体系、命令全集 【建议收藏 】
爬虫框架 Scrapy 详解
仿牛客网讨论社区项目—项目总结及项目常见面试题
拳头游戏免版权音乐下载,英雄联盟无版权音乐,可用于视频创作、直播
企业员工人事管理系统(数据库课设)
Golang:go开启web服务
weight distribution
Offer brush questions - 1
我的创作纪念日
GO错误处理方式
Upgrade to heavyweight lock, lock reentrancy will lead to lock release?
More than 2022 cattle guest school game 4 yue