2015-09-17 5 views
1

Я подстроил простую JS-галерею, чтобы реализовать «глубокую привязку», позволяющую URL-адрес с хешем, например #slide-3, автоматически загружать галерею с активным третьим слайдом. В галерее есть каждый седьмой слайд. Эти рекламные слайды не отслеживаются, поэтому хэш становится #slide-x, за которым следует слайд изображения, то есть #slide-7.]Расчет индекса скольжения после смещения объявления

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 во внимание эти объявления каждый седьмой слайд, но было интересно, если кто-то мог придумать более изящный способ, чтобы вычислить правильный индекс, как моя реализация выглядит слишком сложно, на мой взгляд:

var slideNum = parseInt(window.location.hash.replace('#slide-', ''), 10); 
slideNum += Math.floor((slideNum + Math.floor(slideNum/7))/7) - 1; 
return slideNum; 

Это работает, но имеет два этажа, кажется подобный overkill. Должен быть более простой способ! Я не уверен в алгебраических правилах, которые управляют работой пола, но я не могу понять, как расширить/упростить себя. Любая помощь будет оценена по достоинству.

Я включил основную скрипту 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] + '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + correct[i] + '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + testFunc(nums[i]) + '<br/>'; 
 
    if ((i + 1) % 6 === 0) { 
 
     document.getElementById('text').innerHTML += 'AD<br/>'; 
 
    } 
 
}
<div id="text"></div>

ответ

1

Да, один целочисленное деление достаточно:

var testFunc = function(n) { 
    n = n - 1; 
    return Math.floor(n/6) + n 
}; 
+0

D'о, конечно! По какой-то причине массивный мозговой пердит. Меня отбросило 7 или 6 штук. Благодаря! – Primus202

0

Реализованные мы оба индекса по каждому элементу слайда, так что я могу просто выбрать с помощью индекса URL и получить истинный индекс слайда из DOM. Еще забавная проблема, о которой можно подумать !?

Смежные вопросы