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


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判断生效时间不得大于失效时间的思路及代码
Apr 23 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
Jun 29 Javascript
浏览器打开层自动缓慢展开收缩实例代码
Jul 04 Javascript
javascript跨域的4种方法和原理详解
Apr 08 Javascript
简单的js图片轮换代码(js图片轮播)
May 06 Javascript
node.js中的fs.symlinkSync方法使用说明
Dec 15 Javascript
基于JavaScript实现手机短信按钮倒计时(超简单)
Dec 30 Javascript
Vue.js父与子组件之间传参示例
Feb 28 Javascript
Extjs表单输入框异步校验的插件实现方法
Mar 20 Javascript
小程序实现五星点评效果
Nov 03 Javascript
vuex实现购物车功能
Jun 28 Javascript
webpack5 联邦模块介绍详解
Jul 08 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
PHP Array交叉表实现代码
2010/08/05 PHP
常用的PHP数据库操作方法(MYSQL版)
2011/06/08 PHP
PHP递归获取目录内所有文件的实现方法
2016/11/01 PHP
Javascript 学习书 推荐
2009/06/13 Javascript
js调用css属性写法
2013/09/21 Javascript
jquery中的过滤操作详细解析
2013/12/02 Javascript
解析jQuery的三种bind/One/Live事件绑定使用方法
2013/12/30 Javascript
基于NodeJS的前后端分离的思考与实践(五)多终端适配
2014/09/26 NodeJs
JavaScript实现大数的运算
2014/11/24 Javascript
js实现双击图片放大单击缩小的方法
2015/02/17 Javascript
动态加载js文件简单示例
2016/04/21 Javascript
jquery实现输入框实时输入触发事件代码
2016/12/21 Javascript
JSON在Javascript中的使用(eval和JSON.parse的区别)详细解析
2017/09/05 Javascript
详解JavaScript数据类型和判断方法
2020/09/04 Javascript
Javascript实现贪吃蛇小游戏(含详细注释)
2020/10/23 Javascript
[01:35]辉夜杯战队访谈宣传片—LGD
2015/12/25 DOTA
Python的Flask框架应用程序实现使用QQ账号登录的方法
2016/06/07 Python
python绘制直线的方法
2018/06/30 Python
python中单下划线_的常见用法总结
2018/07/10 Python
python读取TXT每行,并存到LIST中的方法
2018/10/26 Python
详解Python中的分支和循环结构
2020/02/11 Python
Python常用数字处理基本操作汇总
2020/09/10 Python
HTML5 图片悬停放大的实现代码示例
2019/12/04 HTML / CSS
Hibernate持久层技术
2013/12/16 面试题
优秀毕业生推荐信范文
2014/03/07 职场文书
医德考评自我评价
2014/09/14 职场文书
2014年校务公开工作总结
2014/12/18 职场文书
小学五年级语文上册教学计划
2015/01/22 职场文书
中秋节慰问信
2015/02/15 职场文书
公司人事任命通知
2015/04/20 职场文书
增值税发票丢失证明
2015/06/19 职场文书
2016年会领导致辞稿
2015/07/29 职场文书
编写python程序的90条建议
2021/04/14 Python
python3实现无权最短路径的方法
2021/05/12 Python
Java比较两个对象中全部属性值是否相等的方法
2021/08/07 Java/Android
浅谈css实现背景颜色半透明的两种方法
2021/12/06 HTML / CSS