2017-01-25 2 views
4

Как я могу проверить (с JQuery или ванили Js), которые загружаются все изображения на странице, и что они были предоставлены в их окончательный, полный рост и что их родительские элементы настроены на эту высоту?Как определить, когда все изображения будут загружены и элементы отображаются в их соответствующих высотах

Я реализует scrollspy функцию с помощью JQuery - то, что определяет, когда пользователь находится на странице, и подчеркивает свою позицию в нав, обновляя свою позицию, как они прокрутки. Чтобы это работало правильно, мне нужно знать offset.top каждого раздела на странице, на которой я хочу следить. Если я вычисляю offset.top слишком рано, прежде чем все изображения будут загружены и будут отображаться на их полной высоте, вычисление offset(). Top будет неверным. Я хочу, чтобы избежать смещения(). Верхний расчет слишком много раз.

Вещи я пытался что не отвечают моим требованиям:

$(document).ready() and $(window).onload() оба слишком рано, так как изображения не могут быть оказаны на полную высоту, поэтому делая секции не отображается на полную высоту.

imagesLoaded библиотека. такая же проблема, как и выше, не учитывает рендеринг изображений на полную высоту.

+0

Я предполагаю, что вы имеете в виду '$ (window) .on (" load "...' – epascarello

+0

Вы загружаете вещи динамически или все содержимое существует, когда страница запрашивается с сервера? – epascarello

+0

@epascarello Я использую [jQuery .load() event] (https://api.jquery.com/load-event/), который, я думаю, взаимозаменяем с тем, что вы говорите. Простите мой psuedocode, когда я писал оригинальный вопрос! – gregnemes

ответ

0

Основываясь на моем опыте, я думаю, что это не тривиально. window.onload может помочь, но это ненадежно, когда изображения загружаются динамически. Раньше я использовал какой-то хак, чтобы сделать его работоспособным. В основном, я использовал window.setInterval и проверял, действительно ли изображение доступно, просмотрев имущество naturalWidth (см .: https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement).

Вот пример реализации: https://jsfiddle.net/yu8zr20h/

0

Вы решаете эту проблему в неверном пути. Вам нужно сравнить текущее значение Y окна пользователя с Y-значением всех компонентов или, по крайней мере, контейнеров, содержащих разные значения nav.

Представьте себе это ваш HTML-код:

<div id="firstContainer"> 
    <!-- Some content --> 
</div> 

<div id="secondContainer"> 
    <!-- Some other content --> 
</div> 

Теперь вы можете проверить высоту относительно полной HTML-страницы с помощью document.gelElementBtId('element-id').offsetTop

и текущую высоту пользователя, используя scrollY

Дополнительную информацию можно получить по телефону JSFiddle.

+0

Я забыл добавить, что вам нужно пересчитать значение offsetTop каждый раз, когда вызывается функция проверки. Поэтому каждый раз, когда вы вызываете функцию проверки offsetTop значение является правильным для этого момента времени. – Titulum

+0

благодарит за ваш ответ!К сожалению, я пытаюсь избежать этой конкретной реализации, которая требует пересчета значения offsetTop каждый раз, когда функция вызывается, по соображениям производительности. Вычисление offsetTop вызывает перерисовку этого элемента (если не всю страницу), и я уже выполняю другие операции с интенсивной графикой при прокрутке. – gregnemes

+0

Я этого не знал! Не могли бы вы указать мне больше информации об этом? – Titulum