我正在研究一个方程式,我的想法是在欺骗我。 我有一些变数:
var infiniteCount,
itemIndex,
itemCount = 6,
itemsToShow = 3,
itemsOffScreen = itemsToShow * 3;
这只是一个例子。 我提出了一个方程式来计算项目索引后,我在前面添加项目,同时反向循环项目(我希望这是有道理的)。 我想出的等式是:
itemIndex = (itemsOffscreen - (infiniteCount * 2)) + ((itemCount - infiniteCount) - 1);
有效。如果我将itemsToShow更改为6,则索引仍然正确。 要查看代码,请看如下:
// Set up infinite
var _setupInfinite = function (items, options) {
// Are we infinite
var i,
infiniteCount,
itemIndex,
itemCount = items.length,
itemsToShow = options.display.itemsToShow || itemCount,
itemsOffscreen = itemsToShow * 3,
isEven = items.length % 2 == 0;
// If we are scrollable
if (options.scrollable && options.infinite) {
// If we need to duplicate some items
if (itemsOffscreen > itemCount) {
// Set our counter to the amount we need to duplicate
infiniteCount = itemsToShow;
// Get our index (it won't change as we are always adding to the beginning of the array)
itemIndex = (itemsOffscreen - (infiniteCount * 2)) + ((itemCount - infiniteCount) - 1);
// Add items to the beginning of our array
for (i = itemsOffscreen; i > (itemsOffscreen - infiniteCount) ; i--) {
// Copy our item
var item = angular.copy(items[itemIndex]);
item.active = false;
// Add to the beginning of the array
items.unshift(item);
}
// Add items to the end of our array
for (i = 0; i < infiniteCount; i++) {
// Get our index
itemIndex = i + infiniteCount;
// Copy our item
var item = angular.copy(items[itemIndex]);
item.active = false;
// Add to the end of the array
items.push(item);
}
}
}
};
所以,问题在于表达。这对我来说似乎很复杂。 我相信它可以简化。 所以我想我只是想知道是否有人知道如何?
答案 0 :(得分:1)
该表达式简化为:
itemIndex = itemsOffscreen + itemCount - 3*infiniteCount - 1;
但原作可能会更好地传达表达的意图。
答案 1 :(得分:1)
使用基本的算术简化:
(itemsOffscreen - (infiniteCount * 2)) + ((itemCount - infiniteCount) - 1)
=
itemsOffScreen - infiniteCount * 2 + itemCount - infiniteCount - 1
=
itemsOffScreen + itemCount - infiniteCount * 3 - 1
无论如何,你应该选择最具可读性的版本。