我已经安装了一个简单的JS库来实现“深度链接”,允许一个具有像#slide-3这样的散列的URL自动加载第三个幻灯片活动库。画廊里每七张幻灯片就有一条广告。这些广告幻灯片不被跟踪,因此散列变成#slide-x,然后是图像幻灯片,即#slide-7。]
我创建了一个帮助函数,将幻灯片号从散列转换为0索引的幻灯片编号,每七张幻灯片都考虑到这些广告,但我很好奇是否有人能想到一种更优雅的方法来计算适当的索引,因为我的实现在我看来太复杂了:
var slideNum = parseInt( window.location.hash.replace( '#slide-', '' ), 10 );
slideNum += Math.floor( ( slideNum + Math.floor( slideNum / 7 ) ) / 7 ) - 1;
return slideNum;这是可行的,但有两层楼似乎太过分了。一定有更简单的方法!但是,我不确定控制地板操作的代数规则,所以我不知道如何扩展/简化自己。任何帮助都将不胜感激。
我已经包含了一个基本的JS小提琴,它输出了前36张幻灯片的值,并将其与正确的值进行了比较。请随时使用您的解决方案更改testFunc,并查看是否有效!
var nums = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36];
var correct = [0,1,2,3,4,5,7,8,9,10,11,12,14,15,16,17,18,19,21,22,23,24,25,26,28,29,30,31,32,33,35,36,37,38,39,40];
var testFunc = function( n ) {
var offset = ( n + Math.floor( n / 7 ) ) / 7;
return n + Math.floor( offset ) - 1;
};
document.getElementById('text').innerHTML += 'Input Expected Output<br/>';
for( var i = 0; i < nums.length; i++ ) {
document.getElementById('text').innerHTML += nums[i] + ' ' + correct[i] + ' ' + testFunc( nums[i] ) + '<br/>';
if ( ( i + 1 ) % 6 === 0 ) {
document.getElementById('text').innerHTML += 'AD<br/>';
}
}<div id="text"></div>
发布于 2015-09-17 18:52:59
是的,一个整数除法就足够了:
var testFunc = function( n ) {
n = n - 1;
return Math.floor(n / 6) + n
};发布于 2015-09-17 18:17:37
意识到我们在每个幻灯片元素上都有两个索引,所以我可以简单地使用URL索引进行选择,并从DOM中获得真正的幻灯片索引。也许还是个有趣的问题!?
https://stackoverflow.com/questions/32637097
复制相似问题