1. 程式人生 > 其它 >JavaScript 1103 增加了

JavaScript 1103 增加了

1.7 事件和事件物件


HTML 事件是發生在 HTML 元素上的事情。當在 HTML 頁面中使用 JavaScript 時, JavaScript 可以觸發這些事件。HTML 事件可以是瀏覽器行為,也可以是使用者行為。

事件物件就是當前事件發生的時候 所有資訊封裝成的物件

也就是說 使用者對網頁的一次操作就是一個事件,例如 使用者點選了頁面的按鈕 這個操作就稱之為 點選事件。使用者用的是左鍵還是右鍵點選的按鈕 等資訊 就是事件物件。

例如:
<button id="haha">你好 世界</button>


<script type="text/javascript">

haha.onmousedown = function( e ){

console.log( e );

}

</script>

1.8 滑鼠事件

屬性描述DOM
onclick 當用戶點選某個物件時呼叫的事件控制代碼。 2
oncontextmenu 在使用者點選滑鼠右鍵開啟上下文選單時觸發
ondblclick 當用戶雙擊某個物件時呼叫的事件控制代碼。 2
onmousedown 滑鼠按鈕被按下。 2
onmouseenter 當滑鼠指標移動到元素上時觸發。 2
onmouseleave 當滑鼠指標移出元素時觸發 2
onmousemove 滑鼠被移動。 2
onmouseover 滑鼠移到某元素之上。 2
onmouseout 滑鼠從某元素移開。 2
onmouseup
滑鼠按鍵被鬆開。 2

<style type="text/css">
div{
width: 300px;
height: 300px;
background-color: red;
}

ul {
width: 200px;
border: 2px solid red;
background-color: blue;
display: none;
position: fixed;
}
</style>

</head>
<body>

<div id="haha"> 123 </div>
<ul id="hehe">
<li><a href="http://www.baidu.com">1</a></li>
<li><a href="">2</a></li>
<li><a href="">3</a></li>
<li><a href="">4</a></li>
</ul>

<script type="text/javascript">

haha.oncontextmenu = function(e){
hehe.style.left = e.clientX + "px";
hehe.style.top = e.clientY + "px";

hehe.style.display = "block";
// 將系統的禁用
return false;
}
haha.onclick = function(){
hehe.style.display = "none";
}
</script>
<style type="text/css">
#aaa {
box-shadow: 10px 10px 50px 10px black;
}
</style>

</head>
<body>

<canvas id="aaa" width="1200" height="600" ></canvas>
<p>
<input type="color" id="bar">
<input type="range" min="5" max="100" id="foo">
</p>

<script type="text/javascript">

/* 獲取 畫筆 */
var hb = aaa.getContext("2d");

aaa.onmousedown = function( e ){
hb.beginPath();
hb.lineWidth = foo.value;
hb.strokeStyle = bar.value;
hb.moveTo( e.clientX , e.clientY );

aaa.
onmousemove = function( e ){
hb.lineTo( e.clientX , e.clientY);
hb.stroke();
}

}

aaa.onmouseup = function(){
aaa.onmousemove = null;
}



</script>

1.9 鍵盤事件

屬性描述DOM
onkeydown 某個鍵盤按鍵被按下。 2
onkeypress 某個鍵盤按鍵被按下並鬆開。 2
onkeyup 某個鍵盤按鍵被鬆開。 2

<input type="text" id="foo">


<script type="text/javascript">

foo.onkeypress = function( e ){

if(e.keyCode <48 || e.keyCode>57){
console.log(e.keyCode)
return false;
}

}


</script>




1.10 框架/物件(Frame/Object)事件

屬性描述DOM
onabort 影象的載入被中斷。 ( <object>) 2
onbeforeunload 該事件在即將離開頁面(重新整理或關閉)時觸發 2
onerror 在載入文件或影象時發生錯誤。 ( <object>, <body><frameset>)
onhashchange 該事件在當前 URL 的錨部分發生修改時觸發。
onload 一張頁面或一幅影象完成載入。 2
onpageshow 該事件在使用者訪問頁面時觸發
onpagehide 該事件在使用者離開當前網頁跳轉到另外一個頁面時觸發
onresize 視窗或框架被重新調整大小。 2
onscroll 當文件被滾動時發生的事件。 2
onunload 使用者退出頁面。 ( <body><frameset>) 2

