如何检测设备是否有振动器?

时间:2014-07-14 16:05:56

标签: javascript html5 vibrate

使用navigator.vibrate可以让智能手机和平板电脑振动。但是,该功能也可以在桌面浏览器上使用,因此它的存在对于检测振动电机是否实际可用是无用的。

当然,我可以检查设备是否正在运行移动操作系统以获得合适的近似值,但有没有正确的方法来检测振动是否实际可用?

原因:我正在使用游戏中的振动,并包含一个开/关按钮。在桌面PC上显示此按钮是没有意义的。

2 个答案:

答案 0 :(得分:1)

不幸的是,听起来你不能:

  

显然这是故意的,以避免暴露可访问性   设置(被视为敏感),允许UA提供   后备,也可能成为指纹识别的障碍。

来自http://github.com/Modernizr/Modernizr/issues/1217

The spec itself说:

  

如果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

虽然它不是你的意思(不是特征检测),但它给出了公平的后备。