/*obj指定是移动的对象
dir指的是移动方向
target指定是目的地位置
speed移动速度
callback 回调函数
*/
function move(obj, dir, target, speed, callback){//关闭上一次定时器clearInterval(obj.timer);//获取当前方向
var cur = window.getComputedStyle(obj, null);
var current =parseInt(cur[dir]);//首先判断速度为正还是为负if(current > target){
speed =-speed;}
obj.timer=setInterval(function(){//获取当前位置的值
var old = window.getComputedStyle(obj, null);
var oldValue =parseInt(old[dir]);
var newValue = oldValue + speed;if((speed>0&&newValue>target)||(speed<0&&newValue<target)){
newValue=target;}//设置属性
obj.style[dir]=newValue+"px";if(newValue==target){clearInterval(obj.timer);//如果callback存在,就执行callback,而且加不加括号的顺序不能弄错
callback&&callback();}},1000);}
轮播图
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>轮播图</title><link rel="stylesheet" href="../css重置样式表/reset.css"><!--<script src="./script/tool.js"></script>--><script src="./script/script.js"></script><script type="text/javascript">
window.onload =function(){
var outer = document.getElementById("outer");
var imgList = document.getElementById("img-list");//获取页面中所有img标签
var imgArr = document.getElementsByTagName("img");//设置imglist的宽度
imgList.style.width =259* imgArr.length +"px";
var nav = document.getElementById("nav");//设置nav居中
nav.style.left =(outer.offsetWidth - nav.offsetWidth)/2+"px";//获取所有的a
var allA = document.getElementsByTagName("a");//默认显示图片的 索引
var index =0;// allA[index].style.background = "blue";/*点击超链接,切换到指定图片
点击第一个链接,显示第一个图片
点击第二个链接,显示第二个图片
*/
var num;for(var i =0; i < allA.length; i++){//为每一个超链接添加一个num属性,保存它本身是第几个链接//关闭自动切换的定时器clearInterval(timer);
allA[i].num = i;
allA[i].onclick =function(){/*获取点击超链接的索引,并将其设置为index
得用this,用allA[i]不对
*/
index = this.num;//切换图片,修改imgList// imgList.style.left = (-259) * index + "px";//修改正在选中的asetA();//使用move函数切换图片move(imgList,"left",(-259)* index,10,function(){});//动画执行完毕,开启自动切换autoChange();}}//创建一个方法,用来设置选中的a
function setA(){//判断当前索引是否是最后一个if(index >= imgArr.length-1){//则将index设置为0
index =0;//最后一张和第一张是一模一样的
imgList.style.left=0;}//遍历所有的a,并设置为orangefor(var i =0; i < allA.length; i++){/*因为这个地方为内联样式,要是在这个地方设置,就没有办法修改了,所以在css里面设置*/
allA[i].style.background ="";}
allA[index].style.background ="blue";}
var timer;//创建一个函数,实现自动切换图片
function autoChange(){//开启定时器,定时切换图片
timer=setInterval(function(){//使索引自增
index++;
index %= imgArr.length;//执行动画,切换图片move(imgList,"left",(-259)* index,10,function(){//修改导航点setA();});},1000);}}</script></head><style>*{
margin:0;
padding:0;}#outer{
width:259px;
height:186px;
margin:50px auto;
background-color: aqua;
position: relative;/*裁剪溢出的内容,只想看到中间那张*/
overflow: hidden;}#img-list {/* width: 781px; */
position: absolute;/*每向左移动259px,就会显示下一张图片*/
left:-518px;}#img-list li {float: left;
margin:010px;}#nav{
position: absolute;/* width: 63px;
left: 0;
right: 0;
margin: 0 auto; */
bottom:15px;}#nava {/*浮动以后,会变成块元素
行内元素浮动后相当于inline-block
*/float: left;/* display: block; */
width:11px;
height:11px;
background-color: orange;/*点点一开始在下面了,因为绝对定位脱离文档流,nav自然而然就上去了*/
margin:05px;/*设置半透明效果*/
opacity:0.5;}#nava:hover {
background-color: blue;}</style><body><div id="outer"><ul id="img-list"><li><img src="./picture/1 (1).png" alt=""></li><li><img src="./picture/1 (2).png" alt=""></li><li><img src="./picture/1 (3).png" alt=""></li><li><img src="./picture/1 (1).png" alt=""></li></ul><!-- 创建导航按钮 --><div id="nav"><a href="javascript:;"></a><a href="javascript:;"></a><a href="javascript:;"></a></div></div></body></html>