微信小程序开发摇一摇功能


Posted in Javascript onNovember 22, 2019

微信小程序摇一摇

方法定义: 

let shakeInfo = {
 openFlag: false,// 是否开启摇一摇,*****注意:如果是小程序全局监听摇一摇,这里默认为true
 shakeSpeed: 110,//设置阈值,越小越灵敏
 shakeStep: 2000,//摇一摇成功后间隔
 lastTime: 0,//此变量用来记录上次摇动的时间
 x: 0,
 y: 0,
 z: 0,
 lastX: 0,
 lastY: 0,
 lastZ: 0, //此组变量分别记录对应 x、y、z 三轴的数值和上次的数值
};
function openShakeEvent() {
 shakeInfo.openFlag = true;
}
function closeShakeEvent() {
 shakeInfo.openFlag = false;
}
function shakeOk() {
 closeShakeEvent();
 setTimeout(function () {
  openShakeEvent();
 }, shakeInfo.shakeStep);
}
/**
 * 判断是否为摇一摇
 */
function shake(acceleration, successCallback) {
 if (!shakeInfo.openFlag) {
  return;
 }
 var nowTime = new Date().getTime(); //记录当前时间
 //如果这次摇的时间距离上次摇的时间有一定间隔 才执行
 if (nowTime - shakeInfo.lastTime > 100) {
  var diffTime = nowTime - shakeInfo.lastTime; //记录时间段
  shakeInfo.lastTime = nowTime; //记录本次摇动时间,为下次计算摇动时间做准备
  shakeInfo.x = acceleration.x; //获取 x 轴数值,x 轴为垂直于北轴,向东为正
  shakeInfo.y = acceleration.y; //获取 y 轴数值,y 轴向正北为正
  shakeInfo.z = acceleration.z; //获取 z 轴数值,z 轴垂直于地面,向上为正
  //计算 公式的意思是 单位时间内运动的路程,即为我们想要的速度
  var speed = Math.abs(shakeInfo.x + shakeInfo.y + shakeInfo.z - shakeInfo.lastX - shakeInfo.lastY - shakeInfo.lastZ) / diffTime * 10000;
  //console.log(speed)
  if (speed > shakeInfo.shakeSpeed) { //如果计算出来的速度超过了阈值,那么就算作用户成功摇一摇
   successCallback();
  }
  shakeInfo.lastX = shakeInfo.x; //赋值,为下一次计算做准备
  shakeInfo.lastY = shakeInfo.y; //赋值,为下一次计算做准备
  shakeInfo.lastZ = shakeInfo.z; //赋值,为下一次计算做准备
 }
}

方法调用,在小程序启动首页页面onLoad添加如下代码:

/**
  * 生命周期函数--监听页面加载
  */
 onLoad: function(options) {
  //
  wx.onAccelerometerChange(function(acceleration) {
   Main.shake(acceleration, function() {
    Main.shakeOk();
    Main.openBarCodeDlg(); // 在这里调用摇一摇成功后执行的代码
   });
  });
 }

如果是小程序全局都监听摇一摇,以上代码就可以实现,如果只是配置指定某几个页面监听,则需要在监听的页面做以下code:

onShow: function() {
 Main.openShakeEvent();
},
onHide: function() {
 Main.closeShakeEvent();
}

这样在跳转到非监听页面时就不会执行你的代码了

补充:下面看下微信小程序 实现摇一摇重力感应API

微信小程序并没有提供摇一摇API接口,但是提供了一个重力感应的API 「wx.onAccelerometerChange(CALLBACK)」,我们可以用这个方法来模拟微信摇一摇功能,代码如下:

Page({
  onShow: function () {
    wx.onAccelerometerChange(function (e) {
      console.log(e.x)
      console.log(e.y)
      console.log(e.z)
      if (e.x > 1 && e.y > 1) {
        wx.showToast({
          title: '摇一摇成功',
          icon: 'success',
          duration: 2000
        })
      }
    })
  },
  onHide: function(){
    
  }
})

但如果小程序需要启用tabbar的话,这样启用重力感应API会使tabbar下面所有页面都会监听到重力感应数据,导致模拟摇一摇在所有页面都能出现摇一摇的结果,这并不是我们想要的,我们只是想在tabbar下其中一个页面允许他获取到重力感应数据,那么就需要我们自己加入一个是否在当前页面的判断,根据判断结果来启用监听重力感应API,代码修改如下:

