請原諒我的無知,我最近纔開始寫javascript。我不是在尋找一個開箱即用的解決方案,但更多的一些見解將幫助我自己編寫代碼。JS/jQuery:重用函數,防止多個函數調用
我正在使用全屏幕滑動面板類型的網站,並使用箭頭鍵或可點擊鏈接進行導航。
我在使用箭頭鍵導航時很好地運行了所有功能,我想要做的是在使用屏幕導航鏈接時調用相同的功能。我不知道如何做到這一點,因爲函數和變量是在鍵綁定函數中聲明的。
我的第二個問題是,我需要一種方法來防止幻燈片函數被多次調用,同時該函數仍然具有動畫效果。我曾嘗試過各種setTimeout實現,還有Ben Alman的doTimeout和debounce,但似乎無法使其正常工作。
任何幫助將不勝感激!
這裏是一個的jsfiddle與單純的版本我已經建立:http://jsfiddle.net/BKpAK/3/
而這裏僅僅是JS,如果你不想不甘示弱:
$(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」初始化爲false。然後每次你想要調用該函數時,如果不是「is_sliding」,那麼就測試一下。如果不是,請將「is_sliding」設置爲true,並將「complete」回調作爲函數(){is_sliding = false;}調用$ .animate()方法。請參閱此回調的官方動態文檔。 – Ricola3D
對於變量,使函數在keyevent綁定之外,允許您獲取它們。 – Ricola3D
太棒了!感謝Ricola的想法,很有道理:) Guillherme-如果我將所有變量設爲全局變量,出於某種原因我無法理解...如果我要移動它們,我仍然可以從函數外調用非全局變量嗎? – user2478342