JS事件總結

来源:https://www.cnblogs.com/buildnewhomeland/archive/2020/04/17/12721964.html
-Advertisement-
Play Games

1. 事件流(事件傳播) 描述的是從頁面接收事件的順序。 IE事件流是事件冒泡流,NetScape是事件捕獲流。 window: window document: document html: document.documentElement body: document.body div: doc ...


1. 事件流(事件傳播)

描述的是從頁面接收事件的順序。
IE事件流是事件冒泡流,NetScape是事件捕獲流。
window: window
document: document
html: document.documentElement
body: document.body
div: document.getElementByID('div')

2. 事件流階段

(1)事件捕獲階段 (2)處於目標階段 (3)事件捕獲階段

3. 事件對象

3.1 e.eventPhase 描述事件發生的階段

事件捕獲階段 1
處於目標階段 2
事件冒泡階段 3

3.2 事件目標

e.currentTarget === this
e.target
e.srcElement

// 相容性代碼
var target = e.target || e.srcElement;

3.3 事件代理(事件委托)

原理:事件冒泡

3.4 取消預設行為(a鏈接的跳轉行為)


e.preventDefault()
e.returnValue = false;
return false; (通用)

3.5 事件冒泡

e.bubbles(blur、focus、scroll事件返回值為false)
e.stopPropagation(); // 常用
e.stopImmediatePropagation();
如果有多個相同類型事件的事件監聽函數綁定到同一個元素,當該類型的事件觸發時,它們會按照被添加的順序執行。如果其中某個監聽函數執行了 event.stopImmediatePropagation() 方法,則當前元素剩下的監聽函數將不會被執行。
e.cancelBubble = true;

// 相容寫法
var handler = function(e) {
    e = e || window.event;
    if(e.stopPropagation) {
        e.stopPropagation();
    }else {
        e.cancelBubble = true;
    }
}

4. 事件處理程式

4.1 HTML事件處理程式

4.2 DOM0級事件處理程式

btn.onclick = function(e) {
    e = e || window.event;
    console.log(btn.innerHTML = 1);
}
// 會出現事件覆蓋現象
btn.onclick = function(e) {
    e = e || window.event;
    console.log(btn.innerHTML = 2);
}
btn.onclick = null;

4.3 DOM2級事件處理程式

btn.addEventListener('click', function() {}, false);
btn.addEventListener('click', function() {}, false);
var handler = function(){
    ...
}
btn.addEventListener('click', handler, false);
btn.removeEventListener('click', handler);

4.4 IE事件處理程式

btn.attachEvent('click', function(){
    // 在ie中的this指向全局的window
})
btn.detachEvent('click', function(){
    ...
})

處理this指向的辦法,用call(target)

5. 事件對象中的屬性 坐標位置

5.1 e.clientX/Y x/y

相對於當前的瀏覽器(客戶端視窗有效區域)的x軸、y軸的距離。(與滾動條無關)

5.2 e.screenX/Y

相對於電腦屏幕的x軸、y軸的距離。

5.3 e.pageX/Y

相對於整個頁面文檔的x軸、y軸的距離。(與滾動條有關)

5.4 e.offsetX/Y

相對於當前事件源的x軸、y軸的距離。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 簡介 • MongoDB是為快速開發互聯網Web應用而設計的資料庫系統。 • MongoDB的設計目標是極簡、靈活、作為Web應用棧的一部分。 • MongoDB的數據模型是面向文檔的,所謂文檔是一種類似於JSON的結構,MongoDB中的“JSON”我們稱為BSON,比普通的JSON的功能要更加的 ...
  • 5.3 B+ 樹 B+ 樹是為磁碟或其他直接存儲輔助設備設計的一種平衡查找樹。在B+樹中,所有記錄都是按照鍵值大小順序存放在同一層的葉子節點上,由葉子節點指針進行連接,雙向鏈表連接。 5.3.1 B+ 樹的插入操作 考慮一下三種情況: Leaf Page滿 Index Page 滿 操作 No No ...
  • 一、ES6 基本認識 1、什麼是 ES6? ES6 指的是 ECMAScript 6.0,是JavaScript 語言的一個標準。其目標是使JavaScript 可以用來編寫複雜的大型的應用程式,成為企業級開發的語言。 2、ES6 與 JavaScript 的區別? ES6 是 JavaScript ...
  • p5.js完成星際穿越特效 歡迎關註我的 "博客" ,⬅️點他即可。 星際穿越,是模仿漫天星辰撲面而來的感覺。 最關鍵的在於對透視的掌握。 參考資料:The Coding Train 00 思路構想 1. 星星是一個圓,會隨機的出現在屏幕的任何位置; 2. 星星會從遠處到眼前: 圓的大小 來表示遠近 ...
  • ES6 axios執行原理 Axios 是一個基於 promise 的 HTTP 庫,可以用在瀏覽器和 node.js 中 http://www.axios-js.com/zh-cn/docs/ 1. axios.get('1111.json') .then(response => { consol ...
  • (1) 鏈接式:(外部引入.css文件) ( 用得比較多 ) <link>在html載入前就被引用 在網頁的<head></head>標簽對中用<link>引入外部樣式表,使用html規則引入外部css : <link href="./css/style.css" rel="stylesheet" ...
  • 一、塌陷 1.當position設置為:absolute或者fixed時,元素的display會轉換為block。(設置float也會產生這樣的效應) 2.正常情況下,div會被內容撐開,但是如果設置了 1. 的情況下,父元素就會產生 塌陷 ,失去高度。 解決辦法: 給父元素設置高度。 給父元素設置 ...
  • 在項目中用到cookie一般是用在註冊時的記住賬號密碼或保存固定時間的數據 // cookie 存儲setCookie(c_name, c_pwd, exdays) { // 設置存儲用戶名密碼 var exdate = new Date(); exdate.setTime(exdate.getTi ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...