当前位置: 主页 > 建站知识 > 小程序

随机抽奖小程序-抽奖摇号小程序 c语言

发布时间:2023-01-25 22:03   浏览次数:次   作者:佚名

本案例中需要实现的功能是小程序可以实现摇一摇随机抽奖。 微信小程序没有提供可以摇一摇的API接口,但是提供了一个加速度数据事件wx.onAccelerometerChange(function callback),可以用来模拟摇一摇功能

官网API developers.weixin.qq.com/miniprogram...

案例页面展示

随机抽奖小程序_随机抽奖小程序_抽奖摇号小程序 c语言

随机抽奖小程序_抽奖摇号小程序 c语言_随机抽奖小程序

抽奖摇号小程序 c语言_随机抽奖小程序_随机抽奖小程序

具体效果是:摇一摇手机随机抽奖小程序,如果摇一摇成功,请求后台接口随机抽奖小程序,后台随机返回抽奖结果(中奖与否),抽奖次数减1,不同音效将播放。

注意:该功能的开发需要在真机的开发者工具中进行调试,在模拟器中无法正常运行

摇一摇实现代码,util/shake.js

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 三轴的数值和上次的数值
};

抽奖摇号小程序 c语言_随机抽奖小程序_随机抽奖小程序

//开启摇一摇 function openShakeEvent() { shakeInfo.openFlag = true; } //关闭摇一摇 function closeShakeEvent() { shakeInfo.openFlag = false; } //摇一摇成功 function shakeOk() { closeShakeEvent(); } /** * 判断是否为摇一摇 */ function shake(acceleration, successCallback) { if (!shakeInfo.openFlag) {

随机抽奖小程序_抽奖摇号小程序 c语言_随机抽奖小程序

return; } var nowTime = new Date().getTime(); //记录当前时间 //如果这次摇的时间距离上次摇的时间有一定间隔 才执行 if (nowTime - shakeInfo.lastTime > 100) { var diffTime = nowTime - shakeInfo.lastTime; //记录时间段 shakeInfo.lastTime = nowTime; //记录本次摇动时间 shakeInfo.x = acceleration.x; //获取 x 轴数值 shakeInfo.y = acceleration.y; //获取 y 轴数值 shakeInfo.z = acceleration.z; //获取 z 轴数值 //计算摇一摇的速度 var speed = Math.abs(shakeInfo.x + shakeInfo.y + shakeInfo.z - shakeInfo.lastX - shakeInfo.lastY - shakeInfo.lastZ) / diffTime * 10000; if (speed > shakeInfo.shakeSpeed) { //如果计算出来的摇一摇幅度足够大,那么认为用户摇一摇成功 successCallback(); } //赋值,为下一次计算做准备 shakeInfo.lastX = shakeInfo.x; shakeInfo.lastY = shakeInfo.y; shakeInfo.lastZ = shakeInfo.z; }

抽奖摇号小程序 c语言_随机抽奖小程序_随机抽奖小程序

} module.exports = { openShakeEvent: openShakeEvent, closeShakeEvent: closeShakeEvent, shake: shake, shakeOk: shakeOk } 复制代码

shake方法调用shake/shake.js

// pages/shake/shake.js
const app = getApp()
const shake = require('../../utils/shake.js');
Page({}
  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    shake.openShakeEvent();  //打开摇一摇功能

随机抽奖小程序_随机抽奖小程序_抽奖摇号小程序 c语言

this.onAccelerometerChange() //开启摇一摇 }, /** * 生命周期函数--监听页面卸载 */ onUnload() { wx.offAccelerometerChange() //取消监听加速度数据事件,如果没有取消监听,退出页面后摇一摇事件会继续执行 shake.closeShakeEvent() //关闭摇一摇功能 }, // 开启摇一摇 onAccelerometerChange() { let _this = this wx.onAccelerometerChange(function(acceleration) { shake.shake(acceleration, function() { // 摇一摇成功后执行代码 _this.playSound('/static/audio/shake.wav') // 播放摇一摇音频 shake.shakeOk(); //摇一摇成功后调用后台接口获取中奖信息

抽奖摇号小程序 c语言_随机抽奖小程序_随机抽奖小程序

...... ...... ...... }); }); }, //播放音频 playSound = (src) => { const innerAudioContext = wx.createInnerAudioContext() innerAudioContext.autoplay = true //这两句话话一定要在一起,不然ios手机上会有时间放不出声音 innerAudioContext.src = src innerAudioContext.onPlay(() => { console.log('开始播放') }) innerAudioContext.onError((res) => { console.log(res) }) } ) 复制代码