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
    评论
以下是使用HTML和JavaScript实现单击图片切换的示例代码: ```html <!DOCTYPE html> <html> <head> <title>Image Gallery</title> <style> /* 灯箱样式 */ .lightbox { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0,0,0,0.6); display: none; justify-content: center; align-items: center; } .lightbox img { max-width: 80%; max-height: 80%; } .lightbox .prev, .lightbox .next { position: absolute; top: 50%; transform: translateY(-50%); font-size: 3em; color: #fff; cursor: pointer; } .lightbox .prev { left: 20px; } .lightbox .next { right: 20px; } </style> </head> <body> <!-- 图片列表 --> <div class="gallery"> <img src="image1.jpg" alt="Image 1" onclick="openLightbox(this)"> <img src="image2.jpg" alt="Image 2" onclick="openLightbox(this)"> <img src="image3.jpg" alt="Image 3" onclick="openLightbox(this)"> <img src="image4.jpg" alt="Image 4" onclick="openLightbox(this)"> </div> <!-- 灯箱 --> <div class="lightbox"> <img src="" alt="Lightbox Image"> <div class="prev" onclick="prevImage()"><</div> <div class="next" onclick="nextImage()">></div> </div> <script> // 获取图片列表和灯箱元素 var gallery = document.querySelector('.gallery'); var lightbox = document.querySelector('.lightbox'); var lightboxImage = lightbox.querySelector('img'); var prevButton = lightbox.querySelector('.prev'); var nextButton = lightbox.querySelector('.next'); // 获取所有图片元素 var images = gallery.querySelectorAll('img'); // 当前显示的图片索引 var currentIndex = 0; // 打开灯箱 function openLightbox(image) { // 设置灯箱图片 lightboxImage.src = image.src; // 显示灯箱 lightbox.style.display = 'flex'; // 获取当前图片索引 currentIndex = Array.prototype.indexOf.call(images, image); } // 关闭灯箱 function closeLightbox() { // 隐藏灯箱 lightbox.style.display = 'none'; } // 切换到上一张图片 function prevImage() { currentIndex--; if (currentIndex < 0) { currentIndex = images.length - 1; } lightboxImage.src = images[currentIndex].src; } // 切换到下一张图片 function nextImage() { currentIndex++; if (currentIndex >= images.length) { currentIndex = 0; } lightboxImage.src = images[currentIndex].src; } // 点击灯箱以外的区域关闭灯箱 lightbox.addEventListener('click', function(event) { if (event.target === this) { closeLightbox(); } }); // 监听键盘事件 document.addEventListener('keydown', function(event) { if (event.key === 'Escape') { closeLightbox(); } else if (event.key === 'ArrowLeft') { prevImage(); } else if (event.key === 'ArrowRight') { nextImage(); } }); </script> </body> </html> ``` 该示例代码中,我们使用了HTML和CSS来创建灯箱的样式,使用JavaScript来实现图片的切换。当用户单击图片时,我们会打开灯箱并显示当前图片。在灯箱中,我们还添了上下切换按钮和键盘事件监听器,以便用户可以通过多种方式切换图片。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值