1. 程式人生 > >JavaScript - 常用事件總結

JavaScript - 常用事件總結

目錄

一、事件的兩種繫結方式 

1、on事件繫結方式

2、非on事件繫結方式

二、事件引數event 

三、事件的冒泡與預設事件 

1、事件的冒泡:子位於父內部,子觸發,父也一起觸發事件。

 1-1 取消冒泡事件的方式一:子級內部設定stopPropagation()

 1-2 取消冒泡事件的方式二:子級內部設定.cancelBubble = true;

2、預設事件的兩種取消方式:preventDefault(),return false;

四、滑鼠事件

1.常用滑鼠事件

2.常用事件引數ev

五、鍵盤事件 

1、鍵盤事件

2、事件引數ev

3、實現鍵盤控制平滑運動

六、表單事件 

七、文件事件 :由window呼叫

八、圖片事件 

九、頁面事件 


全部事件查詢

一、事件的兩種繫結方式 

1、on事件繫結方式

var div = document.querySelector('.div');
// on事件
div.onclick = function () {
	console.log("點選1");
}
div.onclick = function () {
	console.log("點選2");
}
// 只打印"點選2",原因:只能繫結最後一個方法

// 事件的移除
div.onclick = null;

2、非on事件繫結方式

// 非on事件的繫結 
// addEventListener('事件名', 回撥函式, 冒泡方式)
//注意:回撥函式存在匿名和非匿名兩種繫結形式。

document.addEventListener('click', function() {
     console.log("點選1");
})
document.addEventListener('click', function() {
     console.log("點選2");
})
// 非on事件可以同時繫結多個方法,被繫結的方法依次被執行
// addEventListener第三個引數(true|false)決定冒泡的方式

function fn () {}
document.addEventListener('click', fn);
// 事件的移除
document.removeEventListener('click', fn);
// 注:繫結與移除需要指向同一個方法(地址),即必須使用非匿名函式進行繫結

 

 

二、事件引數event 

//存放事件資訊的回撥引數
body.onclick = function (ev) {
	// 事件的相容
    // event = ev | windows.event
	// ev = ev | event; ev引數呼叫的兩種寫法
    //由於考慮到視窗的相容問題,如果寫入event 則呼叫引數需要帶上字首windows.event
    //如果寫入ev,則呼叫則能省去字首,通常被選擇

	// 點選傳過來的是 MouseEvent,儲存著滑鼠觸發事件的一系列資訊
	console.log(ev);
	console.log("body click");
}

 

 

三、事件的冒泡與預設事件 

1、事件的冒泡:子位於父內部,子觸發,父也一起觸發事件。


	<style type="text/css">
		.sub {
			width: 100px;
			height: 100px;
			background-color: red;
			position: absolute;
			left: 50px;
			top: 50px;
		}
		.sup {
			width: 200px;
			height: 200px;
			background-color: orange;
			position: relative;
			/*position: absolute;
			top: 50px;
			left: 100px;*/
			margin: 50px auto;
		}
		body {
			border: 1px solid black;
		}
	</style>


<body>
	<div class="sup">
		<div class="sub"></div>
	</div>
</body>

<script type="text/javascript">
	var sub = document.querySelector('.sub');
	var sup = document.querySelector('.sup');
	var body = document.querySelector('body');

	sub.onclick = function (ev) {
		console.log("sub click");
	}
	sup.onclick = function (ev) {
		console.log("sup click");
	}
	body.onclick = function (ev) {
		console.log(ev);
		console.log("body click");
	}


</script>

 1-1 取消冒泡事件的方式一:子級內部設定stopPropagation()

        sub.onclick = function (ev) {
		ev.stopPropagation();
		console.log("sub click");
	}
	sup.onclick = function (ev) {
		console.log("sup click");
	}
	body.onclick = function (ev) {
		console.log(ev);
		console.log("body click");
	}

 1-2 取消冒泡事件的方式二:子級內部設定.cancelBubble = true;

sub.onclick = function (ev) {
	ev.cancelBubble = true;
	console.log("sub click");
}
sup.onclick = function (ev) {
	console.log("sup click");
}
body.onclick = function (ev) {
	console.log(ev);
	console.log("body click");
}

