Прошу прощения за мое невежество, я только недавно начал писать javascript. Я не ищу готового решения, но больше информации, которая поможет мне написать код сам.JS/jQuery: повторное использование функции, предотвращающей многочисленные вызовы функций
Я работаю над полноэкранным веб-сайтом с раздвижной панелью, с возможностью навигации с помощью клавиш со стрелками или интерактивных ссылок.
У меня все хорошо работает при навигации с помощью клавиш со стрелками, и я хочу, чтобы эти функции выполнялись при использовании экранных навигационных ссылок. Я не уверен, как это сделать, поскольку функции и переменные объявляются внутри функции привязки ключей.
Моя вторая проблема заключается в том, что мне нужен способ предотвратить более слабые функции слайдов, пока функция все еще оживляет. Я пробовал различные реализации setTimeout, а также doTimeout и debounce Ben Alman, но не может показаться, что он работает правильно.
Любая помощь была бы принята с благодарностью!
Вот в 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 и вызовите метод $ .animate() с «полным» обратным вызовом как функцию() {is_sliding = false;}. См. Оглавление официального документа для этого обратного вызова. – Ricola3D
Для переменных создайте функции вне привязки keyevent, которые позволяют вам их получить. – Ricola3D
Отлично! Спасибо Ricola за эту идею, имеет смысл :) Guillherme - все это ломается, если я делаю все переменные глобальными, по какой-то причине я не могу понять ...могу ли я по-прежнему вызывать неглобальные переменные извне функции, если бы я их переместил? – user2478342