003_JS实现图片轮播与点击播放

步骤:
1、布局:
    outer[div]
        ----imgList[ul]
                ----li(总共5个)
                    ----img(放轮播图)
        ----navDiv[div]
                ----a(总共5个)
2、原理:
        - outer作为“屏幕”,超出屏幕的部分hidden。
        - imgList里面的li排成一排,imgList包含在outer中。
        - JS控制imgList,左右移动。
        - a标签根据索引值:-indexA*li宽度,得出每张图片的开始位置,完成点击a标签,切换图片。
3、注意:
        - move函数的实现,应该好好理解。
        - 点击a标签的优先级,应该高于定时轮播,所有点击a标签的时候,停止定时器,完成动画后,开启定时器。

        - 这是一个类似循环播放的效果——最后一张图片很关键,用于完成瞬间移动。


测试代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<!--
			步骤:
			1、布局:
				outer[div]
					----imgList[ul]
							----li(总共5个)
								----img(放轮播图)
					----navDiv[div]
							----a(总共5个)
			2、原理:
					- outer作为“屏幕”,超出屏幕的部分hidden。
					- imgList里面的li排成一排,imgList包含在outer中。
					- JS控制imgList,左右移动。
					- a标签根据索引值:-indexA*li宽度,得出每张图片的开始位置,完成点击a标签,切换图片。
			3、注意:
					- move函数的实现,应该好好理解。
					- 点击a标签的优先级,应该高于定时轮播,所有点击a标签的时候,停止定时器,完成动画后,开启定时器。
					- 这是一个类似循环播放的效果——最后一张图片很关键,用于完成瞬间移动。
		-->
		<style type="text/css">
			* {
				margin: 0;
				padding: 0;
			}
			
			#outer {
				width: 500px;
				height: 333px;
				margin: 10px auto;		/*左右居中*/
				background-color: greenyellow;
				padding: 10px 0;	/*设置上下的padding为10px*/
				position: relative;
				overflow: hidden;
			}
			
			#imgList {
				list-style: none;   	/*去除li的默认样式*/
				width: 2600px;
				left:0px;
				position: absolute;		/*开启绝对定位,便于移动*/
			}
			
			#imgList li {
				float: left;			/*float:父元素够大的时候,才会横排*/
			}
			
			#navDiv {
				position: absolute;		/*设置绝对定位,才能显示到上面*/
				bottom: 15px;
			}
			
			#navDiv a {
				float: left;	/*浮动,脱离文档流,横排*/
				width: 12px;
				height: 12px;
				margin: 0 5px;
				background-color: red;
				opacity: 0.5;
				/*兼容IE8透明*/
				filter: alpha(opacity=50);
			}
			
			#navDiv a:hover {
				background-color: black;
			}
		</style>
		
		<script src="js/tools.js" type="text/javascript" charset="utf-8"></script>
		
		<script type="text/javascript">
			
			window.onload = function() {
				//获取节点
				var outer = document.getElementById("outer");
				var imgList = document.getElementById("imgList");
				var countImg = imgList.getElementsByTagName("li");
				var navDiv = document.getElementById("navDiv");
				var allA = navDiv.getElementsByTagName("a");
				
				//第一张图片的a标签先被选中
				var indexA = 0;
				allA[indexA].style.backgroundColor = "black";
				
				//为所有的a标签绑定单击响应函数
				for (var i = 0; i < allA.length; i++) {
					//保存超链接所在索引(前面的课程说过为什么这样)
					allA[i].num = i;
					//绑定单击响应函数
					allA[i].onclick = function() {
						//点击超链接时,应该停止轮播定时器,不然会出现两个动画
						clearInterval(idTimer);
						
						//点击超链接,切换图片
						indexA = this.num;
						move(imgList,"left",indexA*-500,20,function(){
							//点击的动画执行完了,开启轮播定时器
							autoChange();
						});
						//a标签颜色处理
						mutexA();
					}
				}
				
				//设置导航按钮居中
				var navDivWidth = parseInt(getComputedStyle(navDiv,null)["width"]);
				var outerWidth = parseInt(getComputedStyle(outer,null)["width"]);
				navDiv.style.left = (outerWidth - navDivWidth)/2 + "px";
				
				//设置imgList宽度(图片+20)*数量
				var imgWidth = 500;
				var imgMargin = 0;
				imgList.style.width = (imgMargin + imgWidth)*countImg.length + "px";
				
				//轮播图片
				var idTimer;
				function autoChange() {
					idTimer = setInterval(function() {
						indexA++;
						//a标签设置
						move(imgList,"left",indexA*-500,20,function(){

							mutexA(allA,indexA);							
						});
					
					},3000);

				}
				
				//开启定时器
				autoChange();
				
				//互斥a标签
				function mutexA() {
					//索引值回到开头
					if( indexA >= countImg.length - 1) {
						indexA = 0;
						imgList.style.left = 0 + "px";
					}
					
					//该索引a标签变黑色,其它标签红色
					for (var j = 0; j < allA.length; j++) {
						if( j == indexA ) {
							allA[j].style.backgroundColor = "black";
						} else {
							allA[j].style.backgroundColor = "";		//这样做是因为,内联样式优先级更高,
																	//直接设置为red,会覆盖hover效果,
																	//这里直接去掉内联样式,它就受style里面的样式控制了
						}
					}					
				}
			}
		</script>
		
	</head>
	<body>
		<div id="outer">
			<ul id="imgList">
				<li>
					<img src="img/1.jpg"/>
				</li>
				
				<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/1.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>


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值