2014-11-04 55 views
1

我爲這個問題的笨拙措辭表示歉意。英語不是我的第一語言。在for循環中,我如何每隔一次增加一次計數器?

我正在創建一個可滾動列表。此列表中的每個元素都由包含兩行的列組成。我不想偏移列,直到每行填滿。我基本上只想增加for循環的每兩個週期的偏移計數器。我的代碼如下:

var j = 0; 
for(var i=0;i<localArray.length;i++){ 
    var iconLeft = 145 * j; 

    var div = document.createElement('div'); 
    div.id    = "page_icon_" + i; 
    div.style.position = "absolute"; 
    div.style.height = "45px"; 
    div.style.width  = "145px"; 
    div.style.left  = iconLeft + "px"; 

    var item = fishListItem(localArray[i].info); 
    div.appendChild(item); 
    var parent = document.getElementById('tut_icons_scroll'); 

    if(i%2){ 
     item.style.top = "40px"; 
     parent.appendChild(div); 
    }else{   
     parent.appendChild(div); 
    } 
    if (i%2) { 
     j++; 
    } 

有沒有辦法處理而不引入變量'j'?

+0

目前尚不清楚爲什麼你需要'j'這裏都沒有。爲什麼不直接使用'i%2'就像你已經在做的那樣? – Sherif 2014-11-04 02:15:49

+0

是的,最後3行是不必要的,但我%2總是會給我0或1的任何正整數。 – 2014-11-04 05:23:38

+0

好吧,是的,就是這一點。如果你正在跟蹤單個循環內的X單元格和Y列表中的單元格的累計數量,那麼Y的偏移量很容易變成'X%Y',在你的情況下'Y = 2'所以偏移量爲0或1. - 對不起編輯 – Sherif 2014-11-06 00:04:38

回答

2

你可能只是做:

Math.floor(i/2) 

到位j的。

2

在這種情況下,您可以用Math.floor(i/2)替換j的所有實例。

-1

試試這個:

for(var i=0, j=0; i < 10; i++%2 && ++j) { 
    console.log(i,j); 
} 
+0

@KickButtowski請再讀一遍這個問題 - 具體是關於每隔一個迭代遞增一個計數器 – Dinesh 2014-11-04 16:56:43

+0

@ J0e3gan謝謝 – Dinesh 2014-11-04 16:59:04

0

我想用純CSS nth-child來實現這一要求

if(i%2){ 
    item.style.top = "40px"; 
    parent.appendChild(div); 
} 

替換此,在你的CSS div:nth-child(even) { top: 40px; }

更換Ĵ,只是爲該列創建一個類,爲其設置邊距,並將位置設置爲相對,將float設置爲左側。

你能提供你的代碼jsbin或​​所以我可以幫你。我認爲這個解決方案非常清晰易於維護。

+0

嗯,這是一個有趣的解決方案。我必須嘗試一下! – 2014-11-04 05:25:04

+0

分享jsfiddler,讓我們試試看 – Sean 2014-11-04 05:44:05

0

使用傳遞元素i然後(i + 1)傳遞函數然後計數2s會很容易嗎?

喜歡的東西:

function appendFunction(elementToAdd, addItTo) {} 

for (var i = 0; i < localArray.length; i+=2) { 
    var iconLeft = 145*(i%2); // at 0 
    var iconRight = 145*(i%2 + 1); // at 145 
    appendFunction(elementToAdd[i], addItTo} 
    appendFunction(elementToAdd[i+1], addItTo} 
} 

不知道的功能有很大幫助,但不管怎麼說,通過三三兩兩添加和處理的(X)和(x + 1)中的for循環應該讓你的情況下,每隔一次增加一次計數器。你必須說出每次發生兩次的事情,但是你爲它做了一個功能,它會持續很長時間,並且給你留下一個容易重用的位,以便以放置文本的方式追加元素。

0

您可以按照幾個答案中的說明使用Math.floor。或由一個位右移位:

i>>1; 

要麼替代j與此表達,或使用:var j=i>>1;i>>1將爲每個循環以下值和遞增i

0,0,1,1,2,2,3,3,4,4,... 
相關問題