js实现手机摇一摇以及震动功能

事件监听

DeviceMotion,html5提供的新的DOM事件,其提供设备的加速信息,表示为定义在设备上的坐标系中的卡尔迪坐标。其还提供了设备在坐标系中的自转速率。

DeviceMotionEvent 会在设备发生有意义的摆动(或运动)时产生.事件对象封装有产生的间距值,旋转率,和设备加速度.
加速度的计算方式是重力和用户产生的两个加速度矢量之和.设备是通过 陀螺仪和加速计来区别这两者的.
通过DeviceMotion对设备运动状态的判断,则可以帮助我们在网页上就实现“摇一摇”的交互效果。

if ((window.DeviceMotionEvent) {
  window.addEventListener('devicemotion', deviceMotionHandler, false);
} else {
  alert("Not supported on your device.")
}

捕捉重力加速度

accelerationIncludingGravity属性返回设备的加速度记录,是由用户引起的设备的加速度和由重力加速度的总和。

是一个包括三轴(x、y、z)加速度信息的对象,每个轴都有自己的属性:

x:表示x轴(西到东)上的加速度

y:表示y轴(南到北)上的加速度

z:表示z轴(下到上)上的加速度

var acceleration = event.accelerationIncludingGravity;

手机震动

在window.navigator对象里就只有一个关于振动的API:vibrate

这个navigator.vibrate函数可以接受一个数字参数,也可以接受一个数字数组,当使用数组参数时,奇数位的数值是震动秒数,偶数位为等待秒数。

// 振动2秒
if (navigator.vibrate) {
    navigator.vibrate(2000);
} else if (navigator.webkitVibrate) {
    navigator.webkitVibrate(2000);
}
 
// 振动多次
// 参数分别是震动3秒,等待2秒,然后振动1秒
navigator.vibrate([3000, 2000, 1000]);
 
// 停止振动
navigator.vibrate(0);
navigator.vibrate([]);

实例

if(window.DeviceMotionEvent) {
    var speed = 30;    // 用来判定的加速度阈值,太大了则很难触发
    var x, y, z, lastX, lastY, lastZ;
    x = y = z = lastX = lastY = lastZ = 0;
		
	window.addEventListener('devicemotion', function(event){
		 var acceleration = event.accelerationIncludingGravity;
		 x = acceleration.x;
		 y = acceleration.y;
		 if(Math.abs(x-lastX) > speed || Math.abs(y-lastY) > speed) {
		    if(navigator.vibrate) {
			    navigator.vibrate(500)
		    }
		    alert("摇一摇成功");
		 }
		 lastX = x;
		 lastY = y;
	}, false);
}

测试有效!

作者:Li_na_na01
来源:CSDN
原文:https://blog.csdn.net/Li_na_na01/article/details/87809093
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单手机摇一摇抽奖代码实现示例: HTML部分: ```html <!-- 抽奖按钮 --> <button id="lotteryBtn">摇一摇抽奖</button> <!-- 中奖提示 --> <div id="result"></div> ``` JavaScript部分: ```javascript // 监听DeviceMotion事件 window.addEventListener('devicemotion', function(event) { // 获取加速度数据 var acceleration = event.accelerationIncludingGravity; // 计算加速度大小 var accelerationMagnitude = Math.sqrt( Math.pow(acceleration.x, 2) + Math.pow(acceleration.y, 2) + Math.pow(acceleration.z, 2) ); // 判断是否达到摇一摇条件 if (accelerationMagnitude > 20) { // 触发抽奖事件 lottery(); } }); // 抽奖函数 function lottery() { // 随机生成中奖结果(这里假设有10%的概率中奖) var isWin = Math.random() < 0.1; if (isWin) { // 中奖提示 document.getElementById('result').innerHTML = '恭喜你中奖了!'; } else { // 未中奖提示 document.getElementById('result').innerHTML = '很遗憾,未中奖!'; } } // 绑定抽奖按钮点击事件 document.getElementById('lotteryBtn').addEventListener('click', function() { // 触发抽奖事件 lottery(); }); ``` 在实现中,我们通过监听DeviceMotion事件来判断手机是否摇动,如果达到摇一摇条件,就触发抽奖事件。在抽奖事件中,我们通过随机生成中奖结果来模拟抽奖过程,并根据结果提示用户是否中奖。同时,我们也通过绑定抽奖按钮点击事件来实现手动抽奖的功能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值