2、預設事件的兩種取消方式:preventDefault(),return false;

預設事件:瀏覽器自帶的視窗事件,例如如滑鼠右鍵喚出選單

注意:若父級的預設事件被取消,子級的預設事件也會被取消

// 預設事件: 滑鼠右鍵 oncontextmenu
sub.oncontextmenu = function (ev) {
	ev.preventDefault();
	console.log("sub menu click");
}


body.oncontextmenu = function (ev) {
	console.log("body menu click");
	return false;
}

 

四、滑鼠事件

1.常用滑鼠事件

  • onclick:滑鼠點選
  • ondblclick:滑鼠雙擊
  • onmousedown:滑鼠按下
  • onmousemove:滑鼠移動
  • onmouseup:滑鼠擡起
  • onmouseover:滑鼠懸浮 onmouseenter
  • onmouseout:滑鼠移開   onmouseleave
  • oncontextmenu:滑鼠右鍵
var div = document.querySelector('.div');

// 雙擊
div.ondblclick = function () {
	console.log("雙擊了");
}

// 滑鼠按下
div.onmousedown = function () {
	console.log("按下");
}
// 滑鼠擡起
div.onmouseup = function () {
	console.log("擡起");
}

2.常用事件引數ev

  • ev.clientX:點選點X座標
  • ev.clientY:點選點Y座標
  • 檢視滑鼠event屬性
    document.onclick = function(ev){
    	console.log(ev)
    }

// 滑鼠移動
div.onmousemove = function (ev) {
	// 滑鼠在頁面中的位置
	console.log("x的座標:", ev.clientX);
	console.log("y的座標:", ev.clientY);
	console.log("移動");
}

 

 

五、鍵盤事件 

1、鍵盤事件

  • onkeydown:鍵盤按下
  • onkeyup:鍵盤擡起

2、事件引數ev

  • ev.keyCode:按鍵編號
  • ev.altKey:alt特殊按鍵
  • ev.ctrlKey:ctrl特殊按鍵
  • ev.shiftKey:shift特殊按鍵

<head>
	<meta charset="UTF-8">
	<title>鍵盤事件</title>
	<style type="text/css">
		.div {
			width: 200px;
			height: 200px;
			background-color: red;
			/*margin: 50px auto;*/
			position: absolute;
			top: 0;
			left: 100px;
		}
	</style>
</head>

<body>
	<div class="div"></div>
</body>

<script type="text/javascript">
	var div = document.querySelector('.div');
	// 操作一般標籤,鍵盤事件繫結給document
	// 表單標籤(可以錄入文字),鍵盤事件繫結給表單標籤
	document.onkeydown = function (ev) {
		console.log(ev); //檢視鍵盤的所有屬性
		// console.log(ev.keyCode);
		switch(ev.keyCode) {
			case 37: 
				console.log("左");
				div.style.left = div.offsetLeft - 3 + "px";
				break;
			case 38: 
				console.log("上");
				div.style.top = div.offsetTop - 3 + "px";
				break;
			case 39: 
				console.log("右");
				div.style.left = div.offsetLeft + 3 + "px";
				break;
			case 40: 
				console.log("下");
				div.style.top = div.offsetTop + 3 + "px";
				break;
		}
	}
</script>

3、實現鍵盤控制平滑運動


<head>
	<meta charset="UTF-8">
	<title>鍵盤控制平滑運動</title>
	<style type="text/css">
		.div {
			width: 100px;
			height: 100px;
			background-color: red;
			position: absolute;
			top: 120px;
			left: 100px;
		}
	</style>
</head>

<body>
	<div class="div"></div>
</body>

