Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Выбор текущего (при прокрутке) элемента (https://javascript.ru/forum/events/44058-vybor-tekushhego-pri-prokrutke-ehlementa.html)

slon_js 04.01.2014 17:58

Выбор текущего (при прокрутке) элемента
 
Добрый день!

Делаю онлайн-читалку книги. Застрял на функции добавления закладки.
Идея такова: на текущем положении полосы прокрутки выбрать элемент и его запомнить.

Вот с выбором элемента, который сейчас на экране и проблема...

Просьба направить, у кого есть мысли?

Rise 04.01.2014 18:04

Какой элемент? Запоминай скролл от верха да и всё...

danik.js 04.01.2014 18:06

Если элементы разной высоты то только поочередным опросом element.getBoundingClientRect() и проверкой входит ли его rect в видимую область (viewport).
Если элементы одинаковые по высоте, то все сводится к простой арифметике.

slon_js 04.01.2014 18:48

Цитата:

Сообщение от Rise (Сообщение 290562)
Какой элемент? Запоминай скролл от верха да и всё...

Скролл всегда разный, так как юзер мог поменять размер шрифта.

slon_js 04.01.2014 18:49

Цитата:

Сообщение от danik.js (Сообщение 290563)
Если элементы разной высоты то только поочередным опросом element.getBoundingClientRect() и проверкой входит ли его rect в видимую область (viewport).
Если элементы одинаковые по высоте, то все сводится к простой арифметике.

Спасибо огромное! Натолкнули куда нужно! :)
Еще немного гугла, и получилось вот что:

function inWindow(s){
var scrollLeft = $(window).scrollLeft();
var windowWidth = $(window).width();
var currentEls = $(s);
var result = [];
currentEls.each(function(){
var el = $(this);
var offset = el.offset();
if(scrollLeft <= offset.left && (el.width() + offset.left) < (scrollLeft + windowWidth))
result.push(this);
});
return $(result);
}


Часовой пояс GMT +3, время: 04:56.