JS实现轮播图(手动切换+自动切换两种方法)

1.轮播图效果图
效果图
2.完整代码如下

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>轮播图</title>
<style type="text/css">
*{
	margin:0;
	padding:0;
}
/*设置外部div*/
#outer
{
	width:447px;
	height:240px;
	margin:50px auto;/*居中*/
	background-color:#0FF;/*设置背景颜色*/
	padding:10px 0;
	position:relative;/*父元素div开启相对定位*/
	overflow:hidden;/*裁剪溢出内容*/
}
/*设置ul*/
#imgList
{
	list-style:none;/*去除项目符合*/
    position:absolute;/*给ul开启绝对定位*/
	left:0px;/*设置偏移量,每向左移动447px就会显示下一张图片*/
}
/*设置图片中的li*/
#imgList li
{
	float:left;/*设置浮动*/
	margin:0 10px;/*设置左右外边距*/
	
}
/*设置导航按钮*/
#navdiv
{
	position:absolute;/*开启绝对定位*/
	bottom:15px;/*设置位置*/	
}
#navdiv a
{
	float:left;/*设置超链接浮动*/
	width:15px;
	height:15px;
	background-color:#F00;/*设置背景颜色*/
	margin:0 5px;/*设置左右外边距*/
	opacity:0.5;/*设置半透明*/
	/*兼容IE8透明的写法为,filter:alpha(opacity=50)*/
}
/*设置鼠标移入的效果*/
#navdiv a:hover
{
	background-color:#000;
}
</style>
<script type="text/javascript" src="myjs/dh.js"></script>
<script type="text/javascript">
window.function()
{
	//获取ul
	var imgList=document.getElementById("imgList");
	//获取页面中所有的图片(即获取img标签)
	var imgarr=document.getElementsByTagName("img");
	//设置imgList的宽度
	imgList.style.width=447*imgarr.length+"px";
	//设置导航按钮居中
	//第一步获取导航div
	var navdiv=document.getElementById("navdiv");
	var outer=document.getElementById("outer");
	//第二步设置left值,left=(outer的宽度-navdiv的宽度)/2
	navdiv.style.left=(outer.offsetWidth-navdiv.offsetWidth)/2+"px";
	//默认显示图片的的索引
	var index=0;
	//获取所有的a
	var alla=document.getElementsByTagName("a");
	//设置默认选中的效果
	alla[index].style.backgroundColor="#000";
	//点击超链接切换到指定图片,点击第一个超链接显示第一张图片,点击第二个超链接显示第二张图片
	//为所有超链接都绑定单击响应事件
	for(var i=0;i<alla.length;i++)
	{
		//为每一个超链接添加一个num属性
		alla[i].num=i;
		alla[i].onclick=function()
		{
			//关闭定时器
			clearInterval(timer);
			//获取点击超链接的索引,并将其设置为index
			index=this.num;
			//切换图片,第一张索引为0,left为0,第二张索引为1,left为-447,第三张索引为2,left为-894
			//imgList.style.left=-447*index+"px";
			//设置选中a
			setA();
			//使用move函数来切换图片
			move(imgList,"left",-447*index,20,function(){
				//动画结束,开启自动切换
				autoChange();
				});
		};
	}
	//自动切换图片
	autoChange();
	//创建一个方法用来设置选中的a
	function setA()
	{
		//判断当前索引是否是最后一张图片
		if(index>=imgarr.length-1)
		{//则将index设置为0
			index=0;
			//此时显示的是最后一张图片,而最后一张图片和第一张是一样的通过CSS将最后一张切换成第一张
			imgList.style.left=0;
			
			}
		//遍历所有的a并将所有的背景颜色都设置为红色
		for(var i=0;i<alla.length;i++)
		{
			alla[i].style.backgroundColor="";
		}
		//将选中的a设置为黑色
		alla[index].style.backgroundColor="#000";
	};
	var timer;
	//创建一个函数,用来开启自动切换图片
	function autoChange()
	{
		//开启一个定时器用来定时切换图片
		timer=setInterval(function(){
			//使索引自增
			index++;
			index=index%imgarr.length;
			//执行动画,切换图片
			move(imgList,"left",-447*index,20,function(){
				//修改导航按钮
					setA();
				});
			},3000);
	}
};
</script>
</head>
<body>
<!--创建一个外部的div,来作为大的容器-->
<div id="outer">
<!--创建一个ul,用于放置图片-->
<ul id="imgList">
<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/2.jpg"></li>
</ul>
<!--创建导航按钮-->
<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>
</html>

3.附上引用js部分代码(dh.js)

// JavaScript Document
//创建一个可以执行简单动画的函数
//参数1:要执行动画的对象(obj);参数2:要执行动画的样式,可以是left,right,top等(attr);参数3:执行动画的目标位置(target);参数4:表示移动的速度正数向右移动,负数向左移动(speed);参数5:回调函数(callback),这个函数将会在动画执行完毕以后执行
function move(obj,attr,target,speed,callback)
{
	
		//在开启一个定时器之前,先关闭上一个元素的定时器
		clearInterval(obj.timer);
		//获取元素目前的位置
		var current=parseInt(getStyle(obj,attr));
		//判断速度的正负
		//如果从0向800移动,则speed为正,如果从800向0移动,则speed为负
		if(current>target)
		{
			speed=-speed;
		}
		//开启一个定时器来实现动画效果
		//向执行动画的对象中添加一个timer属性值,用来保存它自己的定时器标识
		 obj.timer=setInterval(function(){
			
			//获取div的原来的值
			var oldvalue=parseInt(getStyle(obj,attr));
			//在旧值的基础上增加
			var newvalue=oldvalue+speed;
			//判读newvalue是否大于800
			if(speed<0 && newvalue<target || speed>0 && newvalue>target)
			{
				newvalue=target;
			}
			//将新值赋给box
			obj.style[attr]=newvalue+"px";
			//当元素移动到800px时,则停止执行动画
			if(newvalue==target)
			{
				//达到目标关闭定时器
			clearInterval(obj.timer);
			//动画执行完毕,调用回调函数
			callback && callback();
			}},30);	
}
//定义一个函数用来获取指定元素的当前样式,参数,obj代表需获取样式的元素,name代表需获取的样式名
function getStyle(obj,name)
{
	if(window.getComputedStyle)
	{
		//正常浏览器有getComputedStyle()方法
	return getComputedStyle(obj,null)[name];
	}
	else
	{
		//IE8的浏览器没有getComputedStyle()方法
	return obj.currentStyle[name];
	}
}

4.图片素材
2.jpg
在这里插入图片描述
3.jpg
在这里插入图片描述
4.jpg
在这里插入图片描述
5.jpg
在这里插入图片描述
6.jpg
在这里插入图片描述

  • 37
    点赞
  • 228
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值