轮播是html页面中比较常见的一种展现形式,也是基础,把轮播图做好,是排版中比较关键的
1.首先是轮播的html元素放置;做轮播之前,要有一个初步的认识
2.每个元素的位置怎样摆放,也是很关键的,这里所说的布局
3.js轮播的动态展现过程
做好以上三步,轮播基本上就出来的
首先 .html代码:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 7 <link rel="stylesheet" href="./css/wufenstyle.css"> 8 <script src="./js/jquery.js"></script> 9 <script src="./js/wufeng.js"></script> 10 </head> 11 <body> 12 <div class="showbox"> 13 <div class="imgbox"> 14 <img src="./img/porsche-normal5.jpg"> 15 <img src="./img/porsche-normal1.jpg"> 16 <img src="./img/porsche-normal2.jpg"> 17 <img src="./img/porsche-normal3.jpg"> 18 <img src="./img/porsche-normal4.jpg"> 19 <img src="./img/porsche-normal5.jpg"> 20 <img src="./img/porsche-normal1.jpg"> 21 </div> 22 <div class="pre" > 23 <span></span> 24 </div> 25 <div class="aft" > 26 <span></span> 27 </div> 28 <ul class="odot"> 29 <ul class="lis"> 30 <li class="active"></li> 31 <li class="changtai"></li> 32 <li class="changtai"></li> 33 <li class="changtai"></li> 34 <li class="changtai"></li> 35 </ul> 36 </ul> 37 </div> 38 </body> 39 </html>
然后是 .css 页面布局
1 *{ 2 margin:0; 3 padding:0; 4 } 5 img{ 6 margin:0; 7 padding:0; 8 } 9 li{ 10 list-style-type: none; 11 } 12 .active{ 13 background:url('../img/active.png') no-repeat 0 0; 14 } 15 .changtai{ 16 background:url('../img/none.png') no-repeat 0 0; 17 } 18 div.showbox{ 19 position:relative; 20 width:100%; 21 height:800px; 22 overflow: hidden; 23 } 24 div.imgbox{ 25 position:absolute; 26 width:200000px; 27 height:100%; 28 left:0; 29 } 30 div.imgbox img{ 31 height:100%; 32 position: relative; 33 float:left; 34 } 35 div.showbox div.pre{ 36 position: relative; 37 float:left; 38 width:60px; 39 height:100%; 40 } 41 div.showbox div.pre span{ 42 position: absolute; 43 left:0; 44 right:0; 45 top:0; 46 bottom: 0; 47 margin:auto; 48 width:40px; 49 height:60px; 50 background: url('../img/toleft01.png') no-repeat 0 0; 51 cursor:pointer; 52 cursor:hand; 53 } 54 div.showbox div.aft{ 55 position: relative; 56 float:right; 57 width:60px; 58 height:100%; 59 } 60 div.showbox div.aft span{ 61 position: absolute; 62 left:0; 63 right:0; 64 top:0; 65 bottom: 0; 66 margin:auto; 67 width:40px; 68 height:60px; 69 background: url('../img/toright01.png') no-repeat 0 0; 70 cursor:pointer; 71 cursor:hand; 72 } 73 div.showbox ul.odot{ 74 position: absolute; 75 width:100%; 76 height:100px; 77 bottom: 15px; 78 } 79 div.showbox ul.odot ul.lis{ 80 position: absolute; 81 left:0; 82 right:0; 83 top:0; 84 bottom: 0; 85 margin:auto; 86 width:200px; 87 height:30px; 88 } 89 div.showbox ul.odot ul.lis li{ 90 display: inline-block; 91 width:15px; 92 height:15px; 93 margin:5px; 94 cursor:pointer; 95 cursor:hand; 96 }
最后是 .js代码:
1 $(function(){ 2 var O_showbox = $('div.showbox'); 3 var O_imgbox = $('div.showbox div.imgbox'); 4 var O_imgs = $('div.showbox div.imgbox img'); 5 var O_pre = $('div.showbox div.pre'); 6 var O_aft = $('div.showbox div.aft'); 7 var O_lis = $('div.showbox ul.odot ul.lis li'); 8 var timer = null; 9 var O_index = 1; 10 var oshow_width = O_showbox.width(); 11 var O_imgs_len = O_imgs.length; 12 O_imgs.each(function(){ 13 $(this).css('width',oshow_width+'px'); 14 }); 15 O_imgbox.css('width',oshow_width*O_imgs_len +'px'); 16 17 O_imgbox.css('left','-' + oshow_width + 'px'); 18 O_aft.on('click',function(){ 19 O_index++; 20 var target_left = -O_index*oshow_width; 21 O_imgbox.stop(false,true).animate({'left':target_left+'px'},function(){ 22 if(O_index >= O_imgs_len-1){ 23 O_index=1; 24 O_imgbox.css('left','-' + oshow_width + 'px'); 25 }; 26 O_lis.removeClass('active').removeClass('changtai'); 27 O_lis.eq(O_index-1).addClass('active').siblings().addClass('changtai'); 28 }); 29 }); 30 O_pre.on('click',function(){ 31 O_index--; 32 var target_left = -O_index*oshow_width; 33 O_imgbox.stop(false,true).animate({'left':target_left+'px'},function(){ 34 if(O_index <= 0 ){ 35 O_index=O_imgs_len-2; 36 O_imgbox.css('left','-' + oshow_width*O_index + 'px'); 37 }; 38 O_lis.removeClass('active').removeClass('changtai'); 39 O_lis.eq(O_index-1).addClass('active').siblings().addClass('changtai'); 40 }); 41 }); 42 function aoto_play(){ 43 timer = setInterval(function(){ 44 O_aft.click(); 45 },1500) 46 }; 47 aoto_play(); 48 O_lis.on('click',function(){ 49 var index= $(this).index(); 50 O_index =index + 1; 51 var target_left = -O_index*oshow_width; 52 O_imgbox.stop(false,true).animate({'left':target_left+'px'}); 53 O_lis.removeClass('active').removeClass('changtai'); 54 O_lis.eq(O_index-1).addClass('active').siblings().addClass('changtai'); 55 }); 56 O_showbox.hover(function(){ 57 clearInterval(timer); 58 },function(){ 59 aoto_play(); 60 }); 61 62 // 自适应 63 var Oz_width = 1903; //初始状态的宽度 64 var Oz_height = 800; //初始状态的高度 65 var Oz_ratio = Oz_height/Oz_width ; // 自适应高宽比率 66 67 function zishiying(){ 68 var curwidth = $(document.body).width() ; 69 //初始化 70 // 设定显示divbox的宽为视窗宽度,高度为宽度按比例缩放 71 O_showbox.width( curwidth+'px'); 72 O_showbox.height( parseInt(curwidth*Oz_ratio) + 'px' ); 73 //设置图片的高度和宽度 74 O_imgs.each(function(){ 75 $(this).css('width',oshow_width+'px'); 76 $(this).css('height',parseInt(curwidth*Oz_ratio) + 'px' ); 77 }); 78 // 设定imgbox的高度和宽度 79 O_imgbox.css('width',curwidth*O_imgs_len +'px'); 80 O_imgbox.css('height',parseInt(curwidth*Oz_ratio) + 'px' ); 81 82 } 83 zishiying(); 84 $(window).resize(function(){ 85 zishiying(); 86 // window.location.reload(); 87 }); 88 });
以上三个部分完成,轮播就OK了;
下面对代码进行说明:html和css部分就略过了,说一下js的部分
1. 首先:获取元素及初始化数据
2. 写点击事件:点击展示下一页和上一页,这里主要是和索引相关,下一页则索引自加,上一页则索引自减;
利用animate的移动规则,先移动,然后判断索引;确认是否已经到最后一页,或者第一页
因为我们做的是无缝轮播,图片放置时第一页和最后一页是重复的,这样做一个判断,并作出相应的处理,使图片移动时,看起来是一种无缝状态
3. 设定自动播放和小点点击事件,轮播停止和重新开始事件
4.设定轮播图片的自适应:
综合:
基本上可以实现轮播自适应,但是有一个问题,就是在图片轮播进时,改变浏览器的大小时,不太匹配,有时候会把图片显示不全,或者显示第一张图片的一般,另一张图片的一部分;
如以上第4点,在$(window).resize()事件中加入window.location.reload() 刷新时,显示不全的问题得到解决了,但是刷新时,会出现空白闪动,这给人的体验不太好
总结一下:除了自适应有问题外,轮播基本上实现了
自适应的问题暂时还不知道怎样解决,欢迎各位看到后留言,告诉我自适应的方法
附:后记:11/11 再次测试时:
把自适应中,var curwidth 改成 oshow_width, 相应的curwidth全部换成oshow_width;(此改变是为了同步,觉得没有必要多设一个参数);
测试时,轮播图片在窗口改变过程中,还是有显示不全的现象(即只显示一张图片的一部分,另一张图片的另一部分),但是再切换到下一页或者自动轮播到下一页时,恢复正常了;
末尾也出现空白界面的现象也没有再出现
----虽然解决了一些问题,但是还是没有找到问题的根因,疑惑中...............
效果图如下: