제 생각을 용서해주십시오. 나는 최근에 자바 스크립트를 작성하기 시작했습니다. 바로 사용할 수있는 솔루션을 찾는 것이 아니라 코드를 직접 작성하는 데 도움이 될 몇 가지 통찰력을 얻으 려합니다.JS/jQuery : 여러 함수 호출을 방지하는 함수 재사용
전체 화면 슬라이딩 패널 유형 웹 사이트에서 화살표 키 또는 클릭 가능한 링크를 사용하여 탐색 할 수있는 옵션이 있습니다.
화살표 키를 사용하여 탐색 할 때 모든 기능이 훌륭하게 작동했습니다. 화면 탐색 링크를 사용할 때 같은 기능을 호출하고 싶습니다. 함수와 변수가 키 바인딩 함수 내부에 선언되어 있으므로이 작업을 수행하는 방법을 잘 모르겠습니다.
두 번째 문제점은 함수가 여전히 애니메이션을 적용하는 동안 슬라이드 함수가 두 번 이상 호출되지 않도록하는 방법이 필요하다는 것입니다. 나는 다양한 setTimeout 구현과 Ben Alman의 doTimeout 및 debounce를 시도했지만 제대로 작동하지는 못했다.
도움이 될 것입니다.
$(document).ready(function() {
var currentSlide = 1;
$(document).keydown(function(e){
nextSlide = currentSlide + 1;
prevSlide = currentSlide - 1;
lastSlide = $(".slide").length
cur1 = document.getElementById("slide" + currentSlide);
prev1 = document.getElementById("slide" + prevSlide);
next1 = document.getElementById("slide" + nextSlide);
function moveRight(){
if(currentSlide < lastSlide){
$(next1).addClass('frontAndCenter').stop().animate({
left: "0",
}, 500, function() {
$(this).removeClass("frontAndCenter");
$(cur1).css("left", "-100%");
});
currentSlide = currentSlide + 1;
}
else{
return false;
};
};
function moveLeft(){
if(currentSlide > 1){
$(prev1).addClass('frontAndCenter').stop().animate({
left: "0",
}, 500, function() {
$(this).removeClass("frontAndCenter");
$(cur1).css("left", "100%");
});
currentSlide = currentSlide - 1
}
else{
return false;
};
};
switch(e.which) {
case 37: // left
moveLeft();
break;
case 39: // right
moveRight();
break;
default: return;
}
e.preventDefault();
});
$("#arrowRight").click(function() {
moveRight();
});
$("#arrowLeft").click(function() {
moveLeft();
});
});
+1. 또한, 두 번째 문제에 대한, 글로벌 부울 선언 (그냥 문서 준비 함수의 시작 부분에 대한) "is_sliding"거짓으로 초기화됩니다. 그런 다음 매번 함수를 호출하고 싶다면 전에 "is_sliding"이 아닌지 테스트하십시오. 그렇지 않다면 "is_sliding"을 true로 설정하고 "complete"콜백을 function() {is_sliding = false;}으로 $ .animate() 메소드를 호출하십시오. 이 콜백에 대해서는 애니메이션 공식 문서를 참조하십시오. – Ricola3D
변수의 경우 keyevent 바인딩 외부에있는 함수를 사용하여 변수를 가져올 수 있습니다. – Ricola3D
좋아요! 그 아이디어에 대해 Ricola에게 감사드립니다. 좋은 생각이 들게합니다. Guillherme- 내가 모든 변수를 글로벌하게 만들면 모든 것이 깨집니다. 이해할 수없는 이유가 있습니다 ...함수를 외부로 옮기려면 전역 변수를 함수 외부에서 호출 할 수 있습니까? 내가 전역 변수를 사용하지 않을하려고 – user2478342