很多幻灯片切换的时候,下面有一个对应的小圆点导航条。
这种案例的关键点是各自的下标传递,依然要用到自定义属性。
功能有:
1、点击下一张和上一张切换大图。
2、下面导航的小圆点的active高亮状态随着大图的切换跟着发生对应的变化。
3、点击小圆点的时候,大图跟着切换成对应的图片。
4、鼠标经过小圆点的时候,出现缩略图。
5、点击缩略图的时候,切换到对应的大图。
第一个版本,带小圆点导航的切换。
封装函数,使用精准的传递下标值实现图片切换和小圆点的active高亮切换效果。
具体效果点击查看。
一、html代码
<div id="banner"> <img src="images/loading.gif" id="pic"/> <ul id="nav"> </ul> <a href="#" class="btn" id="prev"><i class="iconfont icon-left"></i></a> <a href="#" class="btn" id="next"><i class="iconfont icon-right"></i></a> </div>
二、css代码
body,ul{ padding:0; margin:0;} body{ background:#e1e1e1;} li{ list-style:none;} a{ text-decoration:none;} #banner{ width:600px; height:375px; position:relative; margin:30px auto 0; background:#FFF1CE; text-align:center; } #nav{ position:absolute; width:100%; left:0; bottom:20px; } #nav li{ position:relative; display:inline-block; width:14px; height:14px; border-radius:50%; background-color:#fff; font-size:0; cursor:pointer; margin-right:8px; } #nav li.active{ background-color:#FF0;} .slt{ display:none; position:absolute; left:-45px; top:20px; border:3px solid #fff; } .slt:before{ content:""; position:absolute; border-bottom:6px solid #fff; border-left:5px solid transparent; border-right:5px solid transparent; left:50%; margin-left:-8px; top:-9px; } .btn{ position:absolute; width:50px; height:50px; line-height:50px; background:rgba(0,0,0,.2); border-radius:50%; top:50%; margin-top:-25px; transition:0.2s; } .btn:hover{ background:rgba(255,255,0,.7);} #prev{ left:20px;} #next{ right:20px;} .iconfont{ font-size:2rem; color:#fff; }
三、js代码
window.onload=function(){ var oBanner=document.getElementById("banner"); var oPic=document.getElementById("pic"); var oUl=document.getElementById("nav"); var aLi=oUl.getElementsByTagName("li"); var aSmallPic=oUl.getElementsByClassName("slt"); var oPrev=document.getElementById("prev"); var oNext=document.getElementById("next"); var aUrl=["images/org/1.jpg","images/org/2.jpg","images/org/3.jpg","images/org/4.jpg","images/org/5.jpg"]; var aSlt=["images/slt/1.jpg","images/slt/2.jpg","images/slt/3.jpg","images/slt/4.jpg","images/slt/5.jpg"]; var len=aUrl.length; var oldIndex=null; //定义一个null对象用来存放有active的li。 //根据图片的多少加载小圆点导航列表 for(var i=0;i<len;i++){ oUl.innerHTML+='<li></li>' } //初始化 var num=0; oldIndex=aLi[num]; tabPic(); //上一张 oPrev.onclick=function(){ num--; if(num==-1){ num=len-1; } tabPic(); } //下一张 oNext.onclick=function(){ num++; if(num==len){ num=0; } tabPic(); } //小圆点点击切换class和图片。 for(var i=0;i<len;i++){ aLi[i].index=i; aLi[i].onclick=function(){ num=this.index;//把圆点的下标值赋值给num。 tabPic(); } } //图片切换函数,需要获得num值,就可以执行对应图片的显示和对应li的active高亮效果。 function tabPic(){ oPic.src=aUrl[num]; oldIndex.className=''; aLi[num].className='active'; oldIndex=aLi[num]; //把当前下标对应的li更新进oldIndex对象。 } }
第二个版本,有缩略图和小圆点的导航。
封装函数,使用for循环实现active高亮的切换。
具体效果点击查看。
一、html代码
<div id="banner"> <img src="images/loading.gif" id="pic"/> <ul id="nav"> </ul> <a href="#" class="btn" id="prev"><i class="iconfont icon-left"></i></a> <a href="#" class="btn" id="next"><i class="iconfont icon-right"></i></a> </div>
二、css代码
body,ul{ padding:0; margin:0;} body{ background:#e1e1e1;} li{ list-style:none;} a{ text-decoration:none;} #banner{ width:600px; height:375px; position:relative; margin:30px auto 0; background:#FFF1CE; text-align:center; } #nav{ position:absolute; width:100%; left:0; bottom:20px; } #nav li{ position:relative; display:inline-block; width:14px; height:14px; border-radius:50%; background-color:#fff; font-size:0; cursor:pointer; margin-right:8px; } #nav li.active{ background-color:#FF0;} .slt{ display:none; position:absolute; left:-45px; top:20px; border:3px solid #fff; } .slt:before{ content:""; position:absolute; border-bottom:6px solid #fff; border-left:5px solid transparent; border-right:5px solid transparent; left:50%; margin-left:-8px; top:-9px; } .btn{ position:absolute; width:50px; height:50px; line-height:50px; background:rgba(0,0,0,.2); border-radius:50%; top:50%; margin-top:-25px; transition:0.2s; } .btn:hover{ background:rgba(255,255,0,.7);} #prev{ left:20px;} #next{ right:20px;} .iconfont{ font-size:2rem; color:#fff; }
三、js代码
window.onload=function(){ var oBanner=document.getElementById("banner"); var oPic=document.getElementById("pic"); var oUl=document.getElementById("nav"); var aLi=oUl.getElementsByTagName("li"); var aSmallPic=oUl.getElementsByClassName("slt"); var oPrev=document.getElementById("prev"); var oNext=document.getElementById("next"); var aUrl=["images/org/1.jpg","images/org/2.jpg","images/org/3.jpg","images/org/4.jpg","images/org/5.jpg"]; var aSlt=["images/slt/1.jpg","images/slt/2.jpg","images/slt/3.jpg","images/slt/4.jpg","images/slt/5.jpg"]; var len=aUrl.length; //导航小圆点 for(var i=0;i<len;i++){ oUl.innerHTML+="<li>"+i+"<span class='slt'><img src='"+aSlt[i]+"'></span></li>" } //初始化 var num=0; showPic(); //点击上一张 oPrev.onclick=function(){ num--; if(num==-1){ num=len-1;} showPic(); } //点击下一张 oNext.onclick=function(){ num++; if(num%len==0){ num=0;} showPic(); } //点击小圆点切换 for(var i=0;i<aLi.length;i++){ aLi[i].index=i; aLi[i].onclick=function(){ num=this.index; //把当前的索引值赋值给num。 showPic(); } //鼠标经过出现缩缩略图 aLi[i].onmouseover=function(){ //alert(this.index); //alert(aSmallPic[this.index]); aSmallPic[this.index].style.display="block"; } aLi[i].onmouseout=function(){ aSmallPic[this.index].style.display="none"; } } //封装成函数 function showPic(){ oPic.src=aUrl[num]; for(var i=0;i<aLi.length;i++){ aLi[i].className=""; } aLi[num].className="active"; } }
案例下载地址:
链接: https://pan.baidu.com/s/1P1P_uqPcHhJRyd_FQ4gI4A 提取码: uxgy
发表评论:
◎请发表你卖萌撒娇或一针见血的评论,严禁小广告。