原生JS轮播图插件
代码分两个部分:1、HTML部分,根据注释处理即可;2、play.js插件部分,引到HTML里面即可。
1、HTML部分:
<!DOCTYPEhtml> <htmllang="en"> <head> <metacharset="UTF-8"> <title></title> <style>/*style标签及其内的内容,在实际项目中可以不要*/ *{ margin:0; padding:0; } </style> </head> <body> <!--body标签里的内容,没说可以增减或更改的,不要增减或更改--> <divid="box"> <div> <!--以下是可增减区域--> <div><imgsrc="img/banner1.jpg"alt=""/></div> <div><imgsrc="img/banner2.jpg"alt=""/></div> <div><imgsrc="img/banner3.jpg"alt=""/></div> <div><imgsrc="img/banner4.jpg"alt=""/></div> <div><imgsrc="img/banner5.jpg"alt=""/></div> <div><imgsrc="img/banner6.jpg"alt=""/></div> <div><imgsrc="img/banner7.jpg"alt=""/></div> <!--以上是可增减区域--> </div> </div> <scriptsrc="play.js"></script> <script> varplay=newBanner('1000px','500px'); /*这两个参数分别是轮播区的宽和高,可以根据需要更改*/ </script> </body> </html>
2、play.js插件部分
functionBanner(width,height){/*类*/ /*以下最外层div*/ varthat=this; this.width=width; this.height=height; this.oBox=document.getElementById("box"); this.oBox.style.width=width; this.oBox.style.height=height; this.oBox.style.margin="0auto"; this.oBox.style.overflow="hidden"; this.oBox.style.position="relative"; /*以下轮播区的div*/ this.oBoxInner=this.oBox.getElementsByTagName('div')[0]; this.oBoxInner.style.height=height; this.oBoxInner.style.position="absolute"; this.oBoxInner.style.left=0; this.oBoxInner.style.right=0; this.aDiv=this.oBoxInner.getElementsByTagName('div');//单个轮播图 this.oBoxInner.innerHTML/*轮播区的内部后面*/+=this.aDiv[0].outerHTML/*第一个轮播图片的外部*/; this.oBoxInner.style.width=parseFloat(width)*this.aDiv.length+"px";//轮播区的宽度 for(vari=0;i<this.aDiv.length;i++){/*遍历轮播区的每个div及其内部的图片*/ this.aDiv[i].style.width=width; this.aDiv[i].style.height=height; this.aDiv[i].style.float="left"; this.aDiv[i].aImg=this.aDiv[i].getElementsByTagName('img')[0]; this.aDiv[i].aImg.style.width="100%"; this.aDiv[i].aImg.style.height="100%"; } /*以下是焦点区部分(定位在轮播区的右下方)*/ varoUl=document.createElement('ul'); for(i=0;i<this.aDiv.length-1;i++){ oUl.innerHTML+='<liclass='+i+'===1?"on":null></li>'; } this.oBox.appendChild(oUl); this.oUl=this.oBox.getElementsByTagName('ul')[0]; this.oUl.style.position="absolute"; this.oUl.style.right="10px"; this.oUl.style.bottom="10px"; this.aLi=this.oUl.getElementsByTagName('li'); for(i=0;i<this.aLi.length;i++){/*遍历焦点区的每个焦点*/ this.aLi[i].style.width="18px"; this.aLi[i].style.height="18px"; this.aLi[i].style.float="left"; this.aLi[i].style.listStyle="none"; this.aLi[i].style.background="green"; this.aLi[i].style.borderRadius="50%"; this.aLi[i].style.marginLeft="10px"; this.aLi[i].style.cursor="pointer"; } /*以下是向左向右两个箭头式按钮*/ for(i=0;i<2;i++){ varoA=document.createElement('a'); oA.href="javascript:;"rel="externalnofollow" this.oBox.appendChild(oA); } /*以下是左按钮(点击它,图片向左运动)*/ this.oBtnL=this.oBox.getElementsByTagName('a')[0]; this.oBtnL.style.width="30px"; this.oBtnL.style.height="30px"; this.oBtnL.style.position="absolute"; this.oBtnL.style.top=(parseFloat(this.height)/2-15)+"px"; this.oBtnL.style.left="30px"; this.oBtnL.style.border="10pxsolidred"; this.oBtnL.style.borderLeft="none"; this.oBtnL.style.borderBottom="none"; this.oBtnL.style.opacity="0.3"; this.oBtnL.style.filter="alpha(opacity=30)"; this.oBtnL.style.display="none"; this.oBtnL.style.transform="rotate(-135deg)"; this.oBtnL.onclick=function(){ if(that.step<=0){ that.step=that.aDiv.length-1; that.css(that.oBoxInner,'left',-that.step*parseFloat(that.width)); } that.step--; that.animate(that.oBoxInner,{left:-that.step*parseFloat(that.width)}); that.bannerTip(); }; /*以下是右按钮(点击它,图片向右运动)*/ this.oBtnR=this.oBox.getElementsByTagName('a')[1]; this.oBtnR.style.width="30px"; this.oBtnR.style.height="30px"; this.oBtnR.style.position="absolute"; this.oBtnR.style.top=(parseFloat(this.height)/2-15)+"px"; this.oBtnR.style.right="30px"; this.oBtnR.style.border="10pxsolidred"; this.oBtnR.style.borderLeft="none"; this.oBtnR.style.borderBottom="none"; this.oBtnR.style.opacity="0.3"; this.oBtnR.style.filter="alpha(opacity=30)"; this.oBtnR.style.display="none"; this.oBtnR.style.transform="rotate(45deg)"; this.oBtnR.onclick=function(){ if(that.step>=that.aDiv.length-1){ that.step=0; that.css(that.oBoxInner,'left',0) } that.step++; that.animate(that.oBoxInner,{left:-that.step*parseFloat(that.width)},1000); that.bannerTip(); }; /*以下是其它*/ this.step=0;//记录每次运动 this.timer=null;//定时器 this.init();//初始化轮播图 } Banner.prototype={//类的原型 constructor:Banner, /*getCss:获取元素的属性值*/ getCss:function(curEle,attr){ varval=null; varreg=null; if(getComputedStyle){//标准浏览器 val=getComputedStyle(curEle,false)[attr]; }else{//非标准浏览器 if(attr==='opacity'){ val=curEle.currentStyle.filter;//'alpha(opacity=10)' reg=/^alpha\(opacity[=:](\d+)\)$/i; returnreg.test(val)?reg.exec(val)[1]/100:1; } val=curEle.currentStyle[attr]; } reg=/^[+-]?((\d|([1-9]\d+))(\.\d+)?)(px|pt|rem|em)$/i; returnreg.test(val)?parseInt(val):val; }, /*setCss:设置元素的属性值*/ setCss:function(curEle,attr,value){ if(attr==='float'){ curEle.style.cssFloat=value; curEle.style.styleFloat=value; return; } if(attr==='opacity'){ curEle.style.opacity=value; curEle.style.filter='alpha(opacity='+(value*100)+')'; return; } varreg=/^(width|height|top|right|bottom|left|((margin|padding)(top|right|bottom|left)?))$/i; if(reg.test(attr)){ if(!(value==='auto'||value.toString().indexOf('%')!==-1)){ value=parseFloat(value)+'px'; } } curEle.style[attr]=value; }, /*setGroupCss:设置元素的一组属性值*/ setGroupCss:function(curEle,options){ if(options.toString()!=='[objectObject]')return; for(varattrinoptions){ this.setCss(curEle,attr,options[attr]); } }, /*css:getCss、setCss、setGroupCss的合写*/ css:function(){ if(typeofarguments[1]==='string'){ if(typeofarguments[2]==='undefined'){ returnthis.getCss(arguments[0],arguments[1]);//当第三个参数不存在,是获取; }else{ this.setCss(arguments[0],arguments[1],arguments[2]);//当第三个参数存在时,是设置; } } if(arguments[1].toString()==='[objectObject]'){ this.setGroupCss(arguments[0],arguments[1]);//设置元素的一组属性值 } }, /*animate:轮播图动画函数*/ animate:function(curEle,target,duration){ /*1.定义动画的运行轨迹*/ functiontmpEffect(t,b,c,d){ returnb+c/d*t;//开始时的位置+总变化/总时间*已经过去的时间 } /*2.为公式的每个参数做准备*/ varbegin={}; varchange={}; for(varattrintarget){ begin[attr]=this.css(curEle,attr); change[attr]=target[attr]-begin[attr]; } duration=duration||700; vartime=0; varthat=this; /*3.开启一个定时器,让时间不断累加;根据时间和公式,求出最新的位置;*/ clearInterval(curEle.timer);//开起一个定时器前,先关闭没用的定时器 curEle.timer=setInterval(function(){ time+=10; /*4.定时器停止运动的条件(time>=duration)*/ if(time>=duration){ that.css(curEle,target); clearInterval(curEle.timer); return; } /*5.拿到每个属性的最新值,并且赋值给元素对应的属性;*/ for(varattrintarget){ varcurPos=tmpEffect(time,begin[attr],change[attr],duration); that.css(curEle,attr,curPos); } },10) }, /*初始化轮播图*/ init:function(){ var_this=this; /*1.开启自动轮播*/ this.timer=setInterval(function(){ _this.autoMove(); },2000); /*2.开启焦点,每个焦点与每张轮播图对应*/ this.bannerTip(); /*3.鼠标移入轮播区,轮播暂停;鼠标移出轮播区,轮播恢复*/ this.over_out(); /*4.点击焦点,响应对应的轮播图片*/ this.handleChange(); }, handleChange:function(){ for(vari=0;i<this.aLi.length;i++){ this.aLi[i].index=i; varthat=this; this.aLi[i].onclick=function(){ that.step=this.index; that.animate(that.oBoxInner,{left:-that.step*parseFloat(that.width)}); that.bannerTip(); } } }, autoMove:function(){ if(this.step>=this.aDiv.length-1){ this.step=0; this.css(this.oBoxInner,'left',0) } this.step++; this.animate(this.oBoxInner,{left:-this.step*parseFloat(this.width)},1000); this.bannerTip(); }, bannerTip:function(){ vartmpStep=this.step>=this.aLi.length?0:this.step; for(vari=0;i<this.aLi.length;i++){ this.aLi[i].className=i===tmpStep?'on':null; if(this.aLi[i].className==="on"){ this.aLi[i].style.background="red"; }else{ this.aLi[i].style.background="green"; } } }, over_out:function(){ var_this=this; _this.oBox.onmouseover=function(){ clearInterval(_this.timer); _this.oBtnL.style.display='block'; _this.oBtnR.style.display='block'; }; _this.oBox.onmouseout=function(){ _this.timer=setInterval(function(){ _this.autoMove() },2000); _this.oBtnL.style.display='none'; _this.oBtnR.style.display='none'; } } };
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持毛票票!