---恢复内容开始---
1.1. 旋转木马轮播图思路
@数组操作方法复习
arr.push("要添加的元素") 在数组的最后添加值 并返回新数组的长度
arr.pop() 删除最后一个值 并将其返回
arr.unshift("要添加的元素") 在数组的开头添加值 并返回新数组的长度
arr.shift() 删除第一个值 并将其返回
@旋转木马
获取元素
鼠标经过wrap显示arrow
给每个li赋json值
点击左右箭头 调整数组
//点左键 配置单 删掉最后一个 加在开始
//点右键 配置单 删掉第一个 加在最后
将赋json值的方法抽取
点击箭头的时候执行
页面加载完先执行一次
设置节流阀
第一步设置css样式:代码如下
1 @charset "UTF-8"; 2 /*初始化 reset*/ 3 blockquote,body,button,dd,dl,dt,fieldset,form,h1,h2,h3,h4,h5,h6,hr,input,legend,li,ol,p,pre,td,textarea,th,ul{margin:0;padding:0} 4 body,button,input,select,textarea{font:12px/1.5 "Microsoft YaHei", "微软雅黑", SimSun, "宋体", sans-serif;color: #666;} 5 ol,ul{list-style:none} 6 a{text-decoration:none} 7 fieldset,img{border:0;vertical-align:top;} 8 a,input,button,select,textarea{outline:none;} 9 a,button{cursor:pointer;} 10 11 .wrap{ 12 width:1200px; 13 margin:100px auto; 14 } 15 .slide { 16 height:500px; 17 position: relative; 18 } 19 .slide li{ 20 position: absolute; 21 left:200px; 22 top:0; 23 } 24 .slide li img{ 25 width:100%; 26 } 27 .arrow{ 28 opacity: 0; 29 } 30 .prev,.next{ 31 width:76px; 32 height:112px; 33 position: absolute; 34 top:50%; 35 margin-top:-56px; 36 background: url(../images/prev.png) no-repeat; 37 z-index: 99; 38 } 39 .next{ 40 right:0; 41 background-image: url(../images/next.png); 42 }
第二步:调用js缓动运动函数代码
function animate(obj, json, fn) { clearInterval(obj.timer); obj.timer = setInterval(function () { var flag = true; for (var k in json) { //json 属性名:属性值 k:json[k] if (k == "opacity") { var leader = parseInt(getStyle(obj, k) * 100); var target = json[k] * 100; var step = (target - leader) / 10; step = step > 0 ? Math.ceil(step) : Math.floor(step); leader = leader + step; obj.style[k] = leader / 100; } else if (k == "zIndex") { obj.style[k] = json[k]; } else { var leader = parseInt(getStyle(obj, k)) || 0; var target = json[k]; var step = (target - leader) / 10; step = step > 0 ? Math.ceil(step) : Math.floor(step); leader = leader + step; obj.style[k] = leader + "px"; } if (leader != target) { flag = false; } } if (flag) { clearInterval(obj.timer); if (fn) { fn(); } } }, 10) } function getStyle(obj, attr) { if (obj && obj.currentStyle) { return obj.currentStyle[attr];//IE678 } else { return window.getComputedStyle(obj, null)[attr]; } }
第三步:主体架构实现
1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF-8"> 5 <title>旋转木马轮播图</title> 6 <link rel="stylesheet" href="css/css.css"/> 7 <script type="text/javascript" src="js/animate.js"></script> 8 <!--<script type="text/javascript" src="js/my.js"></script>--> 9 </head> 10 <body> 11 <div class="wrap" id="wrap"> 12 <div class="slide" id="slide"> 13 <ul> 14 <li class="one"><a href="#"><img src="images/bingbing.jpg" alt=""/></a></li> 15 <li class="two"><a href="#"><img src="images/lingengxin.jpg" alt=""/></a></li> 16 <li class="three"><a href="#"><img src="images/yuanyuan.png" alt=""/></a></li> 17 <li class="four"><a href="#"><img src="images/slidepic4.jpg" alt=""/></a></li> 18 <li class="five"><a href="#"><img src="images/slidepic5.jpg" alt=""/></a></li> 19 </ul> 20 <div class="arrow" id="arrow"> 21 <a href="javascript:;" class="prev" id="arrLeft"></a> 22 <a href="javascript:;" class="next" id="arrRight"></a> 23 </div> 24 </div> 25 </div> 26 <script> 27 window.onload = function () { // 当整个页面元素都渲染或是加载 完毕 的时候触发 28 //1. 获得要操作的对象 29 var wrap = document.getElementById("wrap"); 30 var slideBox = document.getElementById("slide"); 31 var ul = slideBox.children[0]; 32 var lis = ul.children; 33 var arrow = document.getElementById("arrow"); 34 var left = document.getElementById("arrLeft"); 35 var right = document.getElementById("arrRight"); 36 37 var config = [ 38 { 39 "width": 400, 40 "top": 20, 41 "left": 50, 42 "opacity": 0.2, 43 "zIndex": 2 44 },//0 45 { 46 "width": 600, 47 "top": 70, 48 "left": 0, 49 "opacity": 0.8, 50 "zIndex": 3 51 },//1 52 { 53 "width": 800, 54 "top": 120, 55 "left": 200, 56 "opacity": 1, 57 "zIndex": 4 58 },//2 59 { 60 "width": 600, 61 "top": 70, 62 "left": 600, 63 "opacity": 0.8, 64 "zIndex": 3 65 },//3 66 { 67 "width": 400, 68 "top": 20, 69 "left": 750, 70 "opacity": 0.2, 71 "zIndex": 2 72 }//4 73 ]; //其实就是一个配置单 规定了每张图片的大小位置层级透明度 74 75 //2. 当鼠标移入的时候,显示左右按钮 76 wrap.onmouseover = function(){ 77 animate(arrow,{"opacity":1}); 78 }; 79 wrap.onmouseout = function(){ 80 animate(arrow,{"opacity":0}); 81 }; 82 83 //其实就是一个配置单 规定了每张图片的大小位置层级透明度 84 assige(); //先调用一下,让原来的每个li走到指定的位置 85 86 function assige(){ 87 for(var i=0;i<lis.length;i++){ 88 animate(lis[i],config[i],function(){ 89 flag = true; //在这里变成true,也就是说前面的li都扫完完毕 了,都走到了配置文件中的指定位置 90 }); 91 } 92 } 93 94 var flag = true; //就表示当前的所有的li都走到了指定的位置 95 // 3. 点击右侧按钮的时候 96 right.onclick = function(){ 97 if(flag){ 98 flag = false; 99 config.push(config.shift()); //将数组中的第一项删除,添加到数组的最后 100 assige(); // 根据新生成的数组配置文件重新渲染每个li 101 } 102 } 103 104 left.onclick = function(){ 105 if(flag){ 106 flag = false; 107 config.unshift(config.pop()); // 删除数组中的最后一项,添加到数组的最前面 108 assige(); //根据新生成的配置文件数组,重新让li走到指定的位置 109 } 110 }; 111 112 // 4. 添加节流阀(flag标识,让每个li渲染完毕之后才进行下一次操作,一直保持淡入淡出较慢的速度显示) 113 } 114 </script> 115 </body> 116 </html>
以上结束(所用到的图片如下,第一次写)
---恢复内容结束---
来源:https://www.cnblogs.com/hudie-0126/p/5617103.html