【工作笔记】微信公众号页面摇一摇+触发音效

需求是微信公众号页面能支持摇一摇且能够触发音效。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0,user-scalable=0" />
<title>摇一摇</title>
<script src="${ctx}/static/js/jquery-1.10.1.min.js"></script>
<script src="${ctx}/js/jweixin-1.1.0.js"></script>
<script>

$(function(){
	var haveContent = "$!{haveContent}";
	if(haveContent != "" && haveContent != null){
		// 换行处理
		var element = $("#remark");
		var temp =  element.html().replace(/\n/g,'<br/>');
		element.html(temp);
	}
});

window.οnlοad=function(){init();}
function init(){
	//判断移动浏览器是否支持运动传感器事件
	if(window.DeviceMotionEvent){
		//添加一个事件监听器
		window.addEventListener('devicemotion',deviceMotionHandler,false);
	}else{
		alert('not support mobile event');
	}
}

function autoPlayAudio(){
  wx.config({
	// 配置信息, 即使不正确也能使用 wx.ready
    debug: false,
    appId: '',
    timestamp: 1,
    nonceStr: '',
    signature: '',
    jsApiList: []
  });
  wx.ready(function() {
    document.getElementById('musicBox').play();
  });
}

// 摇一摇相关
var i = 1;
var f = 1;
var yqcount = 1;
			 
var InterValObj; //timer变量,控制时间
var count = 60; //间隔函数,1秒执行
var curCount;//当前剩余秒数
			 
window.onload = function(){init();}
var SHAKE_THRESHOLD = 2500;//定义一个摇动的阈值
var last_update = 0;//定义一个变量记录上一次摇动的时间
//定义x、y、z记录三个轴的数据以及上一次触发的时间
var x = 0, y = 0, z = 0, last_x = 0, last_y = 0, last_z = 0;

//运动传感器处理
function deviceMotionHandler(eventData){
	//获取含重力加速
	var acceleration = eventData.accelerationIncludingGravity;
	var curTime = new Date().getTime();//获取当前时间戳
	var diffTime = curTime - last_update;
	
	if(diffTime>100){
		last_update = curTime;//记录上一次摇动的时间
		
		x = acceleration.x;//获取加速度X方向
		y = acceleration.y;//获取加速度Y方向
		z = acceleration.z;//获取加速度垂直方向
		var speed = Math.abs(x + y + z - last_x - last_y - last_z) / diffTime * 10000;//计算阈值
		if(speed > SHAKE_THRESHOLD){	
			if(f==1 && yqcount>0){
				autoPlayAudio();
				var mid = "${mid}";
				var state = "${state}";
				var token = "${token}";
				f = 0;
			}	
		}
		//记录上一次加速度
		last_x=x;
		last_y=y;
		last_z=z;
	}
}	
</script>
</head>
<body>
    <div class="shake">
        <div class="shakebox">
        	<img id="shakeimg" src="${ctx}/images_yaoyiyao/yaohand1.png">
        </div>
        <div class="gets">
        	<a>请摇一摇您的手机</a>
        </div>
        #if($!{content} != "")
	     <div style="padding: 2rem 1.2rem 1.2rem 2rem;color:#fff;text-align: left;font-size: 0.8em;">
	         <p>活动说明</p>
		 <p id="remark">$!{content}</p>
	     </div>
        #end
    </div>
    <div style="display:none;" id="voiceDiv">
	<audio id="musicBox" preload="load" controls="controls" src="${ctx}/static/music/5018.wav"/>
    </div>
</body>
</html>


其中公众号页面摇一摇方法如上,遇到的问题是ios不能触发<audio>标签的play()方法,网上查找了资料,说ios必须得用户与页面进行交互才能触发,比如点击之类的,安卓手机没有这样的问题。

找了好久,一般的方法都是加监听,但是没用,最终解决方法是引入微信的js,然后在方法中这样写:

function autoPlayAudio(){
  wx.config({
	// 配置信息, 即使不正确也能使用 wx.ready
    debug: false,
    appId: '',
    timestamp: 1,
    nonceStr: '',
    signature: '',
    jsApiList: []
  });
  wx.ready(function() {
    document.getElementById('musicBox').play();
  });
}
这里wx.config涉及的参数不需要正确配置,wx.ready中调用<audio>标签的play()方法,即可在摇一摇的时候触发音效。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值