2012-04-18 2 views
1

У меня есть 2 стрелки, один увеличивает счетчик на 1, а левый уменьшает его. Я пытаюсь решить проблему, это хорошая логика для решения отрицательного числа (она должна перейти к последнему элементу в списке) а на другом конце, когда счетчик превысил максимальное количество элементов, он должен вернуться к 0.стрелка в jQuery

Ищем какую-то приятную логику для достижения этой цели.

+0

"-ve number"? Это какой-то ужасный новый способ сказать «негатив»? – ThiefMaster

+0

@ThiefMaster Да. Это увеличение производительности на 62,5%. –

+1

@RoryMcCrossan: нет, если вы посчитаете время, необходимое для реагирования на жестокое обращение с языком посредством текстовых соглашений ... –

ответ

1

Вы можете использовать оператора modulo для:

(num + total) % total 

Если вы хотите 1..total вместо 0..total-1, используйте ((num + total) % total) + 1

Так (псевдо-) код может выглядеть следующим образом:

function inc() { 
    num = (num + 1 + total) % total; 
} 

function dec() { 
    num = (num - 1 + total) % total; 
} 

+total необходимо, поскольку поведение оператора modulo для отрицательных значений не является согласованным между языками и таким образом оно всегда работает, так как вы никогда не получаете отрицательное значение.

1

В любое время, когда вы увеличиваете, проверьте новое значение. Если это больше, чем общее количество опций, сбросьте его до нуля. Если это меньше, чем общее количество опций, установите его на макс. Просто, +=1 или -=1.

Например:

var total = 5, 
    currentNumber = 0, 
    numContainer = $("#number"); 

$(".up, .down").on("click", function(){ 
    currentNumber = parseInt(numContainer.text(), 10); 
    if ($(this).hasClass("up")) { 
    if (++currentNumber > total) currentNumber = 1; 
    } 
    if ($(this).hasClass("down")) { 
    if (--currentNumber < 1) currentNumber = total; 
    } 
    numContainer.text(currentNumber); 
}); 

Это может быть дополнительно уменьшено, чтобы использовать тройной оператор, а также взломать функциональность короткого замыкания оператора конъюнкции:

var t = 5, c = 0, n = $("#number"); 

$(".up, .down").on("click", function(){ 
    c = parseInt(n.text(), 10); 
    $(this).hasClass("up") ? (++c > t) && (c = 1) : (--c < 1) && (c = t); 
    n.text(c); 
}); 

Демонстрация: http://jsbin.com/egifas/edit#javascript,live

0

Theifmaster был прав, был почти у себя

var num = 0; 
var total = 5; 
if (direction == 'left') { 
num = (num - 1 + total) % total; 
} 

if (direction == 'right') { 
num = (num + 1 + total) % total; 
alert(num); 

} 

так, если нажать на левую стрелку в моем примере это должно быть -1, но это делает его 4 мод 5 = 4. Моя логика была слишком долго это гораздо более простой способ сделать это.

0

Я не использую% оператора как самый простой способ. Это только добавляет сложности, где вам это совсем не нужно, imo. Однако я не говорю, что это неправильно.

Итак, легкий способ. Все, что вам нужно, это общее количество слайдов (или любых других элементов/объектов u есть). Ваши оба метода могут выглядеть следующим образом:

var counter = 0; 
var total = 7; // u will need to set this to your own totalCount value. 

function incrementCounter() 
{ 
    counter = (counter < total - 1) ? counter + 1 : 0; 
} 


function decrementCounter() 
{ 
    counter = (counter > 1) ? counter - 1 : total; 
} 

Пожалуйста, не так, что кусок кода на самом деле ничего не делает. Он даже не проверяет достоверность данных (т. Е. Если установлены глобальные вары, если сумма фактически больше нуля и т. Д.). В любом случае на основе этого вы можете использовать этот счетчик для отображения некоторого контента или движущихся изображений или чего бы вы там ни делали. Кроме того, вы можете изменить его на нуль-индекс. Это будет полезно, если вы играете с массивами JS, поэтому вам не нужно будет +/- 1 для индексов для получения элементов.

Смежные вопросы