美文网首页Web前端之路
原生JS实现图片轮播及二级菜单的绑定

原生JS实现图片轮播及二级菜单的绑定

作者: 梁文璇 | 来源:发表于2020-03-05 21:57 被阅读0次

    我们在各个电商网站上都可以看到图片轮播,当然框架实现的话,想必对大家来说是 so easy 的,那么该如何用原生JS来实现呢?请开始我的show~~~

    动起来 做出来的效果是这样滴

    HTML

    <!DOCTYPE html>

    <html lang="en">

    <head>

    <meta charset="UTF-8">

    <title>Document</title>

    <link rel="stylesheet" href="css/style.css">

    </head>

    <body>

    <div class="main" id="main">

    <div class="menu-box">

    </div>

    <!--内容-->

    <div class="sub-menu hide" id="sub-menu">

    <div class="inner-box">

    <div class="sub-inner-box">

    <div class="title">手机、配件</div>

    <div class="sub-row">

    <span class="bold mr10">手机通讯:</span>

    <a href="">手机</a>

    <span class="ml10 mr10">/</span>

    <a href="">手机维修</a>

    <span class="ml10 mr10">/</span>

    <a href="">以旧换新</a>

    </div>

    <div class="sub-row">

    <span class="bold mr10">手机配件:</span>

    <a href="">手机壳</a>

    <span class="ml10 mr10">/</span>

    <a href="">手机存储卡</a>

    <span class="ml10 mr10">/</span>

    <a href="">数据线</a>

    <span class="ml10 mr10">/</span>

    <a href="">充电器</a>

    <span class="ml10 mr10">/</span>

    <a href="">电池</a>

    </div>

    <div class="sub-row">

    <span class="bold mr10">运营商:</span>

    <a href="">中国联通</a>

    <span class="ml10 mr10">/</span>

    <a href="">中国移动</a>

    <span class="ml10 mr10">/</span>

    <a href="">中国电信</a>

    </div>

    <div class="sub-row">

    <span class="bold mr10">智能设备:</span>

    <a href="">智能手环</a>

    <span class="ml10 mr10">/</span>

    <a href="">智能家居</a>

    <span class="ml10 mr10">/</span>

    <a href="">智能手表</a>

    <span class="ml10 mr10">/</span>

    <a href="">其他配件</a>

    </div>

    <div class="sub-row">

    <span class="bold mr10">娱乐:</span>

    <a href="">耳机</a>

    <span class="ml10 mr10">/</span>

    <a href="">音响</a>

    <span class="ml10 mr10">/</span>

    <a href="">收音机</a>

    <span class="ml10 mr10">/</span>

    <a href="">麦克风</a>

    </div>

    </div>

    </div>

    <div class="inner-box">

    <div class="sub-inner-box">

    <div class="title">电脑</div>

    <div class="sub-row">

                          <span class="bold mr10">电脑:</span>

                          <a href="">笔记本</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">平板</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">一体机</a>

    </div>

    <div class="sub-row">

                          <span class="bold mr10">电脑配件:</span>

                          <a href="">显示器</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">CPU</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">主板</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">硬盘</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">电源</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">显卡</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">其他配件</a>

    </div>

    <div class="sub-row">

                          <span class="bold mr10">游戏设备:</span>

                          <a href="">游戏机</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">耳机</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">游戏软件</a>

    </div>

    <div class="sub-row">

                          <span class="bold mr10">网络产品:</span>

                          <a href="">路由器</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">网络机顶盒</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">交换机</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">存储卡</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">网卡</a>

    </div>

    <div class="sub-row">

                          <span class="bold mr10">外部产品:</span>

                          <a href="">鼠标</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">键盘</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">U盘</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">移动硬盘</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">鼠标垫</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">电脑清洁</a>

    </div>

    </div>

    </div>

    <div class="inner-box">

    <div class="sub-inner-box">

    <div class="title">家用电器</div>

    <div class="sub-row">

                          <span class="bold mr10">电视:</span>

                          <a href="">国产品牌</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">韩国品牌</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">欧美品牌</a>

    </div>

    <div class="sub-row">

                          <span class="bold mr10">空调:</span>

                          <a href="">显示器</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">柜式</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">中央</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">壁挂式</a>

    </div>

    <div class="sub-row">

                          <span class="bold mr10">冰箱:</span>

                          <a href="">多门</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">对开门</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">三门</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">双门</a>

    </div>

    <div class="sub-row">

                          <span class="bold mr10">洗衣机:</span>

                          <a href="">滚筒式洗衣机</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">迷你洗衣机</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">洗烘一体机</a>

    </div>

    <div class="sub-row">

                          <span class="bold mr10">厨房电器:</span>

                          <a href="">油烟机</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">洗碗机</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">燃气灶</a>

    </div>

    </div>

    </div>

    <div class="inner-box">

    <div class="sub-inner-box">

    <div class="title">家具</div>

    <div class="sub-row">

                          <span class="bold mr10">家纺:</span>

                          <a href="">被子</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">枕头</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">四件套</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">床垫</a>

    </div>

    <div class="sub-row">

                          <span class="bold mr10">灯具:</span>

                          <a href="">台灯</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">顶灯</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">节能灯</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">应急灯</a>

    </div>

    <div class="sub-row">

                          <span class="bold mr10">厨具:</span>

                          <a href="">烹饪锅具</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">餐具</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">菜板刀具</a>

    </div>

    <div class="sub-row">

                          <span class="bold mr10">家装:</span>

                          <a href="">地毯</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">沙发垫套</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">装饰字画</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">照片墙</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">窗帘</a>

    </div>

    <div class="sub-row">

                          <span class="bold mr10">生活日用:</span>

                          <a href="">收纳用品</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">浴室用品</a>

                          <span class="ml10 mr10">/</span>

                          <a href="">雨伞雨衣</a>

    </div>

    </div>

    </div>

    </div>

    <!-- 菜单 -->

    <div class="menu-content" id="menu-content">

    <div class="menu-item">

    <a href="">

    <span>手机、配件</span>

    <i class="icon">&#xe665;</i>

    </a>

    </div>

    <div class="menu-item">

    <a href="">

    <span>电脑</span>

    <i class="icon">&#xe665;</i>

    </a>

    </div>

    <div class="menu-item">

    <a href="">

    <span>家用电器</span>

    <i class="icon">&#xe665;</i>

    </a>

    </div>

    <div class="menu-item">

    <a href="">

    <span>家具</span>

    <i class="icon">&#xe665;</i>

    </a>

    </div>

    </div>

    <div class="banner" id="banner">

    <a href="">

    <div class="banner-slide slide1 slide-active"></div>

    </a>

    <a href="">

    <div class="banner-slide slide2"></div>

    </a>

    <a href="">

    <div class="banner-slide slide3"></div>

    </a>

    </div>

    <a href="javascript:void(0)" class="button prev" id="prev"></a>

    <a href="javascript:void(0)" class="button next" id="next"></a>

    <div class="dots" id="dots">

    <span class="active"></span>

    <span></span>

    <span></span>

    </div>

    </div>

    <script src="js/script.js"></script>

    </body>

    </html>

    CSS样式

    *{margin:0;padding:0;}

    @font-face {font-family: 'iconfont';

      src: url('../img/font/iconfont.eot');

      src: url('../img/font/iconfont.eot') format('embedded-opentype'),

      url('../img/font/iconfont.woff') format('woff'),

      url('../img/font/iconfont.ttf') format('truetype'),

      url('../img/font/iconfont.svg#iconfont') format('svg');}

    a{text-decoration: none;}

    a:link,a:visited{color:#5e5e5e;}

    body{font-family:"微软雅黑";color: #14191e;}

    .main{width:1200px;height:460px;margin:30px auto;position:relative;overflow:hidden}

    .banner{width:1200px;height:460px;overflow:hidden;position:relative}

    .banner-slide{width:1200px;height:460px;background-repeat:no-repeat;float:left;display:none}

    .slide-active{display:block}

    .slide1{background-image:url(../img/bg1.jpg);}

    .slide2{background-image:url(../img/bg2.jpg);}

    .slide3{background-image:url(../img/bg3.jpg);}

    .button{position: absolute;transform:rotate(180deg);top: 50%;left: 244px;height: 80px;width: 40px;margin-top:-40px;background:url(../img/arrow.png) center center no-repeat;}

    .next{transform:rotate(0deg);left:auto;right:0;}

    .button:hover{background-color:#333;opacity: 0.8;filter:alpha(opacity=80);}

    .dots {position: absolute;bottom: 24px;right: 0;text-align: right;padding-right: 24px;line-height: 12px;}

    .dots span {display: inline-block;width: 12px;height: 12px;border-radius: 50%;margin-left: 8px;background-color: rgba(7, 17, 27, 0.4);cursor: pointer;box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.8) inset;}

    .dots span.active{box-shadow: 0 0 0 2px rgba(7, 17, 27, 0.4) inset;background-color: #ffffff;}

    /* menu-box */

    .menu-box {background:rgba(7, 17, 27, 0.5);opacity: 0.5;position: absolute;left: 0px;top: 0px;width: 244px;height: 460px;z-index: 1;}

    .menu-content{position: absolute;left: 0px;top: 0px;width: 244px;height: 460px;z-index: 2;padding-top: 6px}

    .menu-item{height: 64px;line-height: 66px;font-size: 12px;cursor: pointer;padding: 0 24px;position: relative}

    .menu-item a{display: block;color: #fff;padding: 0 8px;border-bottom: 1px solid rgba(255, 255, 255, 0.2);height: 63px;font-size:16px}

    .menu-item:last-child a{border-bottom:none}

    .menu-item i{position: absolute;right: 32px;top: 24px;color: rgba(255,255,255,0.5);font-size: 24px;top: 2px;font-style:normal;font-weight:normal;font-family:"iconfont";}

    .sub-menu {border:1px solid #d9dde1;background:#fff;position: absolute;left: 244px;top: 0px;width: 730px;height: 458px;z-index: 581;box-shadow: 0px 4px 8px 0px rgba(0, 0, 0, 0.1);}

    .hide{display:none;}

    .inner-box{width:100%;height:100%;background:url(../img/fe.png) no-repeat;display:none;}

    .sub-inner-box{width: 652px;margin-left: 40px;overflow: hidden;}

    .title{color: #f01414;font-size: 16px;line-height: 16px;margin-top: 28px;font-weight: bold;margin-bottom: 30px;}

    .sub-row{margin-bottom:25px;}

    .bold{font-weight:700;}

    .mr10{margin-right:10px;}

    .ml10{margin-left:10px;}

    JS代码

    var timer = null,

        index = 0,

        pics = byId("banner").getElementsByTagName("div"),

        dots = byId("dots").getElementsByTagName("span"),

        size = pics.length,

        prev = byId("prev"),

        next = byId("next"),

        menuItems = byId("menu-content").getElementsByTagName("div"),

        subMenu = byId("sub-menu"),

        subItems = subMenu.getElementsByClassName("inner-box");

    function addHandler(element, type, handler) {

        if (element.addEventListener) {

            element.addEventListener(type, handler, true);

        }

        else if (element.attachEvent) {

            element.attachEvent('on' + type, handler);

        }

        else {

            element['on' + type] = handler;

        }

    }

    function byId(id){

    return typeof(id)==="string"?document.getElementById(id):id;

    }

    // 清除定时器,停止自动播放

    function stopAutoPlay(){

    if(timer){

          clearInterval(timer);

    }

    }

    // 图片自动轮播

    function startAutoPlay(){

      timer = setInterval(function(){

          index++;

          if(index >= size){

              index = 0;

          }

          changeImg();

      },3000)

    }

    function changeImg(){

      for(var i=0,len=dots.length;i<len;i++){

          dots[i].className = "";

          pics[i].style.display = "none";

      }

      dots[index].className = "active";

      pics[index].style.display = "block";

    }

    function slideImg(){

        startAutoPlay();

        var main = byId("main");

        var banner = byId("banner");

        var menuContent = byId("menu-content");

        addHandler(main,"mouseover",stopAutoPlay);

        addHandler(main,"mouseout",startAutoPlay);

        // 点击导航切换

        for(var i=0,len=dots.length;i<len;i++){

          dots[i].id = i;

          addHandler(dots[i],"click",function(){

              index = this.id;

              changeImg();

          })

        }

        // 下一张

        addHandler(next,"click",function(){

          index++;

          if(index>=size) index=0;

          changeImg();

        })

        // 上一张

        addHandler(prev,"click",function(){

          index--;

          if(index<0) index=size-1;

          changeImg();

        })

        // 菜单

        for(var m=0,mlen=menuItems.length;m<mlen;m++){

            menuItems[m].setAttribute("data-index",m);

            addHandler(menuItems[m],"mouseover",function(){

                subMenu.className = "sub-menu";

                var idx = this.getAttribute("data-index");

                for(var j=0,jlen=subItems.length;j<jlen;j++){

                  subItems[j].style.display = 'none';

                  menuItems[j].style.background = "none";

                }

                subItems[idx].style.display = "block";

                menuItems[idx].style.background = "rgba(0,0,0,0.1)";

            });

        }

        addHandler(subMenu,"mouseover",function(){

            this.className = "sub-menu";

        });

        addHandler(subMenu,"mouseout",function(){

            this.className = "sub-menu hide";

        });

        addHandler(banner,"mouseout",function(){

            subMenu.className = "sub-menu hide";

        });

        addHandler(menuContent,"mouseout",function(){

            subMenu.className = "sub-menu hide";

        });

    }

    addHandler(window,"load",slideImg);

    监听方法:

    addEventListener() 和 removeEventListener() 有三个参数

    第一个参数:事件名

    第二个参数:事件处理函数

    第三个参数:true为在捕获阶段调用,false为在冒泡阶段调用

    功能: addEventListener() 可以为元素添加多个事件处理程序,触发时会按照添加顺序依次调用

    removeEventListener() 移除事件处理程序,但不能移除匿名添加的函数

    attachEvent() 可以为元素添加多个事件处理程序,触发时会按照添加顺序从后往前依次调用

    detachEvent()  移除事件处理程序,但不能移除匿名添加的函数

    附上 流程图

    二级菜单流程图 图片轮播流程图

    今天就到这里啦·····everybody 疫情要结束了,是否准备好开始你的向上之路呢?看得出来想要开学的小伙伴们内心非常迫切呀,按时报平安,你想要的就会到来滴~   

    see you again

    相关文章

      网友评论

        本文标题:原生JS实现图片轮播及二级菜单的绑定

        本文链接:https://www.haomeiwen.com/subject/drlhrhtx.html