2013-04-24 57 views
0

我们的产品中实现了通用滑块功能。我们需要从URL读取项目索引值并滚动滑块以显示活动项目。用逻辑条件发现问题的关键在于哪个逻辑集合

以下代码逻辑用于显示活动缩略图,为此我需要将DIV设置为负左侧的动画。首先,我们得到总的缩略图项目,然后从URL哈希值(即#幻灯片= 7)得到活动项目的索引。一套至少包含5件物品。需要将滑块宽度乘以ActiveItemIndex所在的页面设置值。

JavaScript代码 -

showActiveThumbnailOnPageLoad : function() { 
    var _this = this, 
     totalThumbnails = $('.slidetabs a').length, 
     activeItem = window.location.href.split('=')[1], 
     scrollAmount; 

    if(activeItem > 5 && activeItem <= 10) { 
     scrollAmount = '-=' + 772 
    } else if(activeItem > 10 && activeItem <= 15) { 
     scrollAmount = '-=' + 772 * 2 
    } else if(activeItem > 15 && activeItem <= 20) { 
     scrollAmount = '-=' + 772 * 3 
    } 

    $('.slidetabs').stop().animate({ 
     left : scrollAmount 
    }); 
} 

截至目前,硬编码条件用于其高达20个项目支持。任何帮助使此代码支持n个项目。我的意思是说没有硬代码值的通用代码。

在此先感谢。

回答

2

你可以试试:

scrollAmount = '-=' + 772 * ~~((activeItem - 1)/5); 
+0

今天学到了一个新的方面。我不知道双位概念。非常感谢塞缪尔。 – 2013-04-24 10:48:24

+0

@Lokesh很好,如果你学到了东西,同时解决了你的问题! :) – 2013-04-24 10:49:36

0

试试这个:

scrollAmount = '-=' + 772 * ((activeItem - 1)/5); 

编辑(基于this commentthis answer

而且圆师:

scrollAmount = '-=' + 772 * (((activeItem - 1)/5) >> 0); 

或者:

scrollAmount = '-=' + 772 * (~~((activeItem - 1)/5)); 
+2

注意:你必须圆你的师! – 2013-04-24 10:28:34

+0

@SamuelCaillerie:你说得对。我认为activeItem被认为是整数,除法结果也是一个整数。 因此,基于这样的回答太: http://stackoverflow.com/a/4228528/504368 我应该使用的两个选项之一: VAR NUM = ~~(A/B); var num =(a/b)>> 0; 我会适当地更新我的答案。 – 2013-04-24 10:41:27

1

使用此:

scrollAmount = '-=' + 772 * Math.floor((((activeItem > 0) ? activeItem : 1) - 1)/5); 
+0

如果'activeItem === 0'('Math.floor(-0.2)'给出'-1')它不起作用。 – 2013-04-24 10:35:01

+0

是的,你是对的,但我认为,根据他的第一个条件,在页面中必须有至少5个(+ ve no。)activeItem。但我根据你的情况修改它。 – 2013-04-24 10:38:58

+0

因为存在这种情况,所以'activeItem'可能小于5,然后可能等于0 ...但是如果您想避免这种情况,您可以读取OP的第一个条件,或者使用双位补码。 – 2013-04-24 10:42:34