2012-04-18 131 views
1

我有2個箭頭一個增加一個計數器1和左側減少它我想解決的問題是處理負數的好邏輯(它應該去列表中的最後一個項目)而在另一端當計數器超過最大數量時,它應該返回到0.箭頭點擊jquery

我正在尋找一些很好的邏輯來實現這一點。

+0

「-ve number」?那是一種可怕的新方式來說「負面」嗎? – ThiefMaster 2012-04-18 13:15:03

+0

@ThiefMaster是的。這是一個62.5%的表現增加。 – 2012-04-18 13:16:29

+1

@RoryMcCrossan:如果您計算應對文本說話慣例對語言殘酷濫用所需的時間,則不是。 – 2012-04-18 13:17:12

回答

1

您可以對此使用模運算符:

(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是必要的,因爲模數運算符對負值的行爲在各種語言之間並不一致,並且這種方式始終有效,因爲您永遠不會得到負值。

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。但是,我沒有告訴它是錯的。

所以,簡單的方法。 所有你需要的是幻燈片的總數(或者你擁有的任何元素/對象)。 您的這兩種方法可以是這樣的:

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來獲取元素。