javascript基礎(事件的冒泡)(三十二)

厚積薄發2017發表於2017-02-14

1.冒泡簡介:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			
			#box1{
				width: 200px;
				height: 200px;
				background-color: yellowgreen;
			}
			
			#s1{
				display: block;
				width: 100px;
				height: 100px;
				background-color: yellow;
				position: absolute;
				top: 500px;
			}
			
		</style>
		
		<script type="text/javascript">
			
			window.onload = function(){
				
				/*
				 * 冒泡(Bubble)
				 * 	- 冒泡簡單來說就是事件的向上傳導,當後代元素上的事件被觸發時,
				 * 		將會導致祖先元素上的相同事件也被觸發
				 * 	- 大部分情況下冒泡都是對開發有利的,可以簡化我們的開發
				 * 	- 如果不希望發生事件的冒泡,則可以通過事件物件來取消冒泡
				 * 	- 將事件物件的cancelBubble屬性設定true,即可取消冒泡
				 * 	
				 */
				
				//為span繫結一個單擊響應函式
				var s1 = document.getElementById("s1");
				s1.onclick = function(event){
					
					event = event || window.event;
					
					alert("我是span的單擊響應函式~~~~");
					
					//取消冒泡
					//event.cancelBubble = true;
				};
				
				//為div繫結一個單擊響應函式
				var box1 = document.getElementById("box1");
				box1.onclick = function(event){
					event = event || window.event
					alert("我是div的單擊響應函式~~~~");
					
					//event.cancelBubble = true;
				};
				
				//為body繫結一個單擊響應函式
				document.body.onclick = function(){
					alert("我是body的單擊響應函式~~~~");
				};
				
			};
			
			
		</script>
	</head>
	<body>
		
		<div id="box1">
			
			<span id="s1">我是一個span</span>
			
		</div>
		
	</body>
</html>


2.冒泡練習:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			#box1{
				width: 100px;
				height: 100px;
				background-color: red;
				
				/*開啟絕對定位*/
				position: absolute;
			}
		</style>
		
		<script type="text/javascript">
			
			window.onload = function(){
				
				/*
				 * 使div可以跟隨滑鼠移動
				 * 
				 * 使div跟隨滑鼠移動,實際上就是將div的偏移量設定為滑鼠的座標
				 */
				
				//獲取box1
				var box1 = document.getElementById("box1");
				
				//取消box1滑鼠移動的冒泡
				/*box1.onmousemove = function(event){
					event = event || window.event;
					
					event.cancelBubble = true;
					
				};*/
				
				//繫結一個滑鼠移動的事件
				document.onmousemove = function(event){
					//處理相容的問題
					event = event || window.event;
					
					/*
					 * 事件物件的clientX和clientY獲取的座標是滑鼠相對於瀏覽器視窗可見區域的座標
					 * 	但是元素的偏移量相對於頁面的,所以當拖動滾動條時,會發現滑鼠指標和元素的位置發生了偏離
					 * 
					 * 為了解決這個問題,可以將滾動條滾動的距離加到偏移量中
					 */
					//獲取垂直方向的滾動距離
					/*
					 * 在chrome瀏覽器中,認為視窗的滾動條就是body的,可以通過body來獲取
					 * 
					 * 而其他瀏覽器認為瀏覽器的滾動條是html的,需要通過html根標籤來獲取
					 */
					//var st = document.body.scrollTop;
					//var st = document.documentElement.scrollTop;
					var st = document.documentElement.scrollTop || document.body.scrollTop;
					var sl = document.documentElement.scrollLeft || document.body.scrollLeft;
					
					
					
					
					//獲取滑鼠的座標
					/*
					 * pageX
					 * pageY
					 * 	- 可以獲取滑鼠指標相對於頁面的水平和垂直座標
					 * 	- 但是這兩個屬性在IE8及以下的瀏覽器中並不支援,所以如果需要相容IE8則不能使用
					 */
					var left = event.clientX;
					var top = event.clientY;
					
					//修改box1的偏移量
					box1.style.left = left + sl + "px";
					box1.style.top = top + st + "px";
					
				};
				
				
			};
			
		</script>
	</head>
	<body style="height: 3000px; width: 3000px;">
		
		<div id="box1"></div>
		
	</body>
</html>


 

 

相關文章