JavaScript手机振动API


Posted in Javascript onJune 11, 2016

很明显,这个API就是允许mobile程序员使用JavaScript调用手机的振动功能,并且能设定振动的方式和时长。
判断浏览器对振动API的支持情况

一个好的习惯就是在使用之前要检查一下当前你的应用环境、浏览器是否支持振动API。下面就是检测的方法:

// Standards ftw!
var supportsVibrate = "vibrate" in navigator;

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

振动API基础应用

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

// 振动1秒
navigator.vibrate(1000);

// 振动多次
// 参数分别是震动3秒,等待2秒,然后振动1秒
navigator.vibrate([3000, 2000, 1000]);

如果想停止震动,你只需要向navigator.vibrate方法里传入0,或一个空数组:

// 停止振动
navigator.vibrate(0);
navigator.vibrate([]);

需要提醒的是,对navigator.vibrate方法的调用并不会引起手机循环振动;当参数是一个数字时,振动之后发生一次,然后就停止下来。当参数是数组时,震动会按数组里的值震动,然后就停止振动。

持续震动

我们可以简单的使用setInterval 和 clearInterval 方法产生让手机持续震动的效果:

var vibrateInterval;

// Starts vibration at passed in level
function startVibrate(duration) {
 navigator.vibrate(duration);
}

// Stops vibration
function stopVibrate() {
 // Clear interval and stop persistent vibrating 
 if(vibrateInterval) clearInterval(vibrateInterval);
 navigator.vibrate(0);
}

// Start persistent vibration at given duration and interval
// Assumes a number value is given
function startPeristentVibrate(duration, interval) {
 vibrateInterval = setInterval(function() {
 startVibrate(duration);
 }, interval);
}

上面的这段代码只是针对振动参数是一个数字的情况,如果参数是数组,你还需要计算一下它的总共持续时间,然后根据它的特征来进行循环。

使用振动(Vibration) API的场景

这个API显然是针对移动手机设备的。当开发手机WEB移动应用时,它是一个很好的警示工具,当在开发Web游戏或多媒体应用时,这个振动功能更是不可或缺的好技术。比如说,当用户在用一个手机玩你的WEB游戏时,当游戏中发生爆炸,而你让手机也跟随着振动,是不是一种很出色的用户体验?

你对这个JavaScript振动API的感觉如何?是认为它会很快流行起来?还是没有多大用处?

Javascript 相关文章推荐
js判断输入是否为正整数、浮点数等数字的函数代码
Nov 17 Javascript
javascript函数以及基础写法100多条实用整理
Jan 13 Javascript
js中生成map对象的方法
Jan 09 Javascript
动态载入js提高网页打开速度的方法
Jul 04 Javascript
jQuery事件绑定用法详解(附bind和live的区别)
Jan 19 Javascript
jQuery获取父元素节点、子元素节点及兄弟元素节点的方法
Apr 14 Javascript
详解vue前后台数据交互vue-resource文档
Jul 19 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
Dec 27 Javascript
解决微信小程序云开发中获取数据库的内容为空的方法
May 15 Javascript
vue子传父关于.sync与$emit的实现
Nov 05 Javascript
javascript实现视频弹幕效果(两个版本)
Nov 28 Javascript
封装Vue Element的table表格组件的示例详解
Aug 19 Javascript
JavaScript地理位置信息API
Jun 11 #Javascript
jQuery自定义数值抽奖活动代码
Jun 11 #Javascript
浅谈JavaScript的全局变量与局部变量
Jun 10 #Javascript
javaScript知识点总结(必看篇)
Jun 10 #Javascript
浅谈javascript基础之客户端事件驱动
Jun 10 #Javascript
用JavaScript获取页面文档内容的实现代码
Jun 10 #Javascript
老生常谈JavaScript数组的用法
Jun 10 #Javascript
You might like
php XMLWriter类的简单示例代码(RSS输出)
2011/09/30 PHP
PHP创建word文档的方法(平台无关)
2016/03/29 PHP
浅谈PHP的$_SERVER[SERVER_NAME]
2017/02/04 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
用JavaScript隐藏控件的方法
2009/09/21 Javascript
js螺旋动画效果的具体实例
2013/11/15 Javascript
js实现倒计时时钟的示例代码
2013/12/17 Javascript
Javascript常用字符串判断函数代码分享
2014/12/08 Javascript
node.js中的url.format方法使用说明
2014/12/10 Javascript
jQuery中not()方法用法实例
2015/01/06 Javascript
分享一个自己写的简单的javascript分页组件
2015/02/15 Javascript
JQuery中基础过滤选择器用法实例分析
2015/05/18 Javascript
javascript验证邮件地址和MX记录的方法
2015/06/16 Javascript
JavaScript基本数据类型及值类型和引用类型
2015/08/25 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
2016/05/27 Javascript
JavaScript实现的CRC32函数示例
2016/11/23 Javascript
AngularJS中$http的交互问题
2017/03/29 Javascript
十分钟带你快速了解React16新特性
2017/11/10 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
2017/11/11 Javascript
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
JavaScript中clientWidth,offsetWidth,scrollWidth的区别
2021/01/25 Javascript
[01:15:56]2018DOTA2亚洲邀请赛3月30日 小组赛A组 TNC VS Newbee
2018/03/31 DOTA
[01:04:31]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第二场 1月8日
2021/03/11 DOTA
Python并发:多线程与多进程的详解
2019/01/24 Python
python自定义线程池控制线程数量的示例
2019/02/22 Python
Python流程控制 if else实现解析
2019/09/02 Python
python+selenium 点击单选框-radio的实现方法
2019/09/03 Python
pytorch构建多模型实例
2020/01/15 Python
浅谈Python3中print函数的换行
2020/08/05 Python
HTML5网页录音和上传到服务器支持PC、Android,支持IOS微信功能
2019/04/26 HTML / CSS
Herschel Supply Co.美国:背包、手提袋及配件
2020/11/24 全球购物
2015年乡镇财政工作总结
2015/05/19 职场文书
房产电话营销开场白
2015/05/29 职场文书
详细谈谈MYSQL中的COLLATE是什么
2021/06/11 MySQL
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL
Apache Hudi 加速传统的批处理模式
2022/04/24 Servers