Swiper + 图片懒加载

最近写网站有遇到图片懒加载的问题,在网上搜的大概有以下几种方法:

  • 纯js,给图片加个class名(相当于标识),判断是否出现在当前滚屏的范围内
  • lazysizes插件(在网上搜的是这个对seo更好)
  • lazyload(js/jquery插件两种)
  • ……

因为主要是Swiper插件里有很多图,所以滚屏加载基本没有什么意义。

其实Swiper(3.x)的API中有相关的方法,不过如果直接搜懒加载/延迟加载,没搜索结果。好了不废话了,搜lazyLoading后会出来相关的参数和函数。

代码如下:

<!-- Swiper -->
<div class="swiper-container">
  <div class="swiper-wrapper">
    <div class="swiper-slide">
      <img class="swiper-lazy" data-src="...">
      <!-- swiper-lazy-preloader 这个就是转圈的那个“进度” -->
      <div class="swiper-lazy-preloader"></div>
    </div>
    <div class="swiper-slide">
      <img class="swiper-lazy" data-src="...">
      <div class="swiper-lazy-preloader"></div>
    </div>
    <!-- ... 只写了两个示例,多的话用js拼接字符串就好 -->
</div>
// 初始化swiper
var swiper = new Swiper('.swiper-container', {
    nextButton: '...',
    prevButton: '...',
    slidesPerView : '...',
    spaceBetween : ...,
    /* 
     * 设置为true -> 开启图片延迟加载
     * <img>的src属性改为data-src,class增加一个'swiper-lazy'
     * 如果直接用div,设置background,对应的改为data-background即可
     */
    lazyLoading: true,
    lazyLoadingInPrevNext : true, 
    // 这个为true时,↓才有用
    lazyLoadingInPrevNextAmount: 4 // 设置在延迟加载图片时提前多少个slide
});
1. HTML占位符懒加载:使用占位符图片来代替真实图片,等到用户滚动到该图片位置时,再用 JavaScript 替换占位符图片为真实图片。 示例代码: ```html <img src="placeholder.jpg" data-src="real-image.jpg" class="lazyload" /> ``` ```javascript document.addEventListener("DOMContentLoaded", function() { var lazyloadImages = document.querySelectorAll(".lazyload"); var lazyloadThrottleTimeout; function lazyload () { if(lazyloadThrottleTimeout) { clearTimeout(lazyloadThrottleTimeout); } lazyloadThrottleTimeout = setTimeout(function() { var scrollTop = window.pageYOffset; lazyloadImages.forEach(function(img) { if(img.offsetTop < (window.innerHeight + scrollTop)) { img.src = img.dataset.src; img.classList.remove('lazyload'); } }); if(lazyloadImages.length == 0) { document.removeEventListener("scroll", lazyload); window.removeEventListener("resize", lazyload); window.removeEventListener("orientationChange", lazyload); } }, 20); } document.addEventListener("scroll", lazyload); window.addEventListener("resize", lazyload); window.addEventListener("orientationChange", lazyload); }); ``` 2. Lazyload懒加载:使用第三方库 lazyload.js 实现图片懒加载。 示例代码: ```html <img src="placeholder.jpg" data-src="real-image.jpg" class="lazyload" /> ``` ```javascript <script src="lazyload.min.js"></script> <script> var lazyLoadInstance = new LazyLoad({ elements_selector: ".lazyload" }); </script> ``` 3. Swiper轮播懒加载:使用 Swiper 轮播库的 lazyload 参数实现图片懒加载。 示例代码: ```html <div class="swiper-container"> <div class="swiper-wrapper"> <div class="swiper-slide"> <img data-src="real-image1.jpg" class="swiper-lazy" /> <div class="swiper-lazy-preloader"></div> </div> <div class="swiper-slide"> <img data-src="real-image2.jpg" class="swiper-lazy" /> <div class="swiper-lazy-preloader"></div> </div> <div class="swiper-slide"> <img data-src="real-image3.jpg" class="swiper-lazy" /> <div class="swiper-lazy-preloader"></div> </div> </div> </div> ``` ```javascript var mySwiper = new Swiper('.swiper-container', { lazy: true, pagination: { el: '.swiper-pagination', }, }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值