我已经构建了一个简单的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>
答案 0 :(得分:1)
是的,一个整数除法就足够了:
var testFunc = function( n ) {
n = n - 1;
return Math.floor(n / 6) + n
};
答案 1 :(得分:0)
意识到我们在每个幻灯片元素上都有两个索引,因此我可以简单地选择使用URL索引并从DOM获取真正的幻灯片索引。或许还要考虑一个有趣的问题!?