整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          如何用 JavaScript 模擬點擊事件,簡單實現 x, y 坐標點擊?

          前端開發中,有時我們需要模擬點擊頁面上的某個位置,比如自動化測試或者模擬用戶操作。今天,我將一步步帶大家實現這個功能,讓大家能夠輕松理解并應用。

          什么是 x, y 坐標點擊?

          簡單來說,x 和 y 坐標就是頁面上的一個點的位置。x 代表水平方向,y 代表垂直方向。我們通過這兩個數值可以準確地定位到頁面上的某個點,然后在這個點上模擬一次點擊,就像用戶用鼠標點擊一樣。

          如何通過 x, y 坐標模擬點擊?

          我們可以通過 document.elementFromPoint 方法來實現。這個方法會返回指定坐標上的元素,然后我們對這個元素調用 click 方法,就能模擬一次點擊。

          基本實現步驟

          假設我們有以下 HTML 結構:

          <div>
            hello world
          </div>

          我們希望點擊這個 div 元素,首先可以寫以下代碼:

          // 監聽所有點擊事件,并在控制臺打印被點擊的元素
          document.addEventListener('click', (e) => {
            console.log(e.target);
          });
          
          // 定義我們要點擊的坐標
          const x = 10;
          const y = 10;
          
          // 獲取指定坐標上的元素,并觸發點擊事件
          document.elementFromPoint(x, y).click();

          詳細解釋:

          1. 監聽點擊事件:通過 addEventListener 方法,我們可以監聽所有的點擊事件,并在控制臺打印被點擊的元素。
          2. 定義坐標:我們定義了 x 和 y 坐標,表示頁面上的某個點。
          3. 獲取元素并點擊:通過 document.elementFromPoint(x, y) 獲取該點上的元素,并對其調用 click 方法來模擬點擊。

          使用 MouseEvent 構造函數

          除了直接調用 click 方法,我們還可以使用 MouseEvent 構造函數來模擬更復雜的點擊事件,比如包括點擊的位置、是否可以取消等屬性。

          // 監聽所有點擊事件,并在控制臺打印被點擊的元素
          document.addEventListener('click', (e) => {
            console.log(e.target);
          });
          
          // 定義坐標
          const x = 10;
          const y = 10;
          
          // 創建一個點擊事件
          const click = (x, y) => {
            const ev = new MouseEvent('click', {
              'view': window,
              'bubbles': true,
              'cancelable': true,
              'screenX': x,
              'screenY': y
            });
            
            // 獲取指定坐標上的元素
            const el = document.elementFromPoint(x, y);
            
            // 分發點擊事件
            el.dispatchEvent(ev);
          };
          
          // 調用點擊函數
          click(x, y);

          詳細解釋:

          1. 創建點擊事件:我們使用 MouseEvent 構造函數創建一個新的點擊事件,并設置點擊位置等屬性。參數對象中的每個屬性都有特定的作用:
          2. 'view': window: 事件所關聯的窗口對象,通常是 window。
          3. 'bubbles': true: 事件是否冒泡。true 表示事件會沿著 DOM 樹向上冒泡,觸發父元素的事件監聽器。
          4. 'cancelable': true: 事件是否可以取消。true 表示可以通過 preventDefault 方法取消事件的默認行為。
          5. 'screenX' 和 'screenY': 事件發生的屏幕坐標位置,這里我們用傳入的 x 和 y 值來設置。
          6. 獲取元素并分發事件:和之前一樣,通過 document.elementFromPoint(x, y) 獲取元素,然后通過 dispatchEvent 方法分發這個點擊事件。

          小結

          通過本文的講解,我們了解了如何在 JavaScript 中通過 x, y 坐標來模擬點擊事件。無論是直接調用 click 方法,還是使用 MouseEvent 構造函數,都能實現這一功能。希望大家在日常開發中能用到這個技巧,提升工作效率。

          如果你覺得本文有幫助,不妨點贊收藏,也可以分享給更多需要的小伙伴。

          元素是CSS中的一種特殊選擇器, 用于在元素的特定位置插入內容, 它們被稱為“偽元素”, 是因為它們不是實際存在于HTML DOM文檔中的元素, 而是通過CSS來創建的, 那偽元素如何添加點擊元素?

          在頁面上我們無法通過jQuery獲取到元素中的偽元素進行事件綁定,所以我們利用pointer-events屬性屏蔽元素操作事件, 將事件綁定到偽元素上。例:

          html:

          <div>盒子的內容</div>

          css:

          div{
          		pointer-events: none;
          }
          div:after{
          		pointer-events:auto;
          }

          js:

          $('div').on('click', function () {
          console.log(this) //該事件實際綁定元素是after偽元素
          })

          解決偽元素蓋住點擊事件

          在偽元素代碼中加上這句,可穿透偽元素點擊

          pointer-events:none;

          偽元素的點擊事件

          1.父元素 使用 "pointer-events: none;" 偽元素使用"pointer-events: auto;"

          <div class="subcategories">這里有點擊事件</div>
          <div class="subcategories">這里有點擊事件</div>
          <div class="subcategories">這里有點擊事件</div>
          <script type="text/javascript">
          //阻止點擊事件
          $(function() {
              $(".subcategories").click(function(event) {
                  event.stopPropagation();
              });
          });
          </script>

          么是JS事件冒泡?

          在一個對象上觸發某類事件(比如單擊onclick事件), 如果此對象定義了此事件的處理程序, 那么此事件就會調用這個處理程序, 如果沒有定義此事件處理程序或者事件返回true,

          那么這個事件會向這個對象的父級對象傳播, 從里到外, 直至它被處理(父級對象所有同類事件都將被激活), 或者它到達了對象層次的最頂層, 即document對象(有些瀏覽器是window)。

          如何來阻止Jquery事件冒泡?

          通過一個小例子來解釋

          <!DOCTYPE html>
          <html>
          <head runat="server">
          <title>Porschev---Jquery 事件冒泡</title>
          <script src="jquery-1.3.2-vsdoc.js" type="text/javascript"></script>
          </head>
          <body>
            <form id="form1" runat="server">
              <div id="divOne" onclick="alert('我是最外層');">
                <div id="divTwo" onclick="alert('我是中間層!')">
                  <a id="hr_three" href="http://www.baidu.com" mce_href="http://www.baidu.com"onclick="alert('我是最里層!')">點擊我</a>
                </div>
              </div>
            </form>
          </body>
          </html>

          比如上面這個頁面,

          分為三層:divOne是第外層,divTwo中間層,hr_three是最里層;

          他們都有各自的click事件,最里層a標簽還有href屬性。

          運行頁面,點擊“點擊我”,會依次彈出:我是最里層---->我是中間層---->我是最外層

          ---->然后再鏈接到百度.


          這就是事件冒泡, 本來我只點擊ID為hr_three的標簽, 但是確執行了三個alert操作。

          事件冒泡過程(以標簽ID表示):hr_three----> divTwo----> divOne 。從最里層冒泡到最外層。

          如何來阻止?

          1.event.stopPropagation();

          <script type="text/javascript">
          $(function() {
          $("#hr_three").click(function(event) {
          event.stopPropagation();
          });
          });
          <script>

          再點擊"點擊我", 會彈出:我是最里層, 然后鏈接到百度


          2.return false;

          如果頭部加入的是以下代碼

          <script type="text/javascript">
          $(function() {
            $("#hr_three").click(function(event) {
              return false;
            });
          });
          <script>

          再點擊"點擊我", 會彈出:我是最里層, 但不會執行鏈接到百度頁面


          由此可以看出:

          1.event.stopPropagation();

          事件處理過程中,阻止了事件冒泡,但不會阻擊默認行為(它就執行了超鏈接的跳轉)


          2.return false;

          事件處理過程中,阻止了事件冒泡,也阻止了默認行為(比如剛才它就沒有執行超鏈接的跳轉)


          還有一種有冒泡有關的:

          3.event.preventDefault();

          如果把它放在頭部A標簽的click事件中, 點擊"點擊我"。

          會發現它依次彈出:我是最里層---->我是中間層---->我是最外層, 但最后卻沒有跳轉到百度

          它的作用是:事件處理過程中, 不阻擊事件冒泡, 但阻擊默認行為(它只執行所有彈框, 卻沒有執行超鏈接跳轉)


          主站蜘蛛池模板: 无码一区二区三区在线观看| 国产香蕉一区二区精品视频| 亚欧在线精品免费观看一区 | 无码人妻精品一区二区蜜桃 | 国精产品一区一区三区MBA下载| 痴汉中文字幕视频一区| 亚洲日韩AV一区二区三区四区| 亚洲爆乳无码一区二区三区| 一区二区三区四区精品| 国产伦精品一区二区三区免费下载 | 国内自拍视频一区二区三区| 久久一本一区二区三区| 国产在线精品一区免费香蕉| 亚洲国模精品一区| 日韩毛片一区视频免费| 波多野结衣中文字幕一区二区三区| 冲田杏梨AV一区二区三区| 日本免费一区二区在线观看| 国产精品一区二区久久精品| 国产成人精品久久一区二区三区| 色狠狠一区二区三区香蕉| 日本一区精品久久久久影院| 久久国产一区二区| 久久亚洲AV午夜福利精品一区| 无码人妻久久久一区二区三区 | 另类ts人妖一区二区三区| 久久精品国内一区二区三区| 精品免费国产一区二区三区| 日韩一区二区三区电影在线观看| 国产精品伦子一区二区三区| 精品中文字幕一区在线| 一区五十路在线中出| 国产在线精品一区二区三区不卡| 久久免费国产精品一区二区| 在线播放一区二区| 无码人妻精品一区二区蜜桃| 麻豆精品一区二区综合av| 国模私拍一区二区三区| 久久久久人妻精品一区| 在线电影一区二区| 国产在线精品一区二区三区直播|