UNPKG

vanilla-lazyload

Version:

A fast, lightweight script to load images as they enter the viewport. SEO friendly, it supports responsive images (both srcset + sizes and picture) and progressive JPEG

52 lines (42 loc) 1.81 kB
import { addClass, removeClass } from "./lazyload.class"; import { callbackIfSet } from "./lazyload.callback"; const genericLoadEventName = "load"; const mediaLoadEventName = "loadeddata"; const errorEventName = "error"; const addEventListener = (element, eventName, handler) => { element.addEventListener(eventName, handler); }; const removeEventListener = (element, eventName, handler) => { element.removeEventListener(eventName, handler); }; const addAllEventListeners = (element, loadHandler, errorHandler) => { addEventListener(element, genericLoadEventName, loadHandler); addEventListener(element, mediaLoadEventName, loadHandler); addEventListener(element, errorEventName, errorHandler); }; const removeAllEventListeners = (element, loadHandler, errorHandler) => { removeEventListener(element, genericLoadEventName, loadHandler); removeEventListener(element, mediaLoadEventName, loadHandler); removeEventListener(element, errorEventName, errorHandler); }; const eventHandler = function(event, success, instance) { var settings = instance._settings; const className = success ? settings.class_loaded : settings.class_error; const callback = success ? settings.callback_load : settings.callback_error; const element = event.target; removeClass(element, settings.class_loading); addClass(element, className); callbackIfSet(callback, element); instance._updateLoadingCount(-1); }; export const addOneShotEventListeners = (element, instance) => { const loadHandler = event => { eventHandler(event, true, instance); removeAllEventListeners(element, loadHandler, errorHandler); }; const errorHandler = event => { eventHandler(event, false, instance); removeAllEventListeners(element, loadHandler, errorHandler); }; addAllEventListeners(element, loadHandler, errorHandler); };