小米高级轮播图(定时器、切换按钮、鼠标移入移出事件)

HTML部分

<div class="banner">
	<div>
			<img src="img/a1.webp" class="active">
			<img src="img/a2.webp">
			<img src="img/a3.webp">
			<img src="img/a4.webp">
			<img src="img/a5.webp">

	</div>
	<div class="icon">
			<span class="select">1</span>
			<span>2</span>
			<span>3</span>
			<span>4</span>
			<span>5</span>
	</div>
	<div class="left"><</div>
	<div class="right">></div>
</div>

CSS部分

<style type="text/css">
	//通配符选择器	
        *{
			margin: 0;
			padding: 0;
		}
    //整体div宽高居中 设置定位
		.banner{
			width: 1200px;
			height: 400px;
			margin: 0 auto;
			position: relative;
		}
    //图片宽度适应banner 设置隐藏
		.banner img{
			width: 100%;
			display: none;
		}
    //设置图片显示类名active
		.banner .active{
			display: block;
		}
    //整体下面的切换小图标12345 设置绝对定位 设置居中
		.icon{
			position: absolute;
			bottom: 5px;
			left:50%;
			transform: translateX(-50%);
		}
    //数字小图标的样式 没有被选中的时候黑底白字
		.icon span{
			width: 20px;
			height: 20px;
			display: inline-block;
			background: rgba(0, 0, 0, 0.5);
			color: white;
			text-align: center;
			line-height: 20px;
			font-size: 12px;
		}
    //选中某一张图片的时候 图标的样式是白底黑字
		.icon .select{
			background: #fff;
			color: black;
		}
    //左右小箭头 设置绝对定位
		.left,.right{
			position: absolute;
			top: 50%;
			transform: translateY(-50%);
			width: 40px;
			height: 80px;
			line-height: 80px;
			text-align: center;
			background: rgba(0, 0, 0, 0.5);
			color: white;
		}
        //左边
		.left{
			left: 0;
		}
        //右边
		.right{
			right: 0;
		}
       //鼠标悬停的时候变小手   
		.left:hover{
			cursor: pointer;
		}
		.right:hover{
			cursor: pointer;
		}
	</style>

css的每一个样式都已在上面标注好

JS部分 

<script type="text/javascript">
		//获取图片imgs和下面的小下标spans
		let imgs= document.querySelectorAll(".banner img")
		let spans = document.querySelectorAll(".icon span")
		//1.遍历span(下标数字标签) 添加点击事件
		for(let i = 0;i < spans.length;i++){
			spans[i].onclick = function(){
				//active是display:block 图片的类名 先移除已有类名的img 再给点击到的图片添加此类名
				document.querySelector(".active").className=""
				//select是背景颜色和字体颜色变化  是span标签的 同样也是先移除再添加
				document.querySelector(".select").className=""
				this.className="select"
				imgs[i].className = "active"
			}
		}
		//3.获取右侧标签 添加点击事件
		let right = document.querySelector(".right")
		right.onclick = function(){
			let select = document.querySelector(".select")
			if(select.nextElementSibling== null){
				spans[0].onclick()
		}else{
			//当点击右侧按钮时,相当于点击当前span的下一个兄弟元素
			select.nextElementSibling.onclick()
		}}

		let left = document.querySelector(".left")
		left.onclick = function(){
			let select = document.querySelector(".select")
			if(select.previousElementSibling == null){
				spans[4].onclick()
		}else{
			select.previousElementSibling.onclick()
		}}

		//5.先获取整体 设置一个空变量
		let banner = document.querySelector(".banner")
		let time = null	

		banner.onmouseleave = function(){
			time = setInterval(function(){
			right.onclick()
			
			},1000)
		}
		banner.onmouseleave()
		banner.onmouseenter = function(){
			clearInterval(time)
		}
	</script>

js部分总共分成三大块:数字图标点击事件、左右切换点击事件、鼠标移入移出自动播放事件(定时器)

  1. 先看第一个模块 数字图标点击事件,在这要注意一个问题!图片数量和span标签的数量是一致的,(刚开始我的逻辑错误点:因为有图片标签还有span标签都要遍历,所以我嵌套了双层for循环,忽略了两种标签的数量一致!!!)获取完标签后直接for循环遍历即可,然后给span标签添加点击事件
  2. spans的点击事件还是原来的套路移除已有类名标签的类名,再给现在点击的标签添加类名,注意这里由于图片和下标都要变化,所以先移除active类名和select类名,再添加上(this表示现在点击的span标签)对应的类名
  3. 左右按钮的点击事件结构方法是完全相同的,不过要注意的一点是我们左右切换的时候,假设如果到最后一张图片了,这时候我们应该回到第一张图片上,那这时就要用到if语句来判断下一个是否为空了(这里用到的是下一个兄弟nextElementSibling,上一个兄弟是previousElementSibling)
  4. 来整理一下左右切换的整体逻辑(举例:右侧按钮) 先获取现在数字小图标的位置,然后if语句进行判断如果下一个为空就调用第一个标签的点击事件,否则就调用下一个兄弟的点击事件 左右相同
  5. 最后一步给整体加上定时器 获取banner(整体div类名),设一个空变量一会放定时器,在这里要注意的是鼠标移出就自动播放事件其实就是右击事件,直接在定时器里调用右击函数即可,鼠标移出就停止播放事件就是清除定时器,轮播图就完成了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值