Swiper实现轮播效果

swiper官网:https://3.swiper.com.cn/

html 复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <link
      rel="stylesheet"
      href="https://unpkg.com/swiper@8/swiper-bundle.min.css"
    />
    <script src="https://unpkg.com/swiper@8/swiper-bundle.min.js"></script>
  </head>
  <style>
    .swiper {
      width: 620px;
      height: 720px;
    }

    /* 左右箭头 */
    .swiper-button-prev:after {
      display: none;
    }
    .swiper-button-prev {
      background: url("./image/left-1.png");
      background-size: contain;
      background-repeat: no-repeat;
      width: 110px;
      height: 120px;
      left: 5px;
    }
    .swiper-button-next:after {
      display: none;
    }
    .swiper-button-next {
      background: url("./image/right-1.png");
      background-size: contain;
      background-repeat: no-repeat;
      width: 110px;
      height: 120px;
      right: 0px;
      z-index: 999;
      position: absolute;
    }

    /* 图片显示 */
    .swiper-slide {
      display: flex;
      justify-content: center;
      align-items: center;
    }
    .swiper-slide img {
      width: 300px;
    }
    .swiper-slide-active img {
      position: absolute;
      width: 395px;
      transition: width 0.5s;
    }
    .swiper-slide-next img {
      position: absolute;
      left: -230px;
    }
    .swiper-slide-prev img {
      position: absolute;
      right: -230px;
    }
    .swiper-slide-active {
      z-index: 999;
    }
    .swiper-slide-next {
      z-index: 888;
    }
    .swiper-slide-prev {
      z-index: 888;
    }
    .bullet-style {
      width: 0px;
      height: 0px;
      border: 6px solid black;
      background-color: black;
      background-clip: padding-box;
      transform: rotateZ(45deg);
      display: inline-block;
      margin: 0 8px;
      cursor: pointer;
    }
    .bullet-style:hover {
      border-color: gray;
      background-color: gray;
    }
    .bullet-style-active {
      border-style: double;
      border-width: 8px;
    }
  </style>
  <body>
    <div class="swiper">
      <div class="swiper-wrapper">
        <div class="swiper-slide">
          <img src="./image/world-3-3-1.png" />
        </div>
        <div class="swiper-slide">
          <img src="./image/world-4-4-1.png" />
        </div>
        <div class="swiper-slide">
          <img src="./image/world-2-2-1.png" />
        </div>
      </div>
      <!-- 分页器 -->
      <div class="swiper-pagination"></div>

      <!--前进后退按钮 -->
      <div class="swiper-button-prev"></div>
      <div class="swiper-button-next"></div>
    </div>
    <!-- <div class="swiper-button-next swiper-button-black"></div> -->
    <script type="module">
      import Swiper from "https://unpkg.com/swiper@8/swiper-bundle.esm.browser.min.js";
      let addBullentsEvent = () => {};
      const mySwiper = new Swiper(".swiper", {
        loop: true, // 循环模式选项
        // 分页器
        pagination: {
          el: ".swiper-pagination",
          clickable: true,
          // 自定义分页其样式
          type: "custom",
          renderCustom: function (swiper, current, total) {
            let renderHTML = "";
            for (let i = 0; i < total; i++) {
              if (i + 1 == current) {
                renderHTML += `<div class="bullet-style bullet-style-active"></div>`;
              } else {
                renderHTML += `<div class="bullet-style"></div>`;
              }
            }
            return renderHTML;
          },
        },
        // 前进后退按钮
        navigation: {
          nextEl: ".swiper-button-next",
          prevEl: ".swiper-button-prev",
        },

        slidesPerView: 2, //设置slider容器能够同时显示的slides数量
        spaceBetween: 80, //slide之间的距离(单位px)
        centeredSlides: true, //设定为true时,active slide会居中,而不是默认状态下的居左。
        observer: true, //修改swiper自己或子元素时,重新加载
        observeParents: true, //修改swiper的父元素时,重新加载
        centerInsufficientSlides: true, //当slides 的总数小于 slidesPerView 时,slides居中。
        autoplay: {
          delay: 3000, //3秒切换一次
        },

        // 事件

        on: {
          paginationRender: function () {
            console.log("分页器渲染了");
            // 重新添加事件
            addBullentsEvent();
          },
          autoplayStart: function () {
            console.log("开始自定切换");
          },
          autoplayStop: function () {
            console.log("关闭自动切换");
          },
        },
      });

      addBullentsEvent = () => {
        const bullents = document.getElementsByClassName("bullet-style");
        for (let i = 0; i < bullents.length; i++) {
          console.log("obj.onclick", bullents[i].onclick);
          bullents[i].removeEventListener("click", () => {});
          bullents[i].addEventListener("click", function () {
            mySwiper.slideTo(i + 2); //切换到对应的slide,速度为1秒
            mySwiper.autoplay.start();
          });
        }
      };

      window.addEventListener("load", () => {
        addBullentsEvent();
        document
          .getElementsByClassName("swiper-button-next")[0]
          .addEventListener("click", () => {
            mySwiper.autoplay.start();
          });
        document
          .getElementsByClassName("swiper-button-prev")[0]
          .addEventListener("click", () => {
            mySwiper.autoplay.start();
          });
      });
    </script>
  </body>
</html>

效果:

相关推荐
00后程序员张3 小时前
Fiddler调试工具全面解析 HTTPHTTPS抓包、代理设置与接口测试实战教程
前端·测试工具·ios·小程序·fiddler·uni-app·webview
k8s-open3 小时前
解决“Argument list too long”错误:curl参数过长的优雅处理方案
linux·前端·chrome·ssh
CodeSheep3 小时前
裁员为什么先裁技术人员?网友一针见血
前端·后端·程序员
前端小王呀3 小时前
自定义图表相关配置
android·前端·javascript
西西学代码3 小时前
flutter---进度条
前端·javascript·flutter
时间的情敌3 小时前
Vue3 和 Vue2 的核心区别
前端·javascript·vue.js
533_3 小时前
[antv x6] 限制节点/边是否可以移动,移动时返回父节点,限制节点的移动范围
前端
步步为营DotNet3 小时前
深入理解ASP.NET Core Middleware:构建高效Web应用的管道基石
前端·后端·asp.net
|晴 天|3 小时前
微前端架构入门:从概念到落地实践
前端·架构