Как сделать TimeLine с подсветкой?

631
29 декабря 2016, 09:40

Есть таймлайн длинный, и интересует функция которая при скролле вверх или в низ подсвечивала элемент выбранной позиции. Ближе к наглядности в данном виде, что бы в зависимости от позиции в шапке указывалась категория выделенного элемента.

header { 
  padding: 1em; 
  width: 100%; 
  background: rgb(102,102,102); 
  position: fixed; 
} 
 
select { 
  border: 1px solid rgba(0,0,0,0.2); 
  background: rgba(0,0,0,0.1); 
  color: rgb(255,255,255); 
  padding: .5em 3.5em .5em 1em; 
  -webkit-border-radius: .3em; 
  -moz-border-radius: .3em; 
  border-radius: .3em; 
} 
 
table { 
  position: absolute; 
  width: 98%; 
  padding: .1em; 
  margin-top: 4em; 
  z-index: -1; 
} 
 
th { 
  padding: .5em; 
  background: rgba(206,206,206,0.9); 
} 
 
td { 
  width: 100%; 
  padding: 20em 2em; 
  background: rgba(206,206,206,0.3); 
}
<header> 
  <select> 
    <option>Лето</option> 
    <option>Осень</option> 
    <option>Зима</option> 
    <option>Весна</option> 
  </select> 
</header> 
<table><tr> 
    <th>Лето</th> 
  </tr> 
  <tr> 
    <td>Июнь</td> 
  </tr> 
  <tr> 
    <td>Июль</td> 
  </tr> 
  <tr> 
    <td>Август</td> 
  </tr> 
  <tr> 
    <th>Осень</th> 
  </tr> 
  <tr> 
    <td>Сентябрь</td> 
  </tr> 
  <tr> 
    <td>Октябрь</td> 
  </tr> 
  <tr> 
    <td>Ноябрь</td> 
  </tr> 
  <tr> 
    <th>Зима</th> 
  </tr> 
  <tr> 
    <td>Декабрь</td> 
  </tr> 
  <tr> 
    <td>Январь</td> 
  </tr> 
  <tr> 
    <td>Февраль</td> 
  </tr> 
  <tr> 
    <th>Весна</th> 
  </tr> 
  <tr> 
    <td>Март</td> 
  </tr> 
  <tr> 
    <td>Апрель</td> 
  </tr> 
  <tr> 
    <td>Май</td> 
  </tr></table>

Answer 1

См. событие прокрутки окна - window.onscroll и свойство window.pageYOffset. Подробнее, например, тут: https://learn.javascript.ru/onscroll

Координаты объекта: для DOM-элементов можно узнать их позицию на странице через функцию getBoundingClientRect(), она возвращает размеры элемента и отступ от краёв viewport'а.

Соответственно, вам надо в обработчике события скроллинга сверять window.pageYOffset и отступ каждого из DOM-объектов. Если эти элементы не изменяются на странице, можно их положение выписать заранее в массив, и в событии сверяться с ним, но в этом случае надо список пересчитывать при изменении размеров окна (window.onresize).

READ ALSO
Прыгающие мячи с помощью canvas

Прыгающие мячи с помощью canvas

Как увеличить количество мячей циклом? Я пытался, у меня не получается, сейчас я их размножаю вручную

702
HTML5 Тег &lt;video&gt; JavaScript

HTML5 Тег <video> JavaScript

привет есть разметка

613
Рефакторинг кода JS

Рефакторинг кода JS

Делаю динамический поиск, те

531