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

作者 : 开心源码 本文共12639个字,预计阅读时间需要32分钟 发布时间: 2022-05-13 共170人阅读

我们在各个电商网站上都可以看到图片轮播,当然框架实现的话,想必对大家来说是 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”></i>

</a>

</div>

<div class=”menu-item”>

<a href=””>

<span>电脑</span>

<i class=”icon”></i>

</a>

</div>

<div class=”menu-item”>

<a href=””>

<span>家用电器</span>

<i class=”icon”></i>

</a>

</div>

<div class=”menu-item”>

<a href=””>

<span>家具</span>

<i class=”icon”></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

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 原生JS实现图片轮播及二级菜单的绑定

发表回复