Bootstrap5 carousel 图片懒加载的实现

在Bootstrap carousel 中实现图片延迟加载的基本思路是:

  • 首个轮播条目中的图片元素,正常设置图片的 src 属性,不做懒加载处理;
  • 对其他轮播条目中的图片元素,将 src 属性留空,将源文件信息放置在一个自定义的属性中,以便条目轮播是读取处理;
  • 在轮播事件中,为当前轮播的图片元素加载图片。

  <section id="hero">
    <div class="hero-container">
      <div id="heroCarousel" class="carousel slide carousel-fade carousel-lazy" data-bs-ride="carousel"
        data-bs-interval="50000">
        <ol class="carousel-indicators" id="hero-carousel-indicators"></ol>
        <div class="carousel-inner" role="listbox">
          <!-- Slide 1 -->
          <div class="carousel-item active" style="background-image: url('assets/img/slide/slide-1.jpg');">
            <div class="carousel-container">
              <div class="carousel-content container">
                <h2 class="animate__animated animate__fadeInDown">新能源利用与电气控制<br />国家级实验教学示范中心</h2>
                <p class="animate__animated animate__fadeInUp">探索 . 创新 . 引领 . 卓越</p>
                <!-- <a href="#about" class="btn-get-started animate__animated animate__fadeInUp scrollto">Read More</a> -->
              </div>
            </div>
          </div>
          <!-- Slide 2 -->
          <div class="carousel-item" data-src="url('assets/img/slide/slide-2.jpg')"
            style="background-image: url('assets/img/blank.png');">
            <div class="carousel-container">
              <div class="carousel-content container">
                <h2 class="animate__animated animate__fadeInDown">教学获奖成果</h2>
                <p class="animate__animated animate__fadeInUp">Ut velit est quam dolor </p>
              </div>
            </div>
          </div>
        </div>
        <a class="carousel-control-prev" href="#heroCarousel" role="button" data-bs-slide="prev">
          <span class="carousel-control-prev-icon bi bi-chevron-left" aria-hidden="true"></span>
        </a>
        <a class="carousel-control-next" href="#heroCarousel" role="button" data-bs-slide="next">
          <span class="carousel-control-next-icon bi bi-chevron-right" aria-hidden="true"></span>
        </a>
      </div>
    </div>
  </section>

上面的 html 中,首条 carousel-item 直接将图片路径赋予背景样式 background-image,其他的 carousel-item 在将图片信息放置到 data-src 属性中,同时将一个空白图片放置到背景样式,用以占位。注意,为后面的处理方便,data-src 属性的图片信息格式为 url( '...' ) 。

下面再实现条目的懒加载 :

window.addEventListener("load", (event) => {
  // Carousel image lazy 加载 
  var myCarousel = document.getElementById("heroCarousel");
  myCarousel.addEventListener('slide.bs.carousel', function (event) {
    var relatedTarget = event.relatedTarget;
    var data_src = relatedTarget.getAttribute("data-src");
    if (data_src) {
      console.log(data_src);
      relatedTarget.style.backgroundImage = data_src;
      relatedTarget.removeAttribute("data-src");
    } 
  })
});

Bootstrap5 不再基于 jquey , 所以上面代码也使用原生 JS 实现。

先通过 id , 取得 Carousel 元素,然后监听轮播事件 slide.bs.carousel 。事件对象有一个 relatedTarget 属性,对应当前的轮播元素。读取此元素的 data-src 属性,再根据它的取值结果赋予背景样式,并移除 data-src 属性。

参考文章

Lazy carousel in bootstrap

Bootstrap 5 — Carousel Customization

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在Bootstrap 4中实现轮播,可以使用Carousel组件。CarouselBootstrap的一个内置组件,可以方便地创建一个可滑动的轮播。下面是一个简单的Carousel示例: ```html <div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel"> <ol class="carousel-indicators"> <li data-target="#carouselExampleIndicators" data-slide-to="0" class="active"></li> <li data-target="#carouselExampleIndicators" data-slide-to="1"></li> <li data-target="#carouselExampleIndicators" data-slide-to="2"></li> </ol> <div class="carousel-inner"> <div class="carousel-item active"> <img class="d-block w-100" src="img1.jpg" alt="First slide"> </div> <div class="carousel-item"> <img class="d-block w-100" src="img2.jpg" alt="Second slide"> </div> <div class="carousel-item"> <img class="d-block w-100" src="img3.jpg" alt="Third slide"> </div> </div> <a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev"> <span class="carousel-control-prev-icon" aria-hidden="true"></span> <span class="sr-only">Previous</span> </a> <a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next"> <span class="carousel-control-next-icon" aria-hidden="true"></span> <span class="sr-only">Next</span> </a> </div> ``` 在这个示例中,我们创建了一个包含三个轮播项的Carousel,并指定了一个包含三个指示器的ol元素。每个轮播项都是一个包含一个图像的div元素。我们还添加了两个控制按钮,用于在Carousel中切换轮播项。 要使用Carousel组件,需要包含Bootstrap的JavaScript文件,并初始化Carousel。可以通过添加以下代码来初始化Carousel: ```javascript $('.carousel').carousel() ``` 这将在文档加载时自动调用,并在Carousel中启用所有必需的交互。 请注意,此示例仅包含必需的代码。您可以根据需要自定义Carousel,例如更改指示器样式或添加其他控件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ForestK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值