현재 jQuery (플러그인 없음)에서 페이지 전환 효과가있는 책을 작업하고 있습니다. 한 페이지 씩 차례로 클릭하는 한 페이지 회전 효과는 지금까지 문제없이 작동합니다. 하지만 이제 사용자가 선택한 콘텐츠로 바로 이동할 수 있도록 드롭 다운 선택 항목 (예 : 선택 요소)을 포함하고 싶습니다. 이 작업을 루프와 .each() 메서드로 만들려고 했으므로 선택한 내용이있는 페이지가 표시 될 때까지 turnRightPage/turnLeftPage 함수가 반복적으로 호출됩니다. 그러나 꽤 많은 시행 착오와 많은 연구 끝에 루프가 완료되었다는 점에서 loop는 turnRightPage/turnLeftPage() 함수 (각 페이지를 뒤 바꾸는 변환 함수)에 너무 빨리 반복한다고 생각합니다. 함수가 완료되기 전에 필자가해야 할 일은 함수가 실행을 끝내고 다음 반복으로 다시 시작할 때까지 루프를 일시 중지하는 방법을 찾는 것입니다. Javascript: wait for function in loop to finish executing before next iteration (이 시점에서 jfriend00 덕분에) 나는 또한 Invoking a jQuery function after .each() has completed 및 다른 사람의 사이에서 wait for each jQuery 을 읽고 비슷한 솔루션을 제안하고 여기서 나는 여기에서 제안 된 것처럼 가장 유망한 방법은, 반복 카운터와 함수를 사용하는 것입니다 생각 .함수가 한 번만 실행되는 이유 카운터 함수를 사용하여 이전 호출이 완료된 후 여러 번 함수를 실행하려고 시도했습니다.
다음은 jfriend00의 콜백을 구현 한 방법입니다. 페이지 턴 수가 완료되면 "콜백 루프"를 벗어나는 return 문을 추가했습니다.
//determine whether to flip pages forward or back - first forward
if(currentPagePos < foundPagePos){ // => turn right page
//determine how many times need to turn page
if (pageDifference > 1 && pageDifference % 2 !=0) {
var numPageTurns = (pageDifference-1)/2;
pageForward (numPageTurns);
} //else if ... rest omitted for brevity
}
function pageForward (numPageTurns){
var i = 0;
function next(){
i++;
if (i <= numPageTurns){
turnRightPage();
} else {
return;
}
}
next();
};
전체 코드
여기에서 볼 수있다 : http://jsfiddle.net/snshjyxr/1/이 페이지를 설정 않지만, 한 번만! 내가 뭘 놓치고 있니?
저는 아직 자바 스크립트/jQuery에 익숙하지 않으므로 문제가 너무 명백한 것처럼 보입니다. 모든 포인터가 감사하겠습니다. 고마워!
대단원! 고마워요, 앙투안. 비록 내가 인정해야하지만, 콜백 함수가 어떻게 작동하는지 이해하기 위해 아직도 고심하고있다. 무엇이 정확히 if (typeof callback == "function") {callback.call(); } -bit 여기 있나요? – marcor
'if' 부분은'callback' 변수가 실제로 함수인지 검사하기 때문에 우리는 공통 변수를 호출하지 않습니다 (단지 오류를 던질 것입니다). 'callback.call()'은'callback' 변수에 포함 된 함수를 호출합니다. 이제 이것에 대해 생각해 보면,'콜백 (callback)() '은 그 트릭을 똑같이 잘 할 것이다. 내 대답을 편집 할게. –
'.call()'메서드는 호출하는 함수에 특정 컨텍스트를 전달하고자 할 때 편리 할 수 있다는 것을 기억하십시오 (예 :'this'가 함수 내에'window'가 아닌 다른 것이 필요할 경우) –