中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

如何用js代碼觸發dom事件

這篇文章主要為大家展示了如何用js代碼觸發dom事件,內容簡而易懂,希望大家可以學習一下,學習完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。

企業建站必須是能夠以充分展現企業形象為主要目的,是企業文化與產品對外擴展宣傳的重要窗口,一個合格的網站不僅僅能為公司帶來巨大的互聯網上的收集和信息發布平臺,創新互聯建站面向各種領域:食品包裝袋網站設計網絡營銷推廣解決方案、網站設計等建站排名服務。


背景

前端編寫測試用例時,在測試界面上的一些效果時,通常都希望能夠模擬一些用戶操作,而模擬用戶操作最主要的方式就是用代碼觸發指定事件。通常一些元素上會自帶一些觸發事件的方法,例如click、focus等,但是如果是其他的事件,例如mousedown、mouseup、mouseenter,這些事件怎么模擬呢?

思路

其實思路很簡單,web標準中定義了一系列API接口,其中dispatchEvent允許我們向一個指定的事件目標派發一個事件,而且使用這個方法觸發的事件是可以正常觸發我們的標準事件處理規則的(包括事件捕獲和可選的冒泡過程),那么這就非常強大了,我們可以基于此做很多事情了。

實現方法

大致流程相信大家都已經想到了,無外乎以下幾步操作:

  • 創建要觸發的事件實例
  • 獲取要觸發事件的元素對象
  • 調用元素對象的dispatchEvent方法,參數是目標事件實例
  • 特殊事件要分析一下模擬方式,巧妙的實現

首先,創建事件實例

web標準提供了MouseEvent 接口,專指用戶與指針設備( 如鼠標 )交互時發生的事件。使用此接口的常見事件包括:click、dblclick 、mouseup、mousedown。

通過構造函數MouseEvent(typeArg, mouseEventInit),可以生成一個新的MouseEvent對象。該構造函數接受兩個參數,第一個參數為typeArg,用于指定事件的名稱,一般都是一個字符串。第二個參數為mouseEventInit,可以初始化 MouseEvent的字典,也就是指定一些該事件的屬性值,比如鼠標事件常見的screenX、screenY、clientX、clientY等屬性,同時,由于MouseEvent是繼承于UIEvent,UIEvent又繼承于Event,所以mouseEventInit可以包含UIEventInit和EventInit中的屬性。

總結一行代碼就是:

const mouseEvent = new MouseEvent(typeArg, mouseEventInit);

這里大家看自己實際需要,去指定哪些屬性的哪些值即可。

這里再說一句,不僅是鼠標事件,還有很多其他事件,只要瀏覽器支持,都可以使用的。具體參考:https://developer.mozilla.org/zh-CN/docs/Web/API

這里面列出的事件,理論上都可以自己模擬并觸發。

其次,就是在指定元素上觸發該事件

有了事件,那么就可以去調用對應元素上的dispatchEvent方法觸發了。這里簡單,也就是一行代碼:

document.getElementById("id").dispatchEvent(mouseEvent);

最后,特殊事件或者場景,分解操作來模擬

有些特殊事件或者場景,其實可以分析一波細節,然后分解成若干個事件連續觸發,即可巧妙的實現。
這里舉個例子,點擊事件,其實本質是:觸發一次mousedown,同時在足夠短的時間內再觸發一次mouseup,那么這樣即可間接實現一次click事件。即:

// 一段足夠短的時間內
mousedown+mouseup=click

這樣,其實在模擬一些特殊操作時,我們也可以實現了。比如,模擬用戶的鼠標拖拽多選操作,其本質就是:現在某個元素上觸發mousedown事件,然后執行mousemove事件,然后拖拽到某一個元素上時,觸發mouseup事件;即:

// 模擬用戶拖拽鼠標
(開始元素)mousedown+(截止元素)mouseup=一次鼠標拖拽操作

這里細節可以足夠多,看你實際場景按需模擬即可,比如鼠標移動過程中,鼠標進入某個元素時,該元素還會觸發mouseenter事件,離開元素還會觸發mouseleave事件。那就是:

// 更精確的模擬用戶拖拽鼠標
(開始元素)mousedown+(中間元素)mouseenter+(中間元素)mouseleave+(截止元素)mouseup=一次鼠標拖拽操作

總之,細節可以足夠多,但是夠你模擬出本次操作的基本測試點即可,別忘了,我們的前提是模擬用戶操作,進而執行測試用例。

再進一步,你完全可以封裝一些常見的用戶操作,然后將方法暴露出來,在測試用例中引入,實現高度復用。

總結

總結下來呢,其實就是采用MouseEvent和dispatchEvent兩個web標準提供的接口,來通過代碼觸發事件,進而模擬用戶的操作,達到測試用例中,模擬用戶行為的目的。希望對你有所幫助。

注意事項

這里有些限制條件,需要大家注意下:

  1. 本文所說的方法,主要是用于自動化測試場景中的,正常開發項目中,不建議大家用這種方式觸發事件,這可能會導致你的代碼難以理解,影響代碼的可維護性。
  2. 本文中主要用到的這兩大接口,是有兼容性限制的,IE基本上是無法使用的,但是,一般來講,使用這種方法的場景多數都是單元測試或者自動化測試的場景,這些場景下一般都會有模擬瀏覽器環境,而且用的最多的就是chrome的內核,所以基本上在測試場景下,這種方式是可以放心使用的

以上就是關于如何用js代碼觸發dom事件的內容,如果你們有學習到知識或者技能,可以把它分享出去讓更多的人看到。

文章名稱:如何用js代碼觸發dom事件
文章URL:http://www.2m8n56k.cn/article28/jphscp.html

成都網站建設公司_創新互聯,為您提供網站營銷移動網站建設網站排名響應式網站服務器托管動態網站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站建設
主站蜘蛛池模板: 免费一级a毛片在线播放视 免费一级α片在线观看 | 性视频网站在线 | 香港三级日本三级妇人三级 | 久久精品免视国产 | 国产手机在线精品 | 国产精品日韩欧美一区二区 | 色婷婷国产精品欧美毛片 | 国产精品视频一区二区三区 | 99国产成人高清在线视频 | 岛国伊人 | 亚洲精品久久久久久久福利 | 久久这里只有精品免费视频 | 一级毛片 在线播放 | 欧美国产一区二区 | 亚洲国产精品综合久久 | 亚洲精品欧美精品中文字幕 | 国产亚洲一区二区精品 | 亚洲美色综合天天久久综合精品 | 欧美在线成人免费国产 | 男女免费在线视频 | 自拍 欧美 在线 综合 另类 | 中文字幕一区二区三区久久网站 | 一级特黄特色的免费大片视频 | 中国一级性生活片 | 99re5久久在热线播放 | 视频一区二区三区在线 | 成人一级 | 亚洲人在线播放 | 在线观看日韩 | 一区二区三区中文字幕 | 日本三级2021最新理论在线观看 | 欧美日韩高清不卡免费观看 | 国产精品美女久久久久网站 | 亚洲美女视频在线观看 | 亚洲综合日韩精品欧美综合区 | 日本三级日产三级国产三级 | 大片毛片 | 黄色免费在线观看视频 | 国内精品视频九九九九 | 免费一级特黄 欧美大片 | 色婷婷久久综合中文久久蜜桃 |