使用原生的javascript来实现轮播图
下面看下js轮播图的实现代码,具体代码如下所示:
<!DOCTYPEhtml> <htmllang="en"> <head> <metacharset="UTF-8"> <title></title> <styletype="text/css"> *{ padding:0; margin:0; list-style:none; border:0; } .all{ width:500px; height:200px; padding:7px; border:1pxsolid#ccc; margin:100pxauto; position:relative; } .screen{ width:500px; height:200px; overflow:hidden; position:relative; } .screenli{ width:500px; height:200px; overflow:hidden; float:left; } .screenul{ position:absolute; left:0; top:0px; width:3000px; } .allol{ position:absolute; right:10px; bottom:10px; line-height:20px; text-align:center; } .allolli{ float:left; width:20px; height:20px; background:#fff; border:1pxsolid#ccc; margin-left:10px; cursor:pointer; } .allolli.current{ background:yellow; } #arr{ display:none; } #arrspan{ width:40px; height:40px; position:absolute; left:5px; top:50%; margin-top:-20px; background:#000; cursor:pointer; line-height:40px; text-align:center; font-weight:bold; font-family:'黑体'; font-size:30px; color:#fff; opacity:0.3; border:1pxsolid#fff; } #arr#right{ right:5px; left:auto; } </style> </head> <body> <divclass="all"id='box'> <divclass="screen"> <ul> <li><imgsrc="images/1.jpg"width="500"height="200"/></li> <li><imgsrc="images/2.jpg"width="500"height="200"/></li> <li><imgsrc="images/3.jpg"width="500"height="200"/></li> <li><imgsrc="images/4.jpg"width="500"height="200"/></li> <li><imgsrc="images/5.jpg"width="500"height="200"/></li> </ul> <ol> </ol> </div> <divid="arr"><spanid="left"><</span><spanid="right">></span></div> </div> <script> function$(element){ returndocument.getElementById(element); } varbox=$("box"); varscreen=box.children[0]; varul=screen.children[0]; varulLis=ul.children; varol=screen.children[1]; vararr=$("arr"); varleft=$("left"); varright=$("right"); //动态创建小图标 for(vari=0;i<ulLis.length;i++){ varli=document.createElement("li"); li.innerHTML=i+1; ol.appendChild(li); } //设置这些个小图标 varolLis=ol.children; varimgWidth=screen.offsetWidth; for(varj=0;j<olLis.length;j++){ olLis[j].index=j; olLis[j].onmouseover=function(){ //排他思想 for(vari=0;i<olLis.length;i++){ olLis[i].className=""; } this.className="current"; vartarget=-imgWidth*this.index; cutton(ul,target,20); //为了让点击事件和小面的小图标能够一一对应,设置他们的索引值相同 pic=square=this.index; } } //给小图标设置一个初始样式 ol.children[0].className="current"; //给ul追加一张图 ul.appendChild(ul.children[0].cloneNode(true)); //设置箭头的显示与隐藏 box.onmouseover=function(){ arr.style.display="block"; //鼠标放上去的时候,不再自动滚动 clearInterval(timer); } box.onmouseout=function(){ arr.style.display="none"; //鼠标离开的时候,继续自动滚动 timer=setInterval(playNext,1000); } //设置点击左右小箭头的事件且要求小图标要跟着变化 //1.设置点击右侧箭头 varpic=0;//记录当前为第几项用 varsquare=0;//记录小图标的索引值 /*right.onclick=function(){//存在的问题是当移动到最后一张的时候,无法跳转到第一张 pic++; vartarget=-pic*imgWidth; cutton(ul,target,20); }*/ //方法改进 /*right.onclick=function(){ //先对pic做一个判断,当pic的值为5的时候,实现一个跳转 if(pic==ulLis.length-1){ ul.style.left=0; pic=0; } pic++; vartarget=-pic*imgWidth; cutton(ul,target,20); if(square==olLis.length-1){ square=-1;//下面会加一,就变成了0 } square++; //排他思想 for(vari=0;i<olLis.length;i++){ olLis[i].className=""; } olLis[square].className="current"; }*/ //使用封装函数 right.onclick=function(){ playNext(); } //2.设置点击左侧箭头 left.onclick=function(){//要判断一下当pic为零时的情况 if(pic==0){ ul.style.left=-imgWidth*(ulLis.length-1)+"px";//要记得加单位 pic=ulLis.length-1;//给pic重新赋一个值 } pic--; vartarget=-pic*imgWidth; cutton(ul,target,20); //设置小图标样式 if(square==0){ square=olLis.length; } square--; for(vari=0;i<olLis.length;i++){ olLis[i].className=""; } olLis[square].className="current"; } //设置自动滚动 //1.封装点击右侧小箭头事件 functionplayNext(){ //先对pic做一个判断,当pic的值为5的时候,实现一个跳转 if(pic==ulLis.length-1){ ul.style.left=0; pic=0; } pic++; vartarget=-pic*imgWidth; cutton(ul,target,20); if(square==olLis.length-1){ square=-1;//下面会加一,就变成了0 } square++; //排他思想 for(vari=0;i<olLis.length;i++){ olLis[i].className=""; } olLis[square].className="current"; } //2.调用这个封装的函数,并且设置一个间歇性计时器 vartimer=null; timer=setInterval(playNext,1000); //封装函数 functioncutton(obj,target,stp){ clearInterval(obj.timer); obj.timer=setInterval(function(){ varstep=stp; step=obj.offsetLeft>target?-step:step; if(Math.abs(obj.offsetLeft-target)>=Math.abs(step)){ obj.style.left=obj.offsetLeft+step+"px"; }else{ obj.style.left=target+"px"; clearInterval(obj.timer); } },15) } </script> </body> </html>
补充:原生javascript实现banner图自动轮播切换
一般在做banner轮播图的时候都是用jquery,因为代码少,方便,不需要花费很长的时间去获取某个元素作为变量,然后再进行操作,只要一个$就搞定了。但是今天我用原生的javascript做了一下这个轮播效果,感觉还行,以下是部分js源代码,仅供参考!文章底部查看效果演示。
1、鼠标离开banner图,每隔2s切换一次;
2、鼠标滑过下方的小按钮,可以切换图片;
3、鼠标点击左右按钮,可以切换图片。
varoPic,oLi,anniu,aLi,aLength,num,timer,oG,_index,oSpan; window.onload=function(){ oPic=document.getElementsByClassName("pic")[0]; oLi=oPic.getElementsByTagName("li"); anniu=document.getElementsByClassName("anniu")[0]; aLi=anniu.getElementsByTagName("li"); aLength=aLi.length; num=0; oG=document.getElementsByClassName("g")[0]; oSpan=oG.getElementsByTagName("span"); oLeft=oSpan[0]; oRight=oSpan[1]; start(); oG.onmouseover=end; oG.onmouseout=start; for(varj=0;j<aLength;j++){ aLi[j].index=j; aLi[j].onmouseover=change; } oRight.onclick=time; oLeft.onclick=times; } //自动轮播开始或结束 functionstart(){ timer=setInterval(time,2000); hide(); } functionend(){ clearInterval(timer); show(); } //图片切换++ functiontime(){ for(vari=0;i<aLength;i++){ oLi[i].style.display="none"; aLi[i].className=""; } num++; num=num%4; oLi[num].style.display="block"; aLi[num].className="on"; } //图片切换-- functiontimes(){ for(vari=0;i<aLength;i++){ oLi[i].style.display="none"; aLi[i].className=""; } num--; num=(num+4)%4; oLi[num].style.display="block"; aLi[num].className="on"; } //鼠标滑过按钮,图片轮播 functionchange(){ _index=this.index; for(vark=0;k<aLength;k++){ aLi[k].className=""; oLi[k].style.display="none"; } aLi[_index].className="on"; oLi[_index].style.display="block"; } //左右按钮显示或隐藏 functionshow(){ oSpan[0].style.display="block"; oSpan[1].style.display="block"; } functionhide(){ oSpan[0].style.display="none"; oSpan[1].style.display="none"; }
以上所述是小编给大家介绍的使用原生的javascript来实现轮播图,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!