使用navigator.vibrate
可以让智能手机和平板电脑振动。但是,该功能也可以在桌面浏览器上使用,因此它的存在对于检测振动电机是否实际可用是无用的。
当然,我可以检查设备是否正在运行移动操作系统以获得合适的近似值,但有没有正确的方法来检测振动是否实际可用?
原因:我正在使用游戏中的振动,并包含一个开/关按钮。在桌面PC上显示此按钮是没有意义的。
答案 0 :(得分:1)
不幸的是,听起来你不能:
显然这是故意的,以避免暴露可访问性 设置(被视为敏感),允许UA提供 后备,也可能成为指纹识别的障碍。
来自http://github.com/Modernizr/Modernizr/issues/1217
如果pattern为空列表,或者设备无法振动, 然后返回true并终止这些步骤。
答案 1 :(得分:0)
似乎无法检测设备是否会以某种方式实际振动,所以当我遇到类似的问题时,如果操作系统似乎不是移动设备,我只是使用了后备声音:
var navigatorTest = (function(ua){
return function(){
for(var i=0; i<arguments.length; ++i) {
if(ua.indexOf(arguments[i]) >= 0)
return true;
}
return false;
};
})(navigator.userAgent);
var bleep = ((
(navigatorTest("iPad", "iPod", "iPhone", "Android") || !navigatorTest("Macintosh", "Windows", "X11", "Linux"))
&& (navigator.vibrate || navigator.webkitVibrate || navigator.mozVibrate || navigator.msVibrate)
) || (
function(ctx){
return function(len){
var osc = ctx.createOscillator();
osc.connect(ctx.destination);
osc.start();
setTimeout(function(){
osc.stop();
}, len);
};
}
)(
window.AudioContext ? new AudioContext() : new webkitAudioContext()
)).bind(navigator, 300); // Vibration/bleep time
虽然它不是你的意思(不是特征检测),但它给出了公平的后备。