我为这个问题的笨拙措辞道歉。英语不是我的第一语言。
我正在创建一个可滚动的列表。此列表的每个元素都包含一个包含两行的列。我不想在每行填充之前偏移列。我基本上只想在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++;
}
如果没有引入变量&#39; j&#39;?
,有没有办法处理答案 0 :(得分:2)
在这种情况下,您可以将j
的所有实例替换为Math.floor(i/2)
。
答案 1 :(得分:2)
你可以这样做:
Math.floor(i/2)
取代j。
答案 2 :(得分:0)
我想使用纯css nth-child
来完成此要求
if(i%2){
item.style.top = "40px";
parent.appendChild(div);
}
在您的css div:nth-child(even) { top: 40px; }
替换j,只需为列创建一个类,为它设置边距,并将position设置为relative,float设置为left。
您可以在jsbin
或jsfiddler
中提供您的代码,以便我们为您提供帮助。我认为这个解决方案非常清晰,易于维护。
答案 3 :(得分:0)
使用传递元素i然后将(i + 1)用于函数然后向上计数2秒会很容易吗?
类似的东西:
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}
}
不确定该函数是否有很多帮助,但无论如何,在for循环中添加两个并处理(x)和(x + 1)的情况应允许每隔一次递增一次计数器。你必须说每次发生两次,但是你为它做了一个函数,它只需要很长一段时间,并留下一个容易重复使用的位来附加元素以放置文本。
答案 4 :(得分:0)
您可以按照几个答案中的说明使用Math.floor。或者右移一位:
i>>1;
使用此表达式替换j
,或使用:var j=i>>1;
。对于每个循环,i>>1
将具有以下值,并且递增i
:
0,0,1,1,2,2,3,3,4,4,...
答案 5 :(得分:-1)
试试这个:
for(var i=0, j=0; i < 10; i++%2 && ++j) {
console.log(i,j);
}