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


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 相关文章推荐
javascript 操作cookies及正确使用cookies的属性
Oct 15 Javascript
十分钟打造AutoComplete自动完成效果代码
Dec 26 Javascript
js保存当前路径(cookies记录)
Dec 14 Javascript
JavaScript中实现继承的三种方式和实例
Jan 29 Javascript
使用JQuery实现智能表单验证功能
Mar 08 Javascript
jQuery ajax提交Form表单实例(附demo源码)
Apr 06 Javascript
JavaScript中的对象和原型(一)
Aug 12 Javascript
深入理解vue Render函数
Jul 19 Javascript
详解Vue中使用Echarts的两种方式
Jul 03 Javascript
jQuery实现动画、消失、显现、渐出、渐入效果示例
Sep 06 jQuery
django中使用vue.js的要点总结
Jul 07 Javascript
Vue3新特性之在Composition API中使用CSS Modules
Jul 13 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中神奇的fastcgi_finish_request
2011/05/02 PHP
php读取目录所有文件信息dir示例
2014/03/18 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
2016/05/09 PHP
php 在字符串指定位置插入新字符的简单实现
2016/06/28 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
php代码调试利器firephp安装与使用方法分析
2018/08/21 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
javascript Firefox与IE 替换节点的方法
2010/02/24 Javascript
javascript正则表达式中参数g(全局)的作用
2010/11/11 Javascript
jquery模拟LCD 时钟的html文件源代码
2014/06/16 Javascript
使用jQuery或者原生js实现鼠标滚动加载页面新数据
2016/03/06 Javascript
JavaScript操作 url 中 search 部分方法函数
2016/06/15 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
2016/08/11 Javascript
vue.js的提示组件
2017/03/02 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
2017/05/14 Javascript
JS数组操作中的经典算法实例讲解
2017/07/26 Javascript
ES6学习教程之Map的常用方法总结
2017/08/03 Javascript
Vue官方文档梳理之全局配置
2017/11/22 Javascript
基于JavaScript实现简单的音频播放功能
2018/01/07 Javascript
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
python使用wxpython开发简单记事本的方法
2015/05/20 Python
Python 判断图像是否读取成功的方法
2019/01/26 Python
python代码实现TSNE降维数据可视化教程
2020/02/28 Python
如何更换python默认编辑器的背景色
2020/08/10 Python
面向对象编程的优势是什么
2015/12/17 面试题
毕业寄语大全
2014/04/09 职场文书
缅怀先烈演讲稿
2014/09/03 职场文书
公司领导班子民主生活会对照检查材料
2014/10/02 职场文书
安全生产标语大全
2014/10/06 职场文书
学习经验交流会策划书
2015/11/02 职场文书
开学季:喜迎新生,迎新标语少不了
2019/11/07 职场文书
python基础之停用词过滤详解
2021/04/21 Python
SpringBoot2 参数管理实践之入参出参与校验的方式
2021/06/16 Java/Android
一篇文章弄懂Python关键字、标识符和变量
2021/07/15 Python
简述Java中throw-throws异常抛出
2021/08/07 Java/Android