原生js做轮播图

简介: 原生js做轮播图

html:

<!-- 负责大致布局 -->
    <div id="a">
      <!-- 负责图片 -->
      <div id="b">
        <img src="./img/1.jpg" alt="图片损坏">
        <img src="./img/2.jpg" alt="图片损坏">
        <img src="./img/3.jpg" alt="图片损坏">
        <img src="./img/1.jpg" alt="图片损坏">
      </div>
      <!-- 左右图标 -->
      <div id="d">
        <!-- 设置点击事件 -->
        <img src="./img/左.png" alt="图片损坏" onclick="fn()">
        <img src="./img/右.png" alt="图片损坏" onclick="fns()">
      </div>
      <!-- 指示点 -->
      <div id="arr">
        <span style="background-color: rgba(255, 0, 0, 0.6);"></span>
        <span></span>
        <span></span>
      </div>
    </div>

css:

/* 初始化 */
    * {
      padding: 0;
      margin: 0;
    }
    /* 主div样式 */
    #a {
      width: 100%;
      height: 700px;
      overflow: hidden;
      position: relative;
    }
    /* 图片div */
    #b {
      width: 400%;
      height: 700px;
      display: flex;
    }
    /* 图片 */
    #b img {
      width: 25%;
      height: 700px;
    }
    /* 添加一个div包左右箭头 */
    #d {
      width: 100%;
      display: flex;
      position: absolute;
      top: 0;
      justify-content: space-between;
    }
    #d img {
      margin-top: 320px;
    }
    /* 指示点 */
    #arr {
      width: 100%;
      height: 30px;
      position: absolute;
      bottom: 0;
      display: flex;
      justify-content: center;
    }
    #arr span {
      display: block;
      width: 20px;
      height: 20px;
      border-radius: 100%;
      margin: 5px 5px;
      background-color: rgba(0, 0, 0, 0.4);
    }

js:

// 提取div
      let a = document.getElementById("a");
      let b = document.getElementById("b");
      let c = document.getElementsByTagName("img");
      let d = document.getElementById("arr");
      let e = d.children;
      // 提取图片
      let img = b.children;
      let imgWidth = img[0].offsetWidth;
      // 设置图片的位置
      let k = 0;
      // 给函数命名方便调用
      function gg() {
        fk();
        // 先自加后判断
        k++;
        // 必须执行的
        b.style.transition = " all 1s";
        b.style.marginLeft = -imgWidth * k + "px";
        // 判断是否为最后一张
        if (k == img.length - 1) {
          // 延缓代码执行防止跟上面必须执行的冲突
          setTimeout(function() {
            k = 0;
            // 取消过渡
            b.style.transition = "";
            // 边距为0(返回第一张)
            b.style.marginLeft = -imgWidth * k + "px";
          }, 1000);
          // 切换到第一张
          e[0].style.backgroundColor = "rgba(255, 0, 0, 0.6)";
        } else {
          // 跟着k(图片)进行变色
          e[k].style.backgroundColor = "rgba(255, 0, 0, 0.6)";
        }
      }
      // 指示点
      function fk() {
        for (let i = 0; i < e.length; i++) {
          // 先让所以的变成灰色
          e[i].style.backgroundColor = "rgba(0, 0, 0, 0.4)";
        }
      }
      // 设置一个定时器
      let clear = setInterval(gg, 2000);
      // 点击事件左
      function fn() {
        fk();
        k--;
        b.style.transition = " all 1s";
        b.style.marginLeft = -imgWidth * k + "px";
        // 判断是否为最后一张
        if (k == 0) {
          // 延缓代码执行防止跟上面必须执行的冲突
          setTimeout(function() {
            k = img.length - 1;
            // 取消过渡
            b.style.transition = "";
            //(返回第k张)
            b.style.marginLeft = -imgWidth * k + "px";
          }, 1000);
          // 切换到第k张
          e[k].style.backgroundColor = "rgba(255, 0, 0, 0.6)";
        } else {
          // 跟着k(图片)进行变色
          e[k].style.backgroundColor = "rgba(255, 0, 0, 0.6)";
        }
      }
      // 点击事件右
      function fns() {
        fk();
        k++;
        b.style.transition = " all 1s";
        b.style.marginLeft = -imgWidth * k + "px";
        // 判断是否为最后一张
        if (k == img.length - 1) {
          // 延缓代码执行防止跟上面必须执行的冲突
          setTimeout(function() {
            k = 0;
            // 取消过渡
            b.style.transition = "";
            // 边距为0(返回第一张)
            b.style.marginLeft = "0px";
          }, 1000);
          // 切换到第一张
          e[0].style.backgroundColor = "rgba(255, 0, 0, 0.6)";
        } else {
          // 跟着k(图片)进行变色
          e[k].style.backgroundColor = "rgba(255, 0, 0, 0.6)";
        }
      }
      // 鼠标移入
      a.onmouseenter = function() {
        clearInterval(clear);
      }
      // 鼠标移出
      a.onmouseleave = function() {
        clear = setInterval(gg, 2000);
      }


相关文章
|
17天前
|
前端开发 JavaScript
前端 js 经典:Object 常用原生方法
前端 js 经典:Object 常用原生方法
44 2
|
17天前
|
前端开发 JavaScript
前端 js 经典:array 原生方法
前端 js 经典:array 原生方法
20 1
|
17天前
|
JavaScript 索引
jQuery 实现 图片框切换【与原生 JS 对比】
jQuery 实现 图片框切换【与原生 JS 对比】
|
18天前
|
监控 JavaScript 前端开发
超越原生:探索Node.js中最佳文件系统三方库
超越原生:探索Node.js中最佳文件系统三方库
|
19天前
|
JavaScript 前端开发 索引
JavaScript array 原生 reduce 方法的模拟实现
JavaScript array 原生 reduce 方法的模拟实现
18 2
|
19天前
|
JavaScript 计算机视觉
原生js通过年龄判断是否可以抽奖
原生js通过年龄判断是否可以抽奖
16 0
|
19天前
|
存储 JavaScript 前端开发
原生JS如何实现验证码
原生JS如何实现验证码
16 0
|
19天前
|
JavaScript 安全 前端开发
原生JS实现一键复制,一键粘贴
原生JS实现一键复制,一键粘贴
13 0
|
19天前
|
前端开发 JavaScript 调度
原生JavaScript实现弹幕组件
原生JavaScript实现弹幕组件
|
19天前
|
JavaScript 前端开发
js原生自调用函数原理
JavaScript中的IIFE(Immediately Invoked Function Expression)是定义后立即执行的函数表达式。它有两种实现方式:匿名函数表达式 `(function() { /* 函数体 */ })()` 和命名函数声明 `(function myFunction() { /* 函数体 */ })()`。IIFE提供封闭作用域,防止变量冲突,常用于创建私有作用域、封装代码和避免变量提升问题。执行后,IIFE内部的变量和函数会被销毁,除非被特意暴露。