2012-04-18 4 views
1

私は2つの矢印を1つずつ増やし、左側は1つ減らします。解決しようとしている問題は、負の数を処理するための良いロジックです(リストの最後の項目に移動する必要があります)カウンターが最大数を超えているときは、0に戻ってください。jqueryのクリック数

これを達成するための素晴らしいロジックを探しています。

+0

"-ve number"?それは "否定的"と言う、恐ろしい新しい方法でしょうか? – ThiefMaster

+0

@ThiefMasterはい。パフォーマンスは62.5%向上しました。 –

+1

@ RoryMcCrossan:文字通りの慣習で言語の虐待に対処するのにかかる時間を数えなければ... –

答えて

1

このためにモジュロ演算子を使用できます。

(num + total) % total 

あなたの代わりに0..total-1の1..totalをしたい場合は、だから、(擬似)のコードは次のようになります((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は、正しかったあなたは私の例では、左矢印をクリックすると、それがあるべき-1ほとんどが

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

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

} 

自分自身だったが、これは、それは4のmod 5 = 4私のロジックが長すぎた可能これはそれを行うもっときれいな方法です。

0

最も簡単な方法として%operatorを使用していません。それはまったく必要ない複雑さを加えるだけです。しかし、私はそれが間違っていると言っているわけではありません。

だから、簡単です。 あなたが必要とするのは、スライドの総数(またはそこにある要素/オブジェクト)です。 あなたの両方の方法は次のようになります。

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を使う必要はありません。