Page({
  isShow: false,
  onShow: function () {
    var that = this;
    this.isShow = true;
    wx.onAccelerometerChange(function (e) {
      if(!that.isShow){
        return
      }
      console.log(e.x)
      console.log(e.y)
      console.log(e.z)
      if (e.x > 1 && e.y > 1) {
        wx.showToast({
          title: '摇一摇成功',
          icon: 'success',
          duration: 2000
        })
      }
    })
  },
  onHide: function(){
    this.isShow = false;
  }
})

总结

以上所述是小编给大家介绍的微信小程序开发摇一摇功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
JS Timing
Apr 21 Javascript
javascript indexOf函数使用说明
Jul 03 Javascript
js电信网通双线自动选择技巧
Nov 18 Javascript
鼠标滑上去后图片放大浮出效果的js代码
May 28 Javascript
JS无法捕获滚动条上的mouse up事件的原因猜想
Mar 21 Javascript
JavaScript对HTML DOM使用EventListener进行操作
Oct 21 Javascript
jQuery实现简单滚动动画效果
Apr 07 Javascript
jQuery防止重复绑定事件的解决方法
May 14 Javascript
jQuey将序列化对象在前台显示地实现代码(方法总结)
Dec 13 Javascript
JS 60秒后重新发送验证码的实例讲解
Jul 26 Javascript
express默认日志组件morgan的方法
Apr 05 Javascript
vue项目实现图片上传功能
Dec 23 Javascript
js实现录音上传功能
Nov 22 #Javascript
解决vue自定义全局消息框组件问题
Nov 22 #Javascript
JavaScript实现省市联动效果
Nov 22 #Javascript
Vue混入mixins滚动触底的方法
Nov 22 #Javascript
超简单的微信小程序轮播图
Nov 22 #Javascript
微信小程序实现Swiper轮播图效果
Nov 22 #Javascript
Js代码中的span拼接问题解决
Nov 22 #Javascript
You might like
如何选购合适的收音机
2021/03/01 无线电
在php中取得image按钮传递的name值
2006/10/09 PHP
数字转英文
2006/12/06 PHP
微信公众号之主动给用户发送消息功能
2019/06/22 PHP
通过jquery的$.getJSON做一个跨域ajax请求试验
2011/05/03 Javascript
jquerymobile局部渲染的各种刷新方法小结
2014/03/05 Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
2014/08/27 Javascript
jQuery向后台传入json格式数据的方法
2015/02/13 Javascript
快速学习jQuery插件 Form表单插件使用方法
2015/12/01 Javascript
jquery及js实现动态加载js文件的方法
2016/01/21 Javascript
微信公众号菜单配置微信小程序实例详解
2017/03/31 Javascript
javascript闭包功能与用法实例分析
2017/04/06 Javascript
[js高手之路]单例模式实现模态框的示例
2017/09/01 Javascript
JS异步函数队列功能实例分析
2017/11/28 Javascript
webpack打包并将文件加载到指定的位置方法
2018/02/22 Javascript
JSON字符串操作移除空串更改key/value的介绍
2019/01/05 Javascript
微信小程序new Date()方法失效问题解决方法
2019/07/29 Javascript
JavaScript实现动态留言板
2020/03/16 Javascript
Python functools模块学习总结
2015/05/09 Python
简要讲解Python编程中线程的创建与锁的使用
2016/02/28 Python
Python星号*与**用法分析
2018/02/02 Python
python数字图像处理实现直方图与均衡化
2018/05/04 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
Python自定义一个类实现字典dict功能的方法
2019/01/19 Python
Django发送邮件功能实例详解
2019/09/02 Python
python3 pillow模块实现简单验证码
2019/10/31 Python
pytorch 实现打印模型的参数值
2019/12/30 Python
Selenium之模拟登录铁路12306的示例代码
2020/07/31 Python
HTML5之SVG 2D入门5—颜色的表示及定义方式
2013/01/30 HTML / CSS
Araks官网:纽约内衣品牌
2020/10/15 全球购物
单位单身证明范本
2014/01/11 职场文书
《争吵》教学反思
2014/02/15 职场文书
廉洁教育学习材料
2014/05/19 职场文书
公司地址变更通知
2015/04/25 职场文书
python 中yaml文件用法大全
2021/07/04 Python
为Centos安装指定版本的Docker
2022/04/01 Servers