1. 程式人生 > >移動端 touch事件 過渡事件 動畫事件

移動端 touch事件 過渡事件 動畫事件

移動端首先要書寫meta標籤

<meta type="viewport" content="width=device-width,user-scalable=no,initial-scale=1.0,maxium-scale=1.0,minium-scale=1.0 />

<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">

移動端touch事件 和 滑鼠點選事件

移動端的事件是新增的,touch事件也叫觸控事件。因為手指的行為叫觸控。滑鼠的行為叫點選。

滑鼠的點選事件依然支援,只是有300ms的延遲。

為什麼要有300ms的延遲,為了檢測是否是雙擊。

當綁定了onclick 和 touchstart事件的時候, 首先是touchstart事件先觸發

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<!-- meta標籤比較特殊, 它的功能很多, 所以需要兩個屬性, name、 content屬性, name屬性是規定meta標籤起到了什麼作用, content是描述name屬性的具體作用 -->
	<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
	<style type="text/css">
		* {
			margin: 0;
			padding: 0;
		}
		#container {
			width: 100%;
			height: 40px;
			background-color: red;
		}
	</style>
</head>
<body>
	<div id="container">
		你好
	</div>
	<script type="text/javascript">
		// 我們要點選div讓文字顏色改變為白色,
		// 在pc端我們首先想到,給元素新增onclick事件,
		// 獲取元素
		// 獲取當前事件
		var date = new Date();
		var div = document.getElementById("container");
		// 新增onclick事件
		div.onclick = function() {
			// 文字變白
			console.log("點選事件:我的顏色要變白了")
			this.style.color = "white";
			console.log(new Date() - date);
		}

		// 觸控事件
		div.addEventListener("touchstart", function() {
			// 文字顏色變為藍色
			this.style.color = "blue";
			console.log("touch事件:我的顏色要變白了")
			console.log(new Date() - date);
			
		}, false)

		// 總結: 當綁定了onclick 和 touchstart事件的時候, 首先是touchstart事件先觸發,
	</script>
</body>
</html>

移動端touch事件

touchstart()觸控開始事件

touchmove()觸控移動事件

touchend()觸控結束事件

注:touch事件需要用DOM2級進行事件繫結,DOM1級事件繫結不上

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title></title>
	<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
	<style type="text/css">
		* {
			margin: 0;
			padding: 0;
		}
		#box {
			width: 100%;
			height: 100px;
			background-color: red;
		}
	</style>
</head>
<body>
	<div id="box"></div>
	<script type="text/javascript">
	// 獲取元素
	var box = document.getElementById("box");
	////touch事件需要用dom2級事件繫結 dom1級繫結不上
	// box.touchstart = function () {
	// 	console.log("dom1級觸控");
	// }
	// 新增觸控事件
	box.addEventListener("touchstart", function() {
		console.log("觸控開始")
	})
	// 新增移動事件
	box.addEventListener("touchmove", function() {
		console.log("觸控中……")
	})
	// 新增結束事件
	box.addEventListener("touchend", function() {
		console.log("觸控結束")
	})
	</script>
</body>
</html>

touch事件的事件物件event

touchstart 和 touchmove 可以通過event.thouches 來獲取手指資訊

touchend事件不能通過event.thouches來獲取手指資訊,是因為此時手指已經離開了螢幕,所以要通過event.changedTouches來獲取手指的資訊

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title></title>
	<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
	<style type="text/css">
		* {
			margin: 0;
			padding: 0;
		}
		#box {
			width: 100%;
			height: 100px;
			background-color: red;
		}
	</style>
</head>
<body>
	<div id="box"></div>
	<script type="text/javascript">
	// 獲取元素
	var box = document.getElementById("box");
	// 新增觸控事件
	box.addEventListener("touchstart", function(e) {		
		// 想要獲取手指資訊
		console.log("觸控開始")
		console.log(e)
		console.log("觸控時候的手指x座標是: " +e.touches[0].clientX)
		console.log("觸控時候的手指y座標是: " +e.touches[0].clientY)
	})
	// 新增移動事件
	box.addEventListener("touchmove", function(e) {
		console.log("觸控中……");
		console.log(e)
		console.log("觸控時候的手指x座標是: " +e.touches[0].clientX)
		console.log("觸控時候的手指y座標是: " +e.touches[0].clientY)
	})
	// 新增結束事件
	box.addEventListener("touchend", function(e) {
		console.log("觸控結束");
		//e.touches[0].clientX獲取不到手指資訊
		// console.log("觸控結束時候的手指x座標是: " + e.touches[0].clientX)
		console.log(e)
		// console.log(e.changedTouches[0].clientX)
		console.log("觸控結束時候的手指x座標是: " + e.changedTouches[0].clientX)
		console.log("觸控結束時候的手指y座標是: " + e.changedTouches[0].clientY)
	})
	</script>
</body>
</html>

過渡事件 和 動畫事件 

當一個元素過渡開始時候,不會執行transionstart 事件,過渡開始沒有transionstart事件

當一個元素過渡完成時候,會執行transionend 事件

當一個元素動畫開始的時候,會觸發animationstart 事件

當一個元素動畫結束的時候,會觸發animationend 事件

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style type="text/css">
		* {
			margin: 0;
			padding: 0;
		}
		#box {
			position: absolute;
			top: 0;
			left: 0;
			width: 100px;
			height: 100px;
			background-color: red;
			transition: all 1s ease 0s;
		}
		#box.cur {
			left: 100px;
		}
		#box1 {
			position: absolute;
			top: 100px;
			left: 0;
			width: 100px;
			height: 100px;
			background-color: blue;
			/* animation: go 1s ease 1s 3 alternate; */
		}
		/*定義動畫*/
		@keyframes go {
			form {
				left: 0px;
			}
			to {
				left: 100px;
			}
		}
	</style>
</head>
<body>
	<div id="box"></div>
	<div id="box1"></div>
	<script type="text/javascript">
	// 獲取元素
	var box = document.getElementById("box");
	var box1 = document.getElementById("box1");
	// 1s之後,讓box新增過度效果
	setTimeout(function() {
		box.setAttribute("class", "cur");
	}, 1000)
	// 過渡事件
	box.addEventListener("transitionend", function() {
		console.log("過渡完成")
	})
	// 過渡事件沒有開始事件
	box.addEventListener("transitionstart", function() {
		console.log("過渡開始")
	})

	// 動畫開始事件
	box1.addEventListener("animationstart", function() {
		console.log("動畫開始")
	})
	// 動畫結束事件
	box1.addEventListener("animationend", function() {
		console.log("動畫結束")
	})
	</script>
</body>
</html>