Welcome to IOPWiki, Commander.
With the release of the new game, we encourage contributions to topics related to Girls' Frontline 2. Learn how to contribute, read the maintenance guide, and join our Discord server to discuss major changes.
If you or someone you know can help deciphering the game files, contact our administrator.

MediaWiki:Gadget-Common.js: Difference between revisions

Welcome to IOP Wiki. This website is maintained by the Girls' Frontline community and is free to edit by anyone.
Jump to navigation Jump to search
m rootMargin must be set in px or %
m Proper attribute naming convention
 
Line 25: Line 25:
        if (entry.isIntersecting) {
        if (entry.isIntersecting) {
          var lazyBg = entry.target;
          var lazyBg = entry.target;
          lazyBg.style.backgroundImage = "url('" + lazyBg.dataset['data-bg-lazy'] + "')";
          lazyBg.style.backgroundImage = "url('" + lazyBg.dataset.bgLazy + "')";
          lazyBg.removeAttribute("data-bg-lazy");
          lazyBg.removeAttribute("data-bg-lazy");
          lazyBgObserver.unobserve(lazyBg);
          lazyBgObserver.unobserve(lazyBg);

Latest revision as of 16:54, 23 July 2024

/** Common JavaScript functions used over all skins and platforms. */

RLQ.push(['jquery', function () {
	$(document).ready(function() {
	  var lazyImages = [].slice.call(document.querySelectorAll(".lazy-img"));
	  console.log("Images to lazy load:", lazyImages.length);
	  var lazyBackgrounds = [].slice.call(document.querySelectorAll("[data-bg-lazy]"));
	  console.log("Backgrounds to lazy load:", lazyBackgrounds.length);
	  
	  if ("IntersectionObserver" in window) {
	  	var imageIntersectionHandler = function(entries, observer) {
	      entries.forEach(function(entry) {
	        if (entry.isIntersecting) {
	          var lazyImage = entry.target;
	          if (lazyImage.dataset.src) { lazyImage.src = lazyImage.dataset.src; }
	          if (lazyImage.dataset.srcset) { lazyImage.srcset = lazyImage.dataset.srcset; }
	          lazyImage.classList.remove("lazy-img");
	          lazyImageObserver.unobserve(lazyImage);
	        }
	      });
	    };
	    
	    var bgIntersectionHandler = function(entries, observer) {
	      entries.forEach(function(entry) {
	        if (entry.isIntersecting) {
	          var lazyBg = entry.target;
	          lazyBg.style.backgroundImage = "url('" + lazyBg.dataset.bgLazy + "')";
	          lazyBg.removeAttribute("data-bg-lazy");
	          lazyBgObserver.unobserve(lazyBg);
	        }
	      });
	    };
	    
	    var lazyImageObserver = new IntersectionObserver(imageIntersectionHandler, { rootMargin: "100px" });
	    lazyImages.forEach(function(lazyImage) {
	      lazyImageObserver.observe(lazyImage);
	    });
	    
	    var lazyBgObserver = new IntersectionObserver(bgIntersectionHandler, { rootMargin: "100px" });
	    lazyBackgrounds.forEach(function(lazyBg) {
	      lazyBgObserver.observe(lazyBg);
	    });
	  } else {
	    // Possibly fall back to event handlers here
	    console.log("Lazy Loading seems to have failed.");
	  }
	});
}]);