<style type="text/css">

.a1 {
position: fixed;
left: 200px;
top: 50px;
}
.a2 {
position: static;
}

</style>


</head>
<body>


<input type="text" id="foo">

<ol>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ol>


<script type="text/javascript">

window.onscroll = function(e){

if(window.pageYOffset > 235){
foo.className = "a1";
}else{
foo.className = "a2";
}
}

</script>

1.11 表單事件

屬性描述DOM
onblur 元素失去焦點時觸發 2
onchange 該事件在表單元素的內容改變時觸發( <input>, <keygen>, <select>, 和 <textarea>) 2
onfocus 元素獲取焦點時觸發 2
onfocusin 元素即將獲取焦點時觸發 2
onfocusout 元素即將失去焦點時觸發 2
oninput 元素獲取使用者輸入時觸發 3
onreset 表單重置時觸發 2
onsearch 使用者向搜尋域輸入文字時觸發 ( <input="search">)
onselect 使用者選取文字時觸發 ( <input><textarea>) 2
onsubmit 表單提交時觸發 2


<body>

<img width="200" height="200" style="border-radius: 150px;border: 2px solid red;" id="foo" >
<input type="file" accept="image/*" multiple="multiple" id="bar">

<script type="text/javascript">

bar.onchange = function(){
/* 檔案讀取物件 */
var r = new FileReader();
/* 讀取檔案路徑 */
r.readAsDataURL( bar.files[0] );
/* 當讀取載入完成 */
r.onload = function(){
foo.src = r.result;
}
}

</script>

</body>

1.12 事件冒泡



<ul>
<li class="foo">寶馬
<ul>
<li>M3</li>
<li>M4</li>
<li>M5</li>
</ul>

</li>
<li class="foo">寶駿
<ul>
<li>730</li>
<li>520</li>
<li>310</li>
</ul>
</li>
<li class="foo">保時捷
<ul>
<li>718</li>
<li>911</li>
<li>918</li>
</ul>
</li>
</ul>


<script type="text/javascript">
var arr = document.querySelectorAll(".foo");
for(var i=0;i<arr.length;i++){
var li = arr[i];
li.onclick = function(){
if(this.firstElementChild.style.display == "none"){
this.firstElementChild.style.display = "block";
}else{
this.firstElementChild.style.display = "none";
}
}
}
</script>


此時我們點選的是 標籤的子標籤 也能觸發當前標籤的點選事件 這就稱之為 事件冒泡
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">


<style type="text/css">

#foo {
width: 200px;
height: 200px;
background-color: blue;
}
#bar {
width: 100px;
height: 100px;
background-color: yellow;
}


</style>

</head>
<body>

<div id="foo">
<div id="bar"></div>
</div>

<script type="text/javascript">

foo.onclick = function(){
alert("大的被點選了");
}

bar.onclick = function( e ){
alert("小的被點選了");
e.cancelBubble = true;
}
</script>


</body>
<ul>
<li class="foo">寶馬
<ul>
<li>M3</li>
<li>M4</li>
<li>M5</li>
</ul>

</li>
<li class="foo">寶駿
<ul>
<li>730</li>
<li>520</li>
<li>310</li>
</ul>
</li>
<li class="foo">保時捷
<ul>
<li>718</li>
<li>911</li>
<li>918</li>
</ul>
</li>
</ul>


<script type="text/javascript">
var arr = document.querySelectorAll(".foo");

for(var i=0;i<arr.length;i++){
var li = arr[i];
li.onclick = function(){
if(this.firstElementChild.style.display == "none"){
this.firstElementChild.style.display = "block";
}else{
this.firstElementChild.style.display = "none";
}
}
}

var arr1 = document.querySelectorAll(".foo li");
for(var i=0;i<arr1.length;i++ ){
var li = arr1[i];
li.onclick = function(e){
e.cancelBubble = true;
}
}

</script>