• 原生JS实现 ‘Tab栏切换’,‘手风琴’,‘轮播图’效果


     1.小天使跟随鼠标效果

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
      <style>
        body {
          margin: 0;
          padding: 0;
          height: 5000px;
          background-image: linear-gradient(0deg, purple, yellowgreen);
        }
    
        #box {
          position: fixed;
          left: 0;
          top: 0;
        }
      </style>
    </head>
    
    <body>
      <img src="./images/angel.gif" alt="小天使" id="box">
      <script>
        // 获取小天使,因为他要移动
        var box = document.querySelector("#box");
        // 获取 body 因为要绑定事件
        var body = document.querySelector("body");
    
        body.addEventListener("mousemove", function (event) {
          // 获取鼠标坐标值,根据浏览器可视区域获取鼠标坐标值
          var x = event.clientX;
          var y = event.clientY;
          // console.log(x,y);
          // 把坐标值赋值给小天使 top left 样式中.
          box.style.left = x + "px";
          box.style.top = y + "px";
        });
    
        // 小结:
        //      1. 查找元素
        //      2. 事件绑定,addEventListener 
        //      3. 事件对象,获取鼠标坐标值
        //      4. 样式固定定位
        //      5. style 属性修改样式
      </script>
    </body>
    
    </html>

    效果:

    2.Tab栏切换

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
      <style>
        * {
          margin: 0;
          padding: 0;
        }
        ul{
          list-style: none;
        }
        .wrapper{
           100px;
          height: 475px;
          /* margin: 0 auto; */
          margin-top: 100px;
        }
        .tab {
          border: 1px solid #ddd;
          border-bottom: 0;
          height: 36px;
           320px;
        }
        .tab li{
          position: relative;
          float: left;
           80px;
          height: 34px;
          line-height: 34px;
          text-align: center;
          cursor: pointer;
          border-top: 4px solid #fff;
        }
        .tab span {
    
        }
    
        .products {
           1002px;
          border: 1px solid #ddd;
          height: 476px;
        }
    
        .products .main{
          float: left;
          display: none;
        }
    
        .products .main.selected{
          display: block;
        }
        .tab li.active{
          border-color: red;
          border-bottom: 0;
        }
    
      </style>
    </head>
    <body>
      <div class="wrapper">
        <!-- tab栏选项卡部分 -->
        <ul class="tab">
          <!-- 给每一个 li 添加索引值的自定义属性,目的为了切换对应的分区 -->
          <li data-index="0" class="tab-item active">国际大牌</li>
          <li data-index="1" class="tab-item">国妆名牌</li>
          <li data-index="2" class="tab-item">清洁用品</li>
          <li data-index="3" class="tab-item">男士精品</li>
        </ul>
        <!-- tab栏内容部分 -->
        <div class="products">
            <div class="main selected">
                <a href="###"><img src="images/guojidapai.jpg" alt="" /></a>
            </div>
            <div class="main">
                <a href="###"><img src="images/guozhuangmingpin.jpg" alt="" /></a>
            </div>
            <div class="main">
                <a href="###"><img src="images/qingjieyongpin.jpg" alt="" /></a>
            </div>
            <div class="main">
                <a href="###"><img src="images/nanshijingpin.jpg" alt="" /></a>
            </div>
        </div>
      </div>
    
      <script>
        window.addEventListener("load", function(){
          // 1.查找元素
          // All 查找全部元素
          var tabItems = document.querySelectorAll('.tab-item');
          var mains = document.querySelectorAll('.main');
    
          // 2. 添加事件,涉及到多个元素,所以我们需要遍历添加
          for(var i=0; i<tabItems.length; i++){
            // 2.1 给所有元素添加鼠标移入事件
            tabItems[i].addEventListener("mouseover", function(){
              // 3.1 切换选项卡
              // 3.1.1 排除所有
              for(var i=0; i<tabItems.length; i++){
                // 1.1 把所有选项卡的active类名先清除掉
                tabItems[i].classList.remove('active');
              }
              // 3.1.2 确立当前,给当前点击的元素添加active类名
              this.classList.add("active");
    
              // 3.2 切换商品
              // 3.2.1 切换所有商品的类名
              for(var i=0; i<mains.length; i++){
                // 移出类名,隐藏所有盒子
                mains[i].classList.remove("selected");
              }
              // 3.2.2 确立一个,怎么把选项卡和商品对应起来
              // 1 获取当前li标签存放的自定义索引值
              var index = this.dataset.index;
              console.log(index);
              // 根据索引值给第几个 商品分区添加selected类名,添加类名盒子就可以显示
              mains[index].classList.add("selected");
            })
          }
        })
      </script>
    </body>
    </html>

    效果:

    3. 手风琴效果

    <!DOCTYPE html>
    <html>
    
    <head lang="en">
      <meta charset="UTF-8">
      <title></title>
      <style>
        * {
          margin: 0;
          padding: 0;
        }
    
        /* 去掉li标签自带的样式 点 */
        ul {
          list-style: none;
        }
    
        .wrap {
           1000px;
          margin: 50px auto;
        }
    
        .slider {
           1000px;
          height: 400px;
          border: 1px solid red;
          overflow: hidden;
        }
    
        .slider li {
           200px;
          height: 400px;
          float: left;
          cursor: pointer;
          /* 过渡属性 */
          transition: all .4s;
        }
      </style>
    
      <script>
        /*
          需求:
            1.动态的给所有的li,添加背景图片
            2.鼠标移入,让当前变宽,让其他变窄
            3.鼠标移入,恢复原状
        */
        // 浏览器加载事件   当浏览器资源加载完毕后自动执行。
        window.addEventListener("load", function () {
          // 查找元素 所有li标签   伪数组
          var lis = document.querySelectorAll(".slider li");
          // for循环遍历 让所有li标签都可以作用到
          for (var i = 0; i < lis.length; i++) {
            // 给每一个li标签的绑定一个鼠标移入的事件
            lis[i].addEventListener("mouseover", function () {
              // 排他事件  1.1 排除其他
              for (var i = 0; i < lis.length; i++) {
                // 让li标签的宽度变成50像素
                lis[i].style.width = (1000 - 800) / 4 + "px";
              }
              // 排他事件  1.2 确立当前  鼠标移入的那一个li标签变成800像素
              this.style.width = 800 + "px";
            })
            // 给li标签添加一个鼠标移出的事件
            lis[i].addEventListener("mouseout", function () {
              // for循环遍历 
              for (var i = 0; i < lis.length; i++) {
                // 当鼠标移出的时候让所有li标签的宽度都变成200像素
                lis[i].style.width = 200 + "px";
              }
            });
          }
        })
      </script>
    </head>
    
    <body>
      <div class="wrap">
        <ul id="slider" class="slider">
          <li>
            <img src="./images/mi1.jpg" alt="">
          </li>
          <li>
            <img src="./images/mi2.jpg" alt="">
          </li>
          <li>
            <img src="./images/mi3.jpg" alt="">
          </li>
          <li>
            <img src="./images/mi4.jpg" alt="">
          </li>
          <li>
            <img src="./images/mi5.jpg" alt="">
          </li>
        </ul>
      </div>
    </body>
    
    </html>

    效果:

    4.轮播图效果

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
      <style>
        * {
          padding: 0;
          margin: 0;
        }
        ul {
          list-style: none;
        }
        .slider{
           730px;
          height: 454px;
          padding: 8px;
          border: 1px solid green;
          margin: 100px auto;
        }
    
        .inner{
          position: relative;
          overflow: hidden;
          height: 454px;
        }
    
        .imglist{
           700%;
          position: absolute;
          left: 0;
          transition: all .4s;
        }
        .imglist img{
           730px;
        }
        li {
          float: left;
        }
        .list {
          position: absolute;
          bottom: 20px;
          left: 50%;
          transform: translateX(-50%);
        }
        .list i{
           20px;
          height: 20px;
          border-radius: 50%;
          background-color: #fff;
          color: #333;
          float: left;
          font-style: normal;
          line-height: 20px;
          font-size: 14px;
          text-align: center;
          margin-right: 10px;
          cursor: pointer;
        }
        .list i:last-child{
          margin-right: 0;
        }
        .list i.current{
          background-color: lightcoral;
          color: #fff;
        }
    
        .arrow {
          position: absolute;
           100%;
          top: 50%;
          margin-top: -30px;
        }
    
        .arrow-left,
        .arrow-right{
           30px;
          height: 60px;
          position: absolute;
          font: 20px/60px "consolas";
          color: #fff;
          background-color: rgba(0,0,0, .3);
          text-align: center;
          cursor: pointer;
        }
        .arrow-right{
          right: 0;
        }
        
      </style>
    </head>
    
    <body>
      <div class="slider" id="slider">
        <div class="inner" id="inner">
          <ul class="imglist" id="imglist">
            <li><a href="#"><img src="images/1.jpg" alt=""></a></li>
            <li><a href="#"><img src="images/2.jpg" alt=""></a></li>
            <li><a href="#"><img src="images/3.jpg" alt=""></a></li>
          </ul>
          <div class="list">
            <i class="current">1</i>
            <i>2</i>
            <i>3</i>
          </div>
          <dv class="arrow">
            <span class="arrow-left">&lt;</span>
            <span class="arrow-right">&gt;</span>
          </dv>
        </div>
      </div>
    
    
      <script>
        /* 
          需求:
            1 点击序号
              能切换序号
              能切换图片
            2 点击左箭头
              能切换序号
              能切换图片
            3 点击右箭头
              能切换序号
              能切换图片
            4 自动播放功能
              能切换序号
              能切换图片
            5 鼠标移入停止播放功能
            6 鼠标移出还原自动播放功能
         */
    
         // 1 查找元素
         // 查找全部小圆点
         var dots = document.querySelectorAll('.list i');
         var arrowLeft = document.querySelector(".arrow-left");
         var arrowRight = document.querySelector(".arrow-right");
         var slider = document.querySelector(".slider");
         var imgList = document.querySelector(".imgList");
         var inner = document.querySelector(".inner");
         var styleObj = window.getComputedStyle(inner);
         var imgWidth = parseInt(styleObj.width);
         console.log(imgWidth);
    
         var index = 0;
         //点击序号切换序号和图片
         for(var i=0; i<dots.length; i++){
           // 把当前循环的i直接设置到元素的data-index自定义属性上
           dots[i].dataset.index = i;
           dots[i].addEventListener("click", function(){
             // 1.1能切换序号 - 排他思想
             // 排除所有
             for(var i=0; i<dots.length; i++){
               dots[i].classList.remove('current');
             }
             // 确立当前
             this.classList.add('current');
             // 切换图片
             // 获取当前点击小圆点的自定义索引值
             var index = this.dataset.index;
             // 计算ul要移动数据,赋值给left
             imglist.style.left = -1 * imgWidth * index + "px";
             console.log(imglist.style.left);
           });
         }
        
         /* 
          点击左箭头切换序号和图片
          */
          arrowLeft.addEventListener('click', function(){
            // 注意索引值的边界,如果索引值为0,点击的时候变成最后圆点的索引值
            if(index===0){
              index = dots.length -1;
            }else {
              // 其他情况下索引值减少
              index--;
            }
            console.log(index);
            // 1.1 能切换序号
            for(var i=0; i<dots.length; i++){
              dots[i].classList.remove('current');
            }
            // 根据索引值,给第几个小圆点添加样式
            dots[index].classList.add('current');
            // 1.2 能切换图片
            imglist.style.left = -1 * imgWidth * index + 'px';
          });
    
    
          function rightMove(){
             // index边界判断
             if(index === dots.length -1){
              index = 0;
            }else{
              index++;
            }
            // 小圆点处理
            for(var i=0; i<dots.length; i++){
              dots[i].classList.remove('current');
            }
            dots[index].classList.add('current');
            // 换图片
            imglist.style.left = -1 * imgWidth * index + "px";
          }
    
          arrowRight.addEventListener('click', rightMove);
    
          // 自动播放的功能
          var timer = setInterval(rightMove, 2000);
    
          // 鼠标移入分区,清除定时器
          slider.addEventListener("mouseover", function(){
            clearInterval(timer);
          });
    
          // 鼠标移出分区,继续启动定时器
          slider.addEventListener('mouseout', function(){
            timer = setInterval(rightMove, 2000);
          })
      </script>
    </body>
    
    </html>

    效果:

     

  • 相关阅读:
    拾回被剥削的自由,未来实实在在的弹性工作一定成为主流
    探索RequestBody报com.alibaba.fastjson.JSONObject cannot be cast to xxx
    CSM与UEFI
    JS使用onscroll、scrollTop实现图片懒加载
    点击button后刷新了页面
    jQuery中prop和attr区别
    encodeURI、encodeURIComponent
    局中人
    年轻人能为世界做些什么
    JavaWeb中的资源映射
  • 原文地址:https://www.cnblogs.com/sauronblog/p/11518823.html
Copyright © 2020-2023  润新知