2014-04-22 3 views
3

JavaScript를 사용하여 모바일 응용 프로그램을 작성하고 있습니다. 그것으로 내가 전화 '가속도 센서에서 데이터를 얻기 위해 필요, 그래서 그것을에 이벤트 리스너를 첨부 :JavaScript addEventListener delay

if (window.DeviceOrientationEvent) { 
    window.addEventListener("deviceorientation", function (event) { 
     if (typeof(event.alpha) != 'undefined') { 
      //here goes function for an event 
     } 
    }, false); 
} 

하지만 난 그리 뭔가를 그리기 위해 함수를 호출 할 때 문제는 따라서, 데이터마다 밀리 초를 얻는 것입니다 이 데이터에 따르면, 그것은 밀리 세컨드마다 계속됩니다 -> 응용 프로그램이 충돌합니다.

이 데이터를 지연 시키거나 수신하는 방법이 있습니까? 예를 들어 1 초마다 이벤트를들을 수있는 기능이 있습니까?

답변

1

"기능 디 바운싱"이라고합니다. 기본적으로 일정 시간 내에 한 번만 물건을 실행합니다. 간단한 구현은 다음과 같습니다

var lastExecution; 
addEventListener("deviceorientation", function (event) { 
    var now = Date.now(); 
    if (now - lastExecution < 17) return; // ~60Hz 
    lastExecution = now; 
    ... 
}, false); 

(.. 예, lastExecution 처음에 정의되지 않는다 그것은 괜찮습니다)

+0

당신이 startvalue – Martijn

+1

@Martijn 예로서, 당신은 간단한 '0'을 줄 수있는 정의되지 않은 문제가있는 경우,하지만 ... 승 ould는 1970 년 이전의 경우 문제가 될 수 있습니다. :) 오, 그렇지만'undefined '로 인해 불분명 한 결과가 나올 수는 있지만 어쨌든 괜찮습니다. – MaxArt

+0

그것은 당신의 코드에 대한 코멘트가 아니라 문제를 생각하는 사람들을위한 솔루션을 제공하기위한 것이 었습니다. – Martijn

1

난 당신이 detrottle/디 바운스

당신이 jQuery를하는 경우와 같은 뭔가를 찾고 생각, these guys made it easy :

window.addEventListener("deviceorientation", function (event) { 
    $.throttle(250, function (event){ 
     // Code here will excecute every 250 ms 
    }) 
); 
+1

jQuery는 언급 된 적이 없습니다. – MaxArt

+0

스로틀 링은 jQuery와 절대적으로 무관합니다. 이 "플러그인"은 일반적인 기능을'$'네임 스페이스에 넣는 역할을합니다. jQuery와는 많이 관련이 없습니다. – Bergi

+0

괜찮아요, dethrottle은 jQuery 일 뿐이라고 제안하지 않고 jQuery임을 나타 내기 위해 다시 고찰했습니다. – Martijn