所以,我已经建造了一个由10个项目组成的无限旋转旋转木马:
[one, two, three, four, five, six, seven, eight, nine, ten]
列表一次包装并显示五个项目。该列表以“活动”项为中心,默认情况下从1开始。
因此默认视图为:
[nine, ten, one, two, three]
列表可以向任一方向滚动。如果默认视图向右滚动,则新视图将为:
[ten, one, two, three, four]
如果默认视图向左滚动,则新视图将为:
[eight, nine, ten, one, two]
等等。
我需要一种定位视图最外边缘的两个元素的方法。对于默认视图,它将是nine
和three
。但是因为元素一直包裹着,所以需要的条件让我感到困惑。
将每个元素视为一个类,它将在内部确定其“edgy-ness”。
每个元素都可用:
1. own index (eg 1)
2. active slide (eg 3)
3. number of slides (eg 10)
鉴于这些数字,必须能够确定一个元素是否在边缘,对吗?怎么办呢?
答案 0 :(得分:2)
好的,所以活动幻灯片是中心的。我们打电话给var active = 1
;
左侧幻灯片是active - 2
,右侧幻灯片是active + 2
,当然除了它包装的事实。
你可以使用'模数'帮助。右侧幻灯片为var right (active + 2) % 10
,因此当有效格为9时,即11%10为1,这是正确的,[7,8,9,10,1]
左侧,我会var left = active - 2; if (left < 1) left = 10-left
编辑&gt;&gt;
对于左侧,我将继续使用%
模数运算符,如下所示:var left = ((active - 2) + 10) % 10
答案 1 :(得分:2)
按n
幻灯片的数量,k
表示您可以一次查看的数字幻灯片以及i
有效幻灯片。在你的情况下:
n=10, k=5
然后:
right = (i + k/2 + n) % n
left = (i - k/2 + n) % n
答案 2 :(得分:0)
为什么不通过改变数组来实际执行旋转?
这是一个小型演示,其中的项目只是字符串:
var data = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten'];
function rotate(data, output, steps) {
// Make steps a positive value
steps = (steps + data.length) % data.length;
// perform the rotation on the array
data.push(...data.splice(0, steps));
// Display the first 5 values from the array
output.textContent = JSON.stringify(data.slice(0, 5));
}
left.onclick = rotate.bind(null, data, output, -1);
right.onclick = rotate.bind(null, data, output, 1);
// Output initial situation
output.textContent = JSON.stringify(data.slice(0, 5));
&#13;
<button id="left"><</button><button id="right">></button>
<pre id="output"></pre>
&#13;
使用这种工作方式,活动值始终为索引2.
答案 3 :(得分:0)
作为初步思考,假设你只能访问你提到的3个数字,我只想添加一些if语句来检查元素是否在边缘。
//define the left and right edge -----------
int right_edge = element.active_slide + 2; //+2 only if you show 5 slides
int left_edge = element.active_slide - 2; //-2 only if you show 5 slides
if( right_edge > element.number_of_slides ){
right_edge = right_edge - element.number_of_slides;
}
if( left_edge == 0 ){
left_edge = element.number_of_slides; //=10
}
if( left_edge < 0 ){
left_edge = element.number_of_slides + left_edge;
}
// check if current element is one of the edges
if( ( element.own_index == left.edge ) || ( element.own_index == right_edge ) ){
//the element is an edge, do whatever is needed
}
else{
//the element is not an edge
}
当然这只是一个快速思考,向您展示可以做到的一种方式。它也不是以最合适的形式编写的,例如使用模数可以为你提供更好的服务