2014-07-14 4 views
1

navigator.vibrate으로 스마트 폰과 태블릿을 진동시킬 수 있습니다. 그러나이 기능은 데스크톱 브라우저에서도 사용할 수 있으므로 진동 모터가 실제로 사용 가능한지 여부를 감지하는 데 유용하지 않습니다.기기에 바이브레이터가 있는지 감지하는 방법은 무엇입니까?

물론 모바일 OS가 정상적으로 작동하는지 확인할 수는 있지만 진동이 실제로 발생하는지 여부를 감지 할 수있는 적절한 방법이 있습니까?

이유 : 나는 게임에서 진동을 사용하고 그것에 대한 켜기/끄기 버튼을 포함합니다. 이 버튼을 데스크탑 PC에 표시하는 것은 의미가 없습니다.

+0

@ ZougenMoriver 결론적 인 답변이므로 관련 인용문을 사용하여 답변을 작성해야합니다. –

답변

1

불행하게도, 그것은 소리처럼 당신은 할 수 없습니다 :

그래서 분명히 이것이다 의도, 사용 도구는 대체를 제공 할 수 있도록 접근성을 (대소으로 볼 수 있습니다) 설정, 노출되지 않도록하고, 잠재적으로 핑거 프린팅의 장벽으로 작용합니다. http://github.com/Modernizr/Modernizr/issues/1217

The spec itself에서

는 말한다 :

패턴이 빈리스트가, 또는 장치가 진동 할 수없는 경우, 다음 true를 반환하고 다음 단계를 종료 할 경우

.

0

너무, 장치가 실제로 어떻게 든 진동 할 경우 감지하는 것은 불가능 보인다 나는 비슷한 문제에 왔을 때 OS가 모바일 장치로하지 것 같으면 그냥 소리 대체를 사용 :

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 

그것은 당신이 의미하는 것이 아니라 (기능 탐지가 아니라) 공정한 대체물을 제공합니다.

관련 문제