12、js——轮播图
1、轮播图.html(图片可自己修改)
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>轮播图</title> </head> <link rel="stylesheet" type="text/css" href="css/轮播图.css"/> <body> <div id="outer"> <ul id="imgList"> <li><img src="img/唯美1.jpg" id="imgID"/></li> <li><img src="img/唯美2.jpg" id="imgID"/></li> <li><img src="img/唯美3.jpg" id="imgID"/></li> <li><img src="img/唯美4.jpg" id="imgID"/></li> <li><img src="img/唯美5.jpg" id="imgID"/></li> <li><img src="img/唯美1.jpg" id="imgID"/></li> </ul> <!--<a id="left"><</a> <a id="right">></a>--> <div id="navDiv"> <a href="javascript:;"></a> <a href="javascript:;"></a> <a href="javascript:;"></a> <a href="javascript:;"></a> <a href="javascript:;"></a> </div> </div> </body> <script type="text/javascript" src="js/tools.js" ></script> <script type="text/javascript" src="js/轮播图.js"></script> </html>
2、tools.js
/** * 用来获取指定元素的当前样式 * 参数: * 1、obj 要获取样式的元素 * 2、name 要获取的样式名 */ function getStyle(obj,name){ if(window.getComputedStyle){ //正常浏览器的方式,具有getComputerStyle()方法 return getComputedStyle(obj,null)[name]; }else{ //IE8方式,没有getComputerStyle()方法 return obj.currentStyle[name]; } } /** * 用来执行简单动画的函数 * 参数 * 1、obj:要执行动画的对象 * 2、attr:要执行动画的样式 比如:left、right、width、height * 3、target:执行动画的目标位置 * 4、speed:移动速度(整数向右移动,负数向左) * 5、callback:回调函数,这个函数会在动画执行完毕以后执行 */ function move(obj,attr,target,speed,callback){ //关闭上一个定时器 clearInterval(obj.timer); //获取元素目前位置 var current = parseInt(getStyle(obj,attr)); //判断速度的正负值 if(current > target){ speed = -speed; } //开启一个定时器,用来执行动画效果 //向执行动画的对象中添加一个timer属性,用来保存它自己的定时器标识 obj.timer = setInterval(function(){ var oldValue = parseInt(getStyle(obj,attr)); var newValue = oldValue + speed; /** * 判断newValue和target的关系 * 向左移动时需要判断newValue是否小于target * 向右移动时需要判断newValue是否大于target */ if((speed<0 && newValue<target) || (speed > 0 && newValue>target) ){ newValue = target; } obj.style[attr] = newValue+"px"; //元素到达target停止动画 if(newValue == target){ //到达目的地,停止定时器 clearInterval(obj.timer); //动画执行完毕,有回调函数时调用回调函数 callback && callback(); } },30); }
3、轮播图.js
/*设置装图片ul的宽度 */ var imgList = document.getElementById("imgList"); //获取页面中所有的img标签 var imgArr = document.getElementsByTagName("img"); //设置imgList的宽度 imgList.style.width = 800*imgArr.length+"px"; /*设置导航按钮居中*/ //获取navDiv var navDiv = document.getElementById("navDiv"); //获取outer var outer = document.getElementById("outer"); //设置navDiv的left值 navDiv.style.left = (outer.offsetWidth - navDiv.offsetWidth)/2 + "px"; //显示图片的索引 var index=0; //获取所有a var allA = document.getElementsByTagName("a"); //设置默认选中的效果 allA[index].style.backgroundColor = "black"; /*为所有的超链接都绑定单击响应函数*/ for(var i=0;i<allA.length;i++){ //为每一个超链接添加一个num属性 allA[i].num = i; allA[i].onclick = function(){ //关闭自动切换的定时器 clearInterval(timer); //将点击超链接的num属性赋值给index以便切换图片 index = this.num; //修改点击a之后的样式 setA(); //切换图片 /* * 第一张:0 0 * 第二张:1 -800 * 第三张:2 -1600 */ // imgList.style.left = -800*index+"px"; //使用tools.js中的move函数进行动画切换图片 move(imgList,"left",-800*index,50,function(){ //手动切换完成后再打开自动切换的定时器 autoChange(); }); }; } //开启自动切换图片 autoChange(); //创建一个方法设置点击之后a的样式 function setA(){ //判断当前索引是否是最后一张图片 if(index >= imgArr.length - 1){ index = 0; //此时显示最后一张图片,而最后一张图片和第一张图片是一模一样的 //通过css将最后一张切换成第一张 imgList.style.left = 0; } //遍历所有a,并将它们的背景色设置 为 红色 for(var i=0;i<allA.length;i++){ //因为css中有默认红色,这里设置为空串是为了防止a:hover之后颜色失效 allA[i].style.backgroundColor = ""; } //将选中的a设置为黑色 allA[index].style.backgroundColor = "black"; }; var timer; //创建一个函数用来开启自动切换图片 function autoChange(){ //开启一个定时器,用来定时切换图片 timer = setInterval(function(){ //使索引自增 index++; index %= imgArr.length; //执行动画,切换图片 move(imgList,"left",-800*index,50,function(){ //修改导航点 setA(); }); },3000); }
4、轮播图.css
*{ margin: 0; padding: 0; } #outer{ width: 800px; height: 500px; border: 1px solid red; margin: 100px auto; position: relative; overflow: hidden; cursor:pointer; } #imgList{ list-style: none; /*开启绝对定位*/ position: absolute; } #imgList li{ float: left; } #outer img{ width: 800px; height: 500px; } /*设置导航按钮*/ #navDiv{ position: absolute; bottom: 20px; } #navDiv a{ /*开启浮动*/ float: left; /*开启浮动后行内元素则变为了块元素,可以设置宽高*/ width: 25px; height: 25px; background-color: red; /*设置左右边距*/ margin: 0 5px; /*设置透明*/ opacity: 0.5; /*兼容IE8透明*/ filter: alpha(opacity=50); } #navDiv a:hover{ background-color: black; }