广告偏移后计算幻灯片索引
Calculating slide index after ad offset
我已经装配了一个简单的 JS 画廊来实现 "deep linking" 允许带有像 #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;
这行得通,但有两层楼似乎有点过头了。必须有更简单的方法!然而,我不确定控制场内操作的代数规则,所以我不知道如何 expand/simplify 自己。任何帮助将不胜感激。
我包含了一个基本的 JS fiddle,它输出前 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>
意识到我们在每个幻灯片元素上都有两个索引,所以我可以简单地 select 使用 URL 索引并从 DOM 获取真正的幻灯片索引。也许还是一个值得思考的有趣问题!?
是的,一个整数除法就够了:
var testFunc = function( n ) {
n = n - 1;
return Math.floor(n / 6) + n
};
我已经装配了一个简单的 JS 画廊来实现 "deep linking" 允许带有像 #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;
这行得通,但有两层楼似乎有点过头了。必须有更简单的方法!然而,我不确定控制场内操作的代数规则,所以我不知道如何 expand/simplify 自己。任何帮助将不胜感激。
我包含了一个基本的 JS fiddle,它输出前 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>
意识到我们在每个幻灯片元素上都有两个索引,所以我可以简单地 select 使用 URL 索引并从 DOM 获取真正的幻灯片索引。也许还是一个值得思考的有趣问题!?
是的,一个整数除法就够了:
var testFunc = function( n ) {
n = n - 1;
return Math.floor(n / 6) + n
};