本篇文章给大家带来的内容是关于js实现图片轮播的代码实例(详细代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
broadcast.js
var carouselfigure = new object();//轮播图初始化定义函数carouselfigure.init = function(tmpobj){ //定义动画帧数(默认为:30) this.framenum = tmpobj.framenum !=undefined ? tmpobj.framenum : 30; //定义一次轮播的时间(默认为:0.2s) this.comsumetime = tmpobj.comsumetime !=undefined ? tmpobj.comsumetime : 200; //定义轮播图的宽高(默认宽高为:700px * 250px) this.cfwidth = tmpobj.cfwidth !=undefined ? tmpobj.cfwidth : 700; this.cfheight = tmpobj.cfheight !=undefined ? tmpobj.cfheight : 250; //定义轮播的风格 this.type = tmpobj.type == "small" ? 'small' : 'big'; //轮播图的按钮大小的宽高 this.assowwidth = tmpobj.assowwidth !=undefined ? tmpobj.assowwidth : 76; this.assowheight = tmpobj.assowheight !=undefined ? tmpobj.assowheight : 112; //判断用户是否初始化 this.initflag = true; //是否允许轮播图运行 this.applicationflag = true;}carouselfigure.start = function(){/** 第一部分类容:初始化整个轮播图和其运行数据*/(function(){ //1. 判断用户是否进行初始化 if(carouselfigure.initflag == undefined){ carouselfigure.init({}); } //2.1 初始化整个轮播图的div的基本大小 $("#carouselfigure").width(carouselfigure.cfwidth).height(carouselfigure.cfheight).css("position","relative"); //2.2 最中央的大图实际大小为: carouselfigure.imgwidth = carouselfigure.cfwidth * 2/3; carouselfigure.imgheight = carouselfigure.cfheight - 6; //3. 初始化轮播图按钮数据 carouselfigure.setassowdata = { prev:{ top:(carouselfigure.cfheight - carouselfigure.assowheight)/2 +"px", left:carouselfigure.cfwidth/6 - carouselfigure.assowwidth + 6 + "px", originurl:$("#carouselfigure > img:eq(0)").attr("src"), hoverurl:$("#carouselfigure > img:eq(1)").attr("src"), }, next:{ top:(carouselfigure.cfheight - carouselfigure.assowheight)/2 +"px", left:carouselfigure.cfwidth*5/6 + "px", originurl:$("#carouselfigure > img:eq(2)").attr("src"), hoverurl:$("#carouselfigure > img:eq(3)").attr("src"), } }; //4.1 初始化轮播图的url和src信息,存放到一个容器中 carouselfigure.imagecontains = []; $("#carouselfigure ul li img").each(function(){ var tmpobj = {src:$(this).attr("src"),href:$(this).attr("href")} carouselfigure.imagecontains.push(tmpobj); }); //4.2 对轮播图容器数据进行处理,当轮播图的个数3<= x <= 5 只能使用small风格类型。当轮播图的个数 x < 3 时, 停止运行 if(carouselfigure.imagecontains.length < 3){ carouselfigure.applicationflag = false; }else if(carouselfigure.imagecontains.length < 6){ carouselfigure.type = 'small'; } //4.3 对轮播容器数据按顺序进行增倍,保证有足够数据进行轮播 var objstr = json.stringify(carouselfigure.imagecontains); carouselfigure.imagecontains = carouselfigure.imagecontains.concat(json.parse(objstr)); //5.1 轮播图使用big风格时,页面七张图在静态页面中的属性值 carouselfigure.setviewposdata = new object; carouselfigure.setviewposdata.big = [ { width:carouselfigure.imgwidth*3/8, height:carouselfigure.imgheight*3/8, left:0, top:0, zindex:1, opacity:0.2, bordersize:0 },{ width:carouselfigure.imgwidth*3/8, height:carouselfigure.imgheight*3/8, left:0, top:carouselfigure.cfheight*5/16, zindex:2, opacity:0.7, bordersize:0 },{ width:carouselfigure.imgwidth*3/4, height:carouselfigure.imgheight*3/4, left:carouselfigure.cfwidth/18, top:carouselfigure.cfheight/8, zindex:3, opacity:0.9, bordersize:0 },{ width:carouselfigure.imgwidth, height:carouselfigure.imgheight, left:carouselfigure.cfwidth/6, top:0, zindex:4, opacity:1, bordersize:3 },{ width:carouselfigure.imgwidth*3/4, height:carouselfigure.imgheight*3/4, left:carouselfigure.cfwidth * 4/9, top:carouselfigure.cfheight/8, zindex:3, opacity:0.9, bordersize:0 },{ width:carouselfigure.imgwidth*3/8, height:carouselfigure.imgheight*3/8, left:carouselfigure.cfwidth * 3/4, top:carouselfigure.cfheight*5/16, zindex:2, opacity:0.7, bordersize:0 },{ width:carouselfigure.imgwidth*3/8, height:carouselfigure.imgheight*3/8, left:carouselfigure.cfwidth * 3/4, top:0, zindex:1, opacity:0.2, bordersize:0 },]; //5.2 轮播图使用small风格时,页面5张图在静态页面中的属性值 carouselfigure.setviewposdata.small = [ { width:carouselfigure.imgwidth*3/8, height:carouselfigure.imgheight*3/8, left:0, top:0, zindex:1, opacity:0.2, bordersize:0 },{ width:carouselfigure.imgwidth*3/4, height:carouselfigure.imgheight*3/4, left:0, top:carouselfigure.cfheight/8, zindex:2, opacity:0.9, bordersize:0 },{ width:carouselfigure.imgwidth, height:carouselfigure.imgheight, left:carouselfigure.cfwidth/6, top:0, zindex:3, opacity:1, bordersize:3 },{ width:carouselfigure.imgwidth*3/4, height:carouselfigure.imgheight*3/4, left:carouselfigure.cfwidth * 1/2, top:carouselfigure.cfheight/8, zindex:2, opacity:0.9, bordersize:0 },{ width:carouselfigure.imgwidth*3/8, height:carouselfigure.imgheight*3/8, left:carouselfigure.cfwidth * 3/4, top:0, zindex:1, opacity:0.2, bordersize:0 }];}());//验证初始化是否成功,否则全部隐藏,结束进程if(!carouselfigure.applicationflag){ $("#carouselfigure").css("display","none"); return false;}/** 第二部分: 对轮播图的箭头进行初始化(包括页面中的静态布局,和点击事件和悬浮事件)*/ carouselfigure.initassow = function (assow,direction){ //实现轮播图箭头的静态样式、悬浮事件和点击事件 assow.css({ position:"absolute", left:this.setassowdata[direction].left, top:this.setassowdata[direction].top, "z-index":4 }) .mouseover(function(){ //鼠标悬浮切换图片 $(this).attr("src",carouselfigure.setassowdata[direction].hoverurl); }).mouseout(function(){ $(this).attr("src",carouselfigure.setassowdata[direction].originurl); }).click(function(){ //记录点击事件的次数 carouselfigure.clickarrowfun(direction); }); } //调用初始化轮播图函数--实现左右箭头全部功能 $("#carouselfigure > img:odd").css("display","none"); carouselfigure.initassow($("#carouselfigure > img:eq(0)"),"prev"); carouselfigure.initassow($("#carouselfigure > img:eq(2)"),"next");/** 第三部分: 对所有的轮播图进行页面静态布局*/ //初始化某张轮播图的方法 carouselfigure.initimages = function (i,setviewposdata,imagecontains){ $("#carouselfigure ul img:eq("+i+")").css({ position:"absolute", width:setviewposdata[i].width + "px", height:setviewposdata[i].height + "px", top:setviewposdata[i].top + "px", left:setviewposdata[i].left + "px", display:"block", "z-index":setviewposdata[i].zindex, opacity:setviewposdata[i].opacity, }).attr({ src:imagecontains[i].src, href:imagecontains[i].href }).click(function(){ location.href = $(this).attr("href"); //绑定图片点击跳转事件 }); if( (i == 0 || i == 6) && this.type == 'big'){ //第1张图片和第7张图片不可见 $("#carouselfigure ul img:eq("+i+")").css("display","none"); }else if(i == 3 && this.type == 'big'){ //为正中央图片加边框 $("#carouselfigure ul img:eq("+i+")").css("border","3px solid #fff"); }else if( (i == 0 || i == 4)&&this.type == 'small'){//第1张图片和第5张图片不可见 $("#carouselfigure ul img:eq("+i+")").css("display","none"); }else if(i == 2 && this.type == 'small'){ //为正中央图片加边框 $("#carouselfigure ul img:eq("+i+")").css("border","3px solid #fff"); } } /** 实现七张图片的静态样式: 清空原有的li标签,然后新建<li><img></li>来存放每张轮播图。 */ $("#carouselfigure ul").empty(); for(var i = 0; i < carouselfigure.setviewposdata[carouselfigure.type].length; i++){ $("#carouselfigure ul").append('<li><img src=""></li>'); carouselfigure.initimages(i,carouselfigure.setviewposdata[carouselfigure.type],carouselfigure.imagecontains); } /** 第四部分: 形成轮播动画效果*/ /* 设置clickarrow变量:作为动画的标示位,让其进行队列化,必须本次动画完成,才能进行下次动画轮播。 1. 当为负数时向前轮播,比如:-5向前轮播五次动画; 2. 当为正数时向后轮播,同理; 3. 当等于0时,此时没有进行轮播。 */ carouselfigure.clickarrow = 0 ; // 处理动画队列方法: carouselfigure.clickarrowfun = function (direction){ if(this.clickarrow == 0){ this.startanimation(direction); } if(direction == "prev"){ this.clickarrow--; }else if(direction == "next"){ this.clickarrow++; } } /** 开始一次轮播动画 其中composeranimatenum变量为: 在一次动画中,记录每张轮播图完成的标识符; 在big风格类型中:当其值为6时说明此次动画全部完成 在small风格类型中:当其值为4时说明此次动画全部完成 */ carouselfigure.startanimation = function(direction){ this.completeanimationnum = 0; if(direction == "prev"){ //从最后一张图片到第一张轮播图片,分别向前移动,首先让最后一张图片可视 if(this.type == "big"){ $("#carouselfigure ul img:eq(6)").css("display","block"); }else{ $("#carouselfigure ul img:eq(4)").css("display","block"); } for(var i = this.setviewposdata[this.type].length - 1 ; i > 0; i --){ this.startmove(i, this.setviewposdata[this.type][i],this.setviewposdata[this.type][i-1],direction); } }else if(direction == "next"){//从第一张图片到倒数第二张图片,分别向后移动,首先让第一张轮播图片可视 $("#carouselfigure ul img:eq(0)").css("display","block"); for(var i = 0 ; i < this.setviewposdata[this.type].length - 1; i ++){ this.startmove(i, this.setviewposdata[this.type][i],this.setviewposdata[this.type][i+1],direction); } } } /** 功能:让一张轮播图从某一个状态变换到另一个状态 (包括位子、透明度、边框等等属性) */ carouselfigure.startmove = function (index,startobj,endobj,direction){ //所有属性的增量 var increaseleft = endobj.left - startobj.left; var increasetop = endobj.top - startobj.top; var increasewidth = endobj.width - startobj.width; var increaseheight = endobj.height - startobj.height; var increaseopacity = endobj.opacity - startobj.opacity; var increasebordersize = endobj.bordersize - startobj.bordersize; var time = this.framenum; //共总帧数 var i = 1; //帧数的记步标志索引 //定义函数:一帧到下一帧的变化过程 function movestep(){ settimeout(function(){ var tmpobj = $("#carouselfigure ul img:eq("+index+")"); //每一帧时图片的属性改变量 tmpobj.css({ width:startobj.width + (increasewidth/time) * i + "px", height:startobj.height + (increaseheight/time) * i + "px", top:startobj.top + (increasetop/time) * i + "px", left:startobj.left + (increaseleft/time) * i + "px", border:startobj.bordersize + (increasebordersize/time) * i + "px solid #fff", opacity:startobj.opacity + (increaseopacity/time) * i, }); //当小于30帧时,继续递归,直至调用30次完成动画效果 if( i++ <time){ if(i == 15){//轮播图每张图片的层级关系处理方式 var zindex = new object; zindex.big = {prev:[null,1,2,3,4,3,2],next:[2,3,4,3,2,1]}; zindex.small = {prev:[null,1,2,3,2,1],next:[2,3,2,1]} tmpobj.css("z-index",zindex[carouselfigure.type][direction][index]); } movestep(); //递归 }else{ carouselfigure.completeanimation(direction); //完成一张图片的动画 } },carouselfigure.comsumetime/time); } movestep(); //开始动画 }/** 第五部分: 当每次轮播动画结束后的处理函数 1. 首先,判断一次轮播动画是否结束; 2. 对容器数据(imagecontains)进行调整,形成队列 3. 重新渲染整个轮播图的静态页面 4. 通过clickarrow,处理动画队列*/ carouselfigure.completeanimation = function(direction){ this.completeanimationnum++; //表示完成一次动画 if(this.completeanimationnum == (this.setviewposdata[this.type].length -1)){ //重构用户自定义数据的顺序; if(direction == "prev"){ var tmp = this.imagecontains.shift(); this.imagecontains.push(tmp); }else if(direction == "next"){ var tmp = this.imagecontains.pop(); this.imagecontains.unshift(tmp); } //重新渲染轮播图七张图片的静态样式 for(var i = 0; i < this.setviewposdata[this.type].length; i++){ this.initimages(i,this.setviewposdata[this.type],this.imagecontains); } //解决边框的bug的问题 if(this.type == 'big'){ $("#carouselfigure ul li img:even").css("border","0px"); }else{ $("#carouselfigure ul li img:odd").css("border","0px"); } //处理动画队列 if(direction == "prev"){ this.clickarrow++; }else if(direction == "next"){ this.clickarrow--; } if(this.clickarrow > 0){ this.startanimation(direction); }else if(this.clickarrow < 0){ this.startanimation(direction); } } }};
broadcast.html
<!doctype html><html> <head> <meta charset="utf-8"> <title>轮播图实例</title> <script src="js/jquery-3.3.1.min.js"></script> </head> <style> *{ padding:0px; margin:0px; } ul{ list-style:none; } body{ background:#eee; padding:10px; } #carouselfigure{ } </style> <body> <div id="carouselfigure"> <img src="img/prev.png" width="76" height="112" /> <img src="img/prev.png" /> <img src="img/next.png" width="76" height="112" /> <img src="img/next.png" /> <ul> <li><img src="img/1.jpg" width="500" height="250"></li> <li><img src="img/2.jpg"></li> <li><img src="img/3.jpg"></li> <li><img src="img/4.jpg"></li> <li><img src="img/5.jpg"></li> <li><img src="img/6.jpg"></li> <li><img src="img/7.jpg"></li> <li><img src="img/8.jpg"></li> </ul> </div> </body></html><script src="js/broadcast.js"></script><script> $(function(){ //对轮播图进行初始化 carouselfigure.init({type:'small',comsumetime:1000}); carouselfigure.start(); })</script>
实现效果
相关推荐:
怎么用简单的js代码实现轮播图滚动效果?
koa-router是什么?详解koa-router的大致结构与运行流程
以上就是js实现图片轮播的代码实例(详细代码)的详细内容。