我有2個箭頭一個增加一個計數器1和左側減少它我想解決的問題是處理負數的好邏輯(它應該去列表中的最後一個項目)而在另一端當計數器超過最大數量時,它應該返回到0.箭頭點擊jquery
我正在尋找一些很好的邏輯來實現這一點。
我有2個箭頭一個增加一個計數器1和左側減少它我想解決的問題是處理負數的好邏輯(它應該去列表中的最後一個項目)而在另一端當計數器超過最大數量時,它應該返回到0.箭頭點擊jquery
我正在尋找一些很好的邏輯來實現這一點。
您可以對此使用模運算符:
(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
。
例如:
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);
});
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,我的邏輯是太長這是一個更好的方法來做到這一點。
我沒有找到使用%運算符作爲最簡單的方法。這隻會增加你根本不需要它的複雜性,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來獲取元素。
「-ve number」?那是一種可怕的新方式來說「負面」嗎? – ThiefMaster 2012-04-18 13:15:03
@ThiefMaster是的。這是一個62.5%的表現增加。 – 2012-04-18 13:16:29
@RoryMcCrossan:如果您計算應對文本說話慣例對語言殘酷濫用所需的時間,則不是。 – 2012-04-18 13:17:12