轮播图效果实现

轮播图的基本样式代码如下:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>轮播图效果</title>
		<style>
			* {
				margin: 0;
				padding: 0;
			}
			
			a {
				text-decoration: none;
			}
			
			li {
				list-style: none;
			}
			
			.box {
				position: relative;
				top: 100px;
				margin: 0 auto;
				width: 576px;
				height: 324px;
				overflow: hidden;
				background-color: pink;
			}
			
			.wardbtn {
				display: none;
				position: absolute;
				top: 50%;
				margin-top: -30px;
				width: 30px;
				height: 60px;
				line-height: 60px;
				text-align: center;
				font-size: 20px;
				color: #fff;
				background-color: rgba(0 , 0 , 0 , .3);
			}
			
			.wardbtn:hover {
				color: #999;
			}
			
			.left {
				left: 0;
				border-radius: 0 30px 30px 0;
			}
			.right {
				right: 0;
				border-radius: 30px 0 0 30px;
			}
			
			.dot {
				position: absolute;
				bottom: 10px;
				left: 50%;
				margin-left: -30px;
				width: 60px;
				height: 20px;

			}
			.dot li {
				float: left;
				width: 10px;
				height: 10px;
				margin: 5px ;
				border-radius: 50%;
				background-color: #fff;
				cursor: pointer;
			}
			
			.dot .select {
				background-color: #999;
			}
			
			.imgs {
				position: absolute;
				top: 0;
				left: 0;
				width: 2304px;
			}
			
			.box img {
				display: inline-block;
				float: left;
				width: 576px;
			}
		</style>	
	</head>
	<body>
		<div class="box">
			<div class="imgs">
				<img src="jin.png" alt="">
				<img src="Jinx.jpg" alt="">
				<img src="Riven2.jpg" alt="">
				<img src="jin.png" alt="">	
			</div>
			<a href="javascript:;" class="wardbtn left">&lt</a>
			<a href="javascript:;" class="wardbtn right">&gt</a>
			<ul class="dot">
				<li class="select"></li>
				<li></li>
				<li></li>
			</ul>
		</div>
		<script src="TurnRoundPic.js"></script>
		<script type="text/javascript">
			var box = document.querySelector('.box');
			turnRoundPic(box);
		</script>
	</body>
</html>

轮播图思路以及JS代码如下:

/*
	1.获取按钮元素
	2.获取图片元素节点
	3.获取小圆点元素
		图片自动更换动画效果
	4.点击左右按钮实现图片切换的动画效果
	5.动画效果
		获取元素
		目标位置与当前位置的差值
		正值ceil
		负值floor
		每次调动前清除一遍动画
	6.点击小圆点实现图片的切换
	7.图片切换时小圆点样式选中
*/


/*
	封装内容:
		animate   动画函数  animate(移动对象, 偏移位置, 回调函数)
		count    页面计数器
		length   单个页面宽度,即一次位移的偏移量
		leftb    左按钮
		rightb	 右按钮
		lis      小圆点数组
		imgs     图片数组(可选由ul实现)
*/

/*动画函数*/
function animate(box, trapos,callback) {    
	clearInterval(box.move);          /*点击之后消除上一次动画,防止未完成的动画与当前动画发生冲突*/
	box.move = setInterval(function() {
		var left = box.offsetLeft;
		var step = trapos - left;
		step = step > 0 ? Math.ceil(step / 10) : Math.floor(step / 10);
		if( step == 0) {
			clearInterval(box.move);
		}
		box.style.left = left + step + 'px';
	}, 20)
	if(callback) {
		callback();
	}	
}

/*
小圆点被选中函数
count 当前的计数值, lis小圆点列表
*/
function getSelect(count, lis) {
	if(count >= 3) {
		count = 0;
	} else if(count < 0) {
		count = 2;
	}
	for(var i = 0 ;i < lis.length; i++) {
		lis[i].className = '';
	}
	
	lis[count].className = 'select'; 
}

/*轮播图主函数*/
function turnRoundPic(box) {
	/*获取元素节点*/
	var length = 576;
	var count = 0;
	var leftb = box.querySelector('.left');
	var rightb = box.querySelector('.right');
	var lis = box.querySelectorAll('li');
	var imgs = box.querySelector('.imgs');
	/*设置初始定时器----全局变量*/
	fn = setInterval(function() {
	count++;
	if(count > 3) {
		 imgs.style.left = 0 + 'px';
		 count = 1;
	}
		getSelect(count, lis);
		animate(imgs, - length * count);
	}, 3000);
	/*轮播图盒子事件监听
			鼠标放在盒子上,左右箭头按钮出现,自动轮播停止
	*/
	box.addEventListener('mouseenter', function() {
		leftb.style.display = 'block';
		rightb.style.display = 'block';
		clearInterval(fn);
	})
	/*轮播图盒子事件监听
		鼠标离开盒子,左右箭头按钮消失,自动轮播开始
	*/
	box.addEventListener('mouseleave', function() {
		leftb.style.display = 'none';
		rightb.style.display = 'none';
		fn = setInterval(function() {
		count++;
		if(count > 3) {
			 imgs.style.left = 0 + 'px';
			 count = 1;
		}
			getSelect(count, lis);
			animate(imgs, - length * count);
		}, 3000);
	})
	/*左按钮事件,点击查看下一张图片*/
	
	leftb.addEventListener('click', function() {
		clearInterval(fn);
		if(count >= 3) {
			imgs.style.left = 0 + 'px';
			count = 0;
		}
		count ++;
		animate(imgs, -length * count);
		console.log(count);	
		getSelect(count, lis);
	})
	/*右按钮事件,点击查看上一张图片*/
	rightb.addEventListener('click', function() {
		clearInterval(fn);
		if(count <= 0) {
			imgs.style.left = - length * 3 + 'px';
			count = 3;
		}
		count --;
		animate(imgs, -length * count);
		console.log(count);	
		getSelect(count, lis);
	})
	/*点击小圆点,跳转指定图片页面*/
	for(var i = 0; i < lis.length; i++){
		lis[i].setAttribute('index', i);
		lis[i].addEventListener('click', function() {
			clearInterval(fn);
			animate(imgs, - length * this.getAttribute('index'));
			getSelect(this.getAttribute('index'), lis);
		})
	}
}

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值