Скроллинг внутреннего дива

359
17 января 2017, 22:45

Как получить координаты видимой части дива через jQuery ? А потом от этого отталкиваться и сролить блок внутри этого дива.

Answer 1

Вышли такие сложные вычисления.

  1. Вычисляем, больше ли это, чем 30%: Узнаём положение нижней границы (положение скролл + высота окна), отнимаем положение элемента от всего документа и всё это делим на высоту окна.
  2. Вычисляем положение скролла внутри div: (от положения скролла окна отнимаем число, при котором div выглядывает больше чем на 30%) делим это на (от высоты документа отнимаем два числа, при котором div выглядывает больше чем на 30%) прибавляем (к высоте окна прибавляем остальные 70%)

$(function() {  
  var posScroll = false; 
  $(window).scroll(function() { 
    var pct = ($(window).scrollTop() + $(window).height() - $('div').offset().top) / $(window).height(); 
    if(pct >= 0.3){ 
      if(posScroll == false){posScroll = $(window).scrollTop()}; 
      var pos = ($(window).scrollTop() - posScroll) / ($(document).height() - (posScroll * 2)) * ($('div').height() + $('div').offset().top - posScroll); 
      $('div').scrollTop(pos); 
    }; 
  }); 
});
body {height: 3000px;} 
div { 
  position: absolute; 
  width: 300px; 
  height: 300px; 
  border: 3px solid black; 
  overflow: auto; 
  top: 1350px; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div> 
  <ul> 
    <li>item 0</li> 
    <li>item 1</li> 
    <li>item 2</li> 
    <li>item 3</li> 
    <li>item 4</li> 
    <li>item 5</li> 
    <li>item 6</li> 
    <li>item 7</li> 
    <li>item 8</li> 
    <li>item 9</li> 
    <li>item 10</li> 
    <li>item 11</li> 
    <li>item 12</li> 
    <li>item 13</li> 
    <li>item 14</li> 
    <li>item 15</li> 
    <li>item 16</li> 
    <li>item 17</li> 
    <li>item 18</li> 
    <li>item 19</li> 
    <li>item 20</li> 
    <li>item 21</li> 
    <li>item 22</li> 
    <li>item 23</li> 
    <li>item 24</li> 
    <li>item 25</li> 
    <li>item 26</li> 
  </ul> 
</div>

В этих вычислениях чёрт ногу сломит. Главное понять логически, что должно отниматься и что прибавляться :)

READ ALSO
долгая инициализация UILabel

долгая инициализация UILabel

Существует простой код, который делает POST - запрос яндекса-переводчика APIПолучается ответ - переведенный текст

356
Пошаговая анимация

Пошаговая анимация

Нужно чтобы при щелчке внешний блок появлялся с помощью функции slideDown, и только после его появления внутренний абзац появлялся c помощью анимации

299
HTML: перебор произвольных DOM-элементов клавишей Tab

HTML: перебор произвольных DOM-элементов клавишей Tab

Допустим, я хочу чтобы чтобы на любые DOM-элементы (например, на <div>ы указанного класса) можно было наводиться клавишей Tab, как это можно делать...

334
Нужна помощь в построении массива меню WordPress

Нужна помощь в построении массива меню WordPress

У меня есть вот такая верстка:

269