異型滾動參與多元素的運動

異型滾動參與多元素運動

思路:
異型滾動就是沒有火車的概念,每個“車廂”都是單獨的個體,點擊按鈕之後:下一個圖片變爲上一個圖片的狀態,包括寬度、高度、位置都會進行輪替。也可以叫做“樣式輪替輪播”。上圖中的輪播看似是5張圖片,實際上需要7張圖片。因爲左右各有小圖片當做貓膩。

jQuery的animate是不能把一個left,動畫爲right定位的。比如一個div天生left:100px;現在你讓他動畫到right:10px。jQuery無能爲力!因爲一個是left屬性一個是right屬性。

原理就是3號元素變爲2號元素的樣子,left、top、width、height四個屬性都變。
2號變成1號……
1號變成0號……
0號變成6號……
$(".no1").animate({“width”: 70,“height”: 50,“left”:-120,“top”:70});

在這裏插入圖片描述

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style type="text/css">
		* {
			margin: 0;
			padding: 0;
		}
		ul, ol {
			list-style: none;
		}
		.carousel {
			position: relative;
			width: 670px;
			height: 221px;
			margin: 50px auto;
			border: 1px solid #000;
			background-image: url(images/shuzi/pic_bg.gif);
			/*overflow: hidden;*/
		}
		.carousel ul li {
			position: absolute;
			width: 70px;
			height: 50px;
			left: -120px;
			top: 70px;
		}
		.carousel ul li.no1 {
			width: 90px;
			height: 60px;
			left: 20px;
			top: 60px;
		}
		.carousel ul li.no2 {
			width: 112px;
			height: 80px;
			left: 121px;
			top: 30px;
		}
		.carousel ul li.no3 {
			width: 156px;
			height: 100px;
			left: 250px;
			top: 16px;
		}
		.carousel ul li.no4 {
			width: 112px;
			height: 84px;
			left: 430px;
			top: 30px;
		}
		.carousel ul li.no5 {
			width: 90px;
			height: 60px;
			left: 560px;
			top: 60px;
		}
		.carousel ul li.no6 {
			width: 70px;
			height: 50px;
			left: 710px;
			top: 70px;
		}
		.carousel .btns a {
			position: absolute;
			width: 44px;
			height: 44px;
			top: 150px;
		}
		.carousel .btns a:first-child {
			left: 25px;
		}
		.carousel .btns a:last-child {
			right: 25px;
		}
		img {
			width: 100%;
			height: 100%;
		}
		.carousel ul li.waiting {
			display: none;
		}
	</style>
</head>
<body>
	<div class="carousel" id="carousel">
		<ul>
			<li class="no0"><img src="images/shuzi/0.png" alt=""></li>
			<li class="no1"><img src="images/shuzi/1.png" alt=""></li>
			<li class="no2"><img src="images/shuzi/2.png" alt=""></li>
			<li class="no3"><img src="images/shuzi/3.png" alt=""></li>
			<li class="no4"><img src="images/shuzi/4.png" alt=""></li>
			<li class="no5"><img src="images/shuzi/5.png" alt=""></li>
			<li class="no6"><img src="images/shuzi/6.png" alt=""></li>
			<li class="waiting"><img src="images/shuzi/7.png" alt=""></li>
			<li class="waiting"><img src="images/shuzi/8.png" alt=""></li>
			<li class="waiting"><img src="images/shuzi/9.png" alt=""></li>
			<li class="waiting"><img src="images/shuzi/10.png" alt=""></li>
		</ul>
		<div class="btns">
			<a href="#" id="leftBtn"></a>
			<a href="#" id="rightBtn"></a>
		</div>
	</div>
	<script type="text/javascript" src="js/jquery-1.12.3.min.js"></script>
	<script type="text/javascript">
	// 定義數組將所有li的狀態保存起來
	// 一般常量用大寫字母表示
	// var JSONARR = [];
	// 使用for循環將所有li的狀態保存(width, height, left, top)
	// for (var i = 0; i < 7; i++) {
	// 	JSONARR.push({
	// 		"width": $(".no" + i).css("width"),
	// 		"height": $(".no" + i).css("height"),
	// 		"top": $(".no" + i).css("top"),
	// 		"left": $(".no" + i).css("left")
	// 	});
	// }
	// console.log(JSONARR);

	// 將散的語句合併
	var JSONARR = (function() {
		var temp = [];
		for (var i = 0; i < 7; i++) {
			temp.push({
				"width": $(".no" + i).css("width"),
				"height": $(".no" + i).css("height"),
				"left": $(".no" + i).css("left"),
				"top": $(".no" + i).css("top"),
			})
		}
		return temp;
	})()
	console.log(JSONARR)

	// 定義數組用於保存所有li的類名
	// var classNameArr = [];
	// // 循環所有的li元素並保存類名
	// $("li").each(function(i) {
	// 	classNameArr.push($(this).attr("class"))
	// })

	// 將散的語句進行合併
	var classNameArr = (function() {
		var temp = [];
		$("li").each(function(i) {
			temp.push($(this).attr("class"))
		})
		return temp;
	})();
	console.log(classNameArr);



	$("#rightBtn").click(function() {
		// 防流氓
		if ($("li").is(":animated")) {
			return;
		}
		// 讓.noX 運動到.noX - 1的位置
		for (var i = 1; i < 7; i++) {
			$(".no" + i).animate(JSONARR[i - 1], 600);
		}

		// 爲了類名相統一, 我們決定輪換類名,
		// 將數組的最後一位刪除放到數組的第一位
		classNameArr.unshift(classNameArr.pop());
		// console.log(classNameArr);

		// 體現在元素身上
		$("li").each(function(i) {
			$(this).attr("class", classNameArr[i]);
		})


		// 由於.no6 是由waiting display: none 變來的
		// 爲了防止出現bug 我們強制給no6添加行內樣式
		$(".no6").css(JSONARR[6]);
	})

	// 左按鈕點擊事件
	$("#leftBtn").click(function() {
		// 防流氓
		if ($("li").is(":animated")) {
			return;
		};
		// 讓.noX 運動到 .noX + 1的位置
		for (var i = 0; i < 6; i++) {
			$(".no" + i).animate(JSONARR[i + 1], 600);
		}

		// 爲了類名相統一,我們要輪換類名
		// 將數組的第一位刪除放入數組的最後一位
		classNameArr.push(classNameArr.shift());
		// console.log(classNameArr);

		// 遍歷所有的li
		$("li").each(function(i) {
			$(this).attr("class", classNameArr[i]);
		})


		// 由於.no0 是由waiting display: none 變來的
		// 爲了防止出現bug 我們強制給no0添加行內樣式
		$(".no0").css(JSONARR[0]);
	})

	</script>
</body>
</html>

提示:
所需素材已經上傳到資源中,需要的同學可以下載,學會做題的思路,才能更好的吸收知識。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章