2015-12-01 1 views
0

Через некоторое Googling и немного умственным я придумал этот небольшой скрипт для ленивых нагрузки мои изображения:Изображения Ленивый нагрузки

function elementInViewport(el) { 
    var rect = el.getBoundingClientRect(); 
    return (rect.top >= 0 && rect.left >= 0 && rect.top <= (window.innerHeight || document.documentElement.clientHeight)); 
} 
function lazyLoad() { 
    var els, backgroundImage; 
    els = document.getElementsByClassName('lazyLoad'); 
    for (var i = 0; i < els.length; i++) { 
     backgroundImage = els[i].dataset.bgimg; 
     if (elementInViewport(els[i])) { 
      els[i].style.backgroundImage = 'url('+backgroundImage+')'; 
     }; 
    }; 
}; 
lazyLoad(); 
window.addEventListener('scroll',lazyLoad); 

И в HTML:

<div class="lazyLoad" data-bgimg="<?php echo $image_url; ?>"></div> 

Я интересно, если это на самом деле работает, потому что кажется, что это так: стиль фонового изображения правильно применяется только тогда, когда элемент появляется в поле зрения, я проверял его через dev, но он делает это так быстро, что на самом деле кажется, что изображение уже загружено где-то, возможно, в память из-за данных-bgimg? Я также ctrl + shift + r перезагрузил страницу, чтобы не использовать кеш, но тот же результат: слишком быстро, чтобы быть реальным.

+0

помните, что onscroll может запускать сотни раз в секунду, и вы восстанавливаете даже загруженные изображения ... – dandavis

+0

Вы тестируете на localhost? Если вы это сделаете, загрузка будет очень быстрой. Прежде всего отключите кеш, когда инструменты dev открыты (для этого есть опция). Во-вторых, попробуйте использовать дросселирование сети, чтобы замедлить скорость загрузки. – Cristy

+0

спасибо @dandavis, не думал об этом. Я позже добавлю условие, которое проверяет, имеет ли элемент уже примененный bg img. И если я понял, что вы имеете в виду о событии onscroll, я всегда немного испугался его использования по той же причине, что и вы, но клиент попросил ленивую загрузку, и я хочу свести к минимуму использование плагинов и библиотек. – Nicola

ответ

0

Добавьте задержку к настройке стиля backgroundImage. Это позволит вам наблюдать за ленивой загрузкой.

0

Я бы предложил использовать микро-javascript-плагин. Например. очень легкий - justlazy.

У вас есть преимущество, что он работает, и вы получаете хорошо протестированный код. Возможно, вы можете изучить реализацию, потому что некоторые ваши функции/атрибуты (например, набор данных) не поддерживаются более старыми браузерами IE. Если вам нужны такие старые браузеры;)