setTimeout에 문제가 있습니다.정확하지 않은 setTimeout은 mousedown에서만 작동합니다.
모든 주요 브라우저에서 IE에서는 작동하지 않지만 잘 작동합니다. 저는 facebook app-puzzle을 만들고 있습니다. 플레이어가 Start (시작) 버튼을 누르면 타이머가 하나의 게임을 시작합니다. 처음에는 타이머를 늘리기 위해 setInterval을 사용했지만 페이스 북 스크립트의 협조로 게임이 끝나면 약 2 초가 지연되었습니다. 그럼 타이머의 정확성을 높이기 위해 stackoverflow 트릭을 발견 : setInterval timing slowly drifts away from staying accurate 그리고 다시 - 페이스 북없이 잘 작동, 지연 표시되지 않았다. 페이 스북 (Facebook)에서는 여전히 지연이 있습니다. 관심있는 정보가 응축됩니다. 사용자 : 사용자가 시작을 클릭하면 startTime으로 새로운 날짜를 만듭니다. 사용자가 게임 스크립트를 종료하면 finalTime new Date가 생성되고 finalTime - startTime이 생략됩니다. 코드에서
가에서는 setTimeout있다 :
마지막 퍼즐 조각 한 후 올바른 위치에 사용자 위치가 나는 사항 clearTimeout (puzzle.to)를 호출(...)
f : function() {
var sec_time = Math.floor((puzzle.nextAt - puzzle.startTime)/1000);
$('.timer').html(sec_time);
if (!puzzle.startTime) {
puzzle.startTime = new Date().getTime();
puzzle.nextAt = puzzle.startTime;
$('.timer').html('0');
}
puzzle.nextAt += 100;
puzzle.to = setTimeout(puzzle.f, puzzle.nextAt - new Date().getTime());
}
(...)
;
하지 정확한 시간은, IE에서조차 칠초 차이가 될 수 있습니다
는 지금이 문제가!/
가 나는 jQuery를 드래그 & 드롭 플러그인을 사용하여 퍼즐을 드래그 : 사용자가이 mousedown ... 때 게임 중
IE에서
jQuery onReady를 사용하여 시작 시간을 설정하고 타이머를 실행하기 위해 0.5 초마다 타이머를 실행하여 시작 시간과 현재 시간의 차이를 폴링 할 수 있습니다. 스크립트에서 시작 시간을 인라인으로 설정하면 실행 시간을 보장 할 수 없으며, 특히 여러 JS SDK를 사용할 때 보장 할 수 없습니다. –
당신의 답장을 위해 @Connor 감사합니다 :) '당신은 jQuery onReady를 사용할 수 있습니다'당신은 $ (document) .ready (function() {...})에 스크립트를 넣어야한다는 것을 의미합니다; ? 페이지의 맨 아래에 모든 스크립트 (JS SDK 제외)가 있으므로 DOM 요소가 모두로드 된 후에로드되지만 사용자가 올바르게 이해하는지 확실하지 않습니다. 타이머를 100ms마다 실행하여 코드를 계산할 때 볼 수 있듯이 0.5 초마다 실행 타이머를 제안하면 훨씬 더 생각할 수 있습니다. FB JS SDK 및 드래그 앤 드롭 동작을 방해하지 않도록 타이머를 잘라내는 방법이 있습니까? 아니면 내가 원하는 것을 성취 할 수있는 더 좋은 방법이 있습니까, 모르겠습니다. – Rob
jQuery 부분이 정확합니다. 위의 증가 된 정보를 바탕으로 나머지를 가능한 답으로 추가하겠습니다. –