<script type="text/javascript">
	var div = document.querySelector('.div');

	// 能否向左|右|上|下運動
	var l_able = false;
	var t_able = false;
	var r_able = false;
	var b_able = false;

	//定時器,延遲16毫秒執行
	setInterval(function () {

		if (r_able == true) {
			div.style.left = div.offsetLeft + 3 + 'px';  // 右
		}
		// l_able為假,則後者短路,可以實現if的簡寫
		l_able && (div.style.left = div.offsetLeft - 3 + 'px');  // 左
		t_able && (div.style.top = div.offsetTop - 3 + 'px');  // 上
		b_able && (div.style.top = div.offsetTop + 3 + 'px');  // 下

	}, 16);
	
	document.onkeydown = function (ev) {
		switch(ev.keyCode) {
			case 37: l_able = true; break;
			case 38: t_able = true; break;
			case 39: r_able = true; break;
			case 40: b_able = true; break;
		}
	}

	document.onkeyup = function (ev) {
		console.log(ev);
		switch(ev.keyCode) {
			case 37: l_able = false; break;
			case 38: t_able = false; break;
			case 39: r_able = false; break;
			case 40: b_able = false; break;
		}
	}
</script>

 

六、表單事件 

  • onfocus:獲取焦點
  • onblur:失去焦點
  • onselect:文字被選中
  • oninput:值改變
  • onchange:值改變,且需要在失去焦點後才能觸發
  • onsubmit:表單預設提交事件

<body>

	<form action="">
		<input type="text" name="usr">
		<button type="submit">提交</button>
	</form>
	<div></div>
</body>

<script type="text/javascript">
	var form = document.querySelector('form');
	var ipt = document.querySelector('input');
	var btn = document.querySelector('button');
	var div = document.querySelector('div');

	ipt.onfocus = function(){
		console.log("input 焦點");
	}
	ipt.onblur =function(){
		console.log("input 失去焦點");
	}

	ipt.onselect = function () {
		console.log("文字被選中了");
	}



	// 值改變就觸發
	//innerText 自動觸發下方框
	ipt.oninput = function () {
		console.log("輸入值正在改變");
		div.innerText = this.value;
	}
	// 鍵盤擡起觸發
	ipt.onkeyup = function () {
		console.log("鍵盤擡起,值改變");
		div.innerText = this.value;
	}

	// 改變了值,並且丟失焦點觸發
	ipt.onchange = function () {
		console.log("值改變  丟失焦點");
		div.innerText = this.value;
	}

	// form的專有事件
	form.onsubmit = function () {
		console.log("提交");
		return false;
	}

</script>

 

七、文件事件 :由window呼叫

  • onload:頁面載入成功
  • onbeforeunload:頁面退出或重新整理警告,需要設定回撥函式返回值,返回值隨意
<!DOCTYPE html>
<html lang="zh">
<head>
	<meta charset="UTF-8">
	<title>文件事件</title>
	<!-- 程式碼自身至下解析 -->
	<script type="text/javascript">
		var div = document.querySelector('div');
		console.log(div);  // null
	</script>
	
	<script type="text/javascript">
		// 文件載入完畢,觸發
		window.onload = function () {
			var div = document.querySelector('div');
			console.log(div);
		}
	</script>
</head>
<body>
	<div class="div"></div>
</body>
<script type="text/javascript">
	window.onbeforeunload = function () {
		return false;
	}
</script>
</html>

八、圖片事件 

  • onerror:圖片載入失敗

<body>
	<img src="img/001.png" alt="">
</body>

<script type="text/javascript">
	var img = document.querySelector('img');
	img.onerror = function () {
		console.log("圖片載入失敗了");
	}
</script>

九、頁面事件 

  • onscroll:頁面滾動
  • onresize:頁面尺寸調整
  • window.scrollY:頁面下滾距離
<!DOCTYPE html>
<html lang="zh">
<head>
	<meta charset="UTF-8">
	<title>頁面事件</title>
	<script type="text/javascript">
		//瀏覽器的滾輪
		window.onload = function () {
			window.onscroll = function () {
				console.log(window.scrollY);
			}

			window.onresize = function () {
				console.log(window)
			}

		}
		//頁面標籤的滾輪
		window.onload = function(){
			var d = document.querySelector('.d');
			d.onscroll = function () {
				console.log(d);
			}
		}
		
	</script>
	<style>
		.d{
			width: 150px;
			height : 150px;
			overflow: scroll;
		}
	</style>

</head>
<body>
	<div class="d">
		br*100
	</div>
	br*100
</body>
</html>