天天看點

jq輪播圖——無縫輪播

css代碼:

/* 整個輪播圖 */
.banner{
	width: 520px;
	height: 280px;
	overflow: hidden;
	margin:10% auto;
	position: relative;
}
/* 圖檔部分 */
/* ul */
.banner-img{
	/* 寬度其實是不符合條件的,需要使用js去控制 */
	height: 100%;
	position: absolute;
	top: 0;
	left: 0;
}
.banner-img li{
	width: 520px;
	height: 100%;
	float: left;
}
.banner-img li a{
	width: 100%;
	height: 100%;
}
.banner-img li a img{
	width: 100%;
	height: 100%;
}
/* 實作按鈕 */
.banner .banner-btn{
	position: absolute;
	height:40px;
	width: 100%;
	/* background: red; */
	top: 50%;
	margin-top: -20px;
	display: none;
}
/* 滑鼠移入顯示 */
.banner:hover .banner-btn{
	display: block;
}
.banner .banner-btn a{
	display: block;
	width: 40px;
	height: 40px;
	background: green;
	overflow: hidden;
}
.banner .banner-btn .nexBtn{
	float: right;
}
.banner .banner-btn a{
	background-color: #000;
	opacity: 0.3;
	filter: alpha(opcity=30);
	border-radius: 5px;
}
.banner .banner-btn i{
	margin-top: 8px;
	display: block;
	width: 100%;
	height: 24px;
	/* 使用一下精靈圖,面包屑圖 */
	background: url(http://gtms01.alicdn.com/tps/i1/T1szNBFzlmXXX8QSDI-400-340.png);
}
/* 左邊的 */
.banner .prevBtn i{
	background-position: -190px 0;
}
/* 右邊的 */
.banner .nexBtn i{
	background-position: -190px -24px;
}
/* 下面的小圓圈 */
.banner-circle{
	position: absolute;
	left:50%;
	/* margin-left: ; */
	height:13px ;
	bottom: 5px;
	border-radius:10px;
	/* opacity: 0.3;
	/* IE相容 */
	/* filter: alpha(opcity=30); */
	background:rgba(255,255,255,0.3);
}
.banner-circle li{
	width: 9px;
	height: 9px;
	margin: 2px;
	float: left;
}
.banner-circle li a{
	display: block;
	width: 9px;
	height: 9px;
	border-radius: 50%;
	background:rgba(255,255,255,0.8);
}
.banner-circle .selected a{
	background: rgba(255,0,0,1);
}
           
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<link rel="stylesheet" type="text/css" href="./css/reset.css"/>
		<link rel="stylesheet" type="text/css" href="./css/banner.css"/>
	</head>
	<body>
		<div class="banner">
			<!-- 放置圖檔 -->
			<ul class="banner-img">
				<li><a href="#"><img src="./img/0.jpg" ></a></li>
				<li><a href="#"><img src="./img/1.jpg" ></a></li>
				<li><a href="#"><img src="./img/2.jpg" ></a></li>
				<li><a href="#"><img src="./img/3.jpg" ></a></li>
				<li><a href="#"><img src="./img/4.jpg" ></a></li>
				<li><a href="#"><img src="./img/2.jpg" ></a></li>
			</ul>
			<!-- 放置兩個前後按鈕 -->
			<div class="banner-btn">
				<a href="javascript:;" class="nexBtn"><i></i></a>
				<a href="javascript:;"class="prevBtn"><i></i></a>	
			</div>
			<!-- 放置焦點 小圓圈 -->
			<ul class="banner-circle">
				<!-- 計劃是使用js的dom操作去添加集體的個數的小圓圈 -->
			</ul>
		</div>
	</body>
	<script src="./js/jquery3.4.1.js" type="text/javascript" charset="utf-8"></script>
	<script>
	$(function(){
		//擷取标簽
		// 最大的輪播子產品 ; 這裡變量名稱裡面的$其實就是一個普通的字元
		var $banner = $('.banner');
		// 擷取圖檔的父級ul
		var $banner_ul = $('.banner-img');
		// 按鈕的大塊
		var $btn = $('.banner-btn');
		// 擷取按鈕的a标簽
		var $btn_a = $btn.find('a');
		console.log($btn_a);
		// 定義一些有可能會使用到的變量
		// 定時器
		var timer = null;
		// 正在展示的頁數
		var page = 1;
		// 運動的方向
		var btnClass = null;
		
		// 擷取每一個li的寬度.也就是擷取banner的寬度   輪播圖的寬度
		var v_width = $banner.width();
		// ul的寬度根據li的個數決定
		// 擷取li的個數
		var page_count = $banner_ul.find('li').length;
		//設定ul的寬度
		$banner_ul.width(v_width*page_count);//jquey設定元素的寬度的方法
	
		// 操作小圓圈
		var banner_cir = '<li class="selected"><a href="javascript:;" target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow" ></a></li>';
		for (var i = 0; i < page_count-1; i++) {
			// 這裡隻是一個所有的小圓點拼接起來的字元串,還沒有添加到頁面中
			banner_cir += '<li><a href="javascript:;" target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow" ></a></li>'
		}
		//添加小圓圈到頁面中
		$('.banner-circle').append(banner_cir);
		//計算移動多少距離可以使得所有的小圓點居中
		var circle_left = $('.banner-circle').width() * 0.5;
		//通過margin-left設定所有的小圓點居中
		$('.banner-circle').css('marginLeft',circle_left*-1);
		
		//obj 讓誰動
		//dir 向那個方向運動
		function move(dir){
			//正在運動的物體, 不能進行運動,如果正在動畫,move對你不生效
			if(!$banner_ul.is(":animated")){//取反 正在運動 就是不運動
				//判斷進行運動的方向
				if(dir == 'prevBtn'){
					//判斷是否為第一個圖檔   需要單獨處理第一張到第五張的請況
					if(page==1){
						$banner_ul.animate({
							left: (page_count-1)*v_width*-1
						});
						page = page_count;
						//處理小紅點的移動
						circleMove();
					}else{
						//其他情況比較規律,每一次都是過一個圖檔的距離
						$banner_ul.animate({
							left: $banner_ul.position().left + v_width
						},"slow");
						page--;
						circleMove();
					}
				}else{
					//處理最後一張的特殊情況
					if(page==page_count){
						$banner_ul.animate({
							left:0
						})
						page=1;
						circleMove();
					}else{
						$banner_ul.animate({
							left:  $banner_ul.position().left - v_width
						},"slow");
						page++;
						circleMove();
					}
				}
			}
		}
		function circleMove(){
			$('.banner-circle li').eq(page-1).addClass('selected').siblings().removeClass('selected');
		}
		// 滑鼠移入
		$banner.mousemove(function(){
			// 清除定時器
			clearInterval(timer);//連結操作
		}).mouseout(function(){
			timer = setInterval(move,1000);
		}).trigger('mouseout'); //一進來就觸發一次滑鼠移出效果,讓頁面直接動起來
		// 動起來
		// timer = setInterval(move,1000);
		
		// 左右按鈕的滑鼠移入移出以及點選
		$btn_a.mouseover(function(){
			$(this).animate({
				'opacity':0.6		//jquey已經幫我們考慮了相容
			},'fast')
		}).mouseleave(function(){
			$(this).animate({
				'opacity':0.3	
			},'fast')
		}).click(function(){
			 btnClass = $(this).attr('class');
			clearInterval(timer);
			timer = setInterval(move(btnClass),1000);
		});
		
		//點選小圓圈  這些小圓圈都是動态添加的
		// $('.banner-circle li').click(function(){
		// 	console.log('111')
		// })
		
		//事件動态綁定機制
		$('.banner-circle li').on('click',function(){
			// 擷取要展示的圖檔的編号
			var index = $('.banner-circle li').index(this);
			// 讓banner動起來
			$banner_ul.animate({
				left: index * v_width * -1
			}, 'slow');
			page = index + 1;
			circleMove();
		})
	});
	</script>
</html>

           

繼續閱讀