Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 亚洲精品一区二区三区在,91精品国产免费久久国语麻豆,国产在线五月综合婷婷

          整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          如何用 JavaScript 模擬點(diǎn)擊事件,簡單實(shí)現(xiàn) x, y 坐標(biāo)點(diǎn)擊?

          前端開發(fā)中,有時(shí)我們需要模擬點(diǎn)擊頁面上的某個(gè)位置,比如自動(dòng)化測試或者模擬用戶操作。今天,我將一步步帶大家實(shí)現(xiàn)這個(gè)功能,讓大家能夠輕松理解并應(yīng)用。

          什么是 x, y 坐標(biāo)點(diǎn)擊?

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

          如何通過 x, y 坐標(biāo)模擬點(diǎn)擊?

          我們可以通過 document.elementFromPoint 方法來實(shí)現(xiàn)。這個(gè)方法會(huì)返回指定坐標(biāo)上的元素,然后我們對這個(gè)元素調(diào)用 click 方法,就能模擬一次點(diǎn)擊。

          基本實(shí)現(xiàn)步驟

          假設(shè)我們有以下 HTML 結(jié)構(gòu):

          <div>
            hello world
          </div>

          我們希望點(diǎn)擊這個(gè) div 元素,首先可以寫以下代碼:

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

          詳細(xì)解釋:

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

          使用 MouseEvent 構(gòu)造函數(shù)

          除了直接調(diào)用 click 方法,我們還可以使用 MouseEvent 構(gòu)造函數(shù)來模擬更復(fù)雜的點(diǎn)擊事件,比如包括點(diǎn)擊的位置、是否可以取消等屬性。

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

          詳細(xì)解釋:

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

          小結(jié)

          通過本文的講解,我們了解了如何在 JavaScript 中通過 x, y 坐標(biāo)來模擬點(diǎn)擊事件。無論是直接調(diào)用 click 方法,還是使用 MouseEvent 構(gòu)造函數(shù),都能實(shí)現(xiàn)這一功能。希望大家在日常開發(fā)中能用到這個(gè)技巧,提升工作效率。

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

          元素是CSS中的一種特殊選擇器, 用于在元素的特定位置插入內(nèi)容, 它們被稱為“偽元素”, 是因?yàn)樗鼈儾皇菍?shí)際存在于HTML DOM文檔中的元素, 而是通過CSS來創(chuàng)建的, 那偽元素如何添加點(diǎn)擊元素?

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

          html:

          <div>盒子的內(nèi)容</div>

          css:

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

          js:

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

          解決偽元素蓋住點(diǎn)擊事件

          在偽元素代碼中加上這句,可穿透偽元素點(diǎn)擊

          pointer-events:none;

          偽元素的點(diǎn)擊事件

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

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

          么是JS事件冒泡?

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

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

          如何來阻止Jquery事件冒泡?

          通過一個(gè)小例子來解釋

          <!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('我是最里層!')">點(diǎn)擊我</a>
                </div>
              </div>
            </form>
          </body>
          </html>

          比如上面這個(gè)頁面,

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

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

          運(yùn)行頁面,點(diǎn)擊“點(diǎn)擊我”,會(huì)依次彈出:我是最里層---->我是中間層---->我是最外層

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


          這就是事件冒泡, 本來我只點(diǎn)擊ID為hr_three的標(biāo)簽, 但是確執(zhí)行了三個(gè)alert操作。

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

          如何來阻止?

          1.event.stopPropagation();

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

          再點(diǎn)擊"點(diǎn)擊我", 會(huì)彈出:我是最里層, 然后鏈接到百度


          2.return false;

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

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

          再點(diǎn)擊"點(diǎn)擊我", 會(huì)彈出:我是最里層, 但不會(huì)執(zhí)行鏈接到百度頁面


          由此可以看出:

          1.event.stopPropagation();

          事件處理過程中,阻止了事件冒泡,但不會(huì)阻擊默認(rèn)行為(它就執(zhí)行了超鏈接的跳轉(zhuǎn))


          2.return false;

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


          還有一種有冒泡有關(guān)的:

          3.event.preventDefault();

          如果把它放在頭部A標(biāo)簽的click事件中, 點(diǎn)擊"點(diǎn)擊我"。

          會(huì)發(fā)現(xiàn)它依次彈出:我是最里層---->我是中間層---->我是最外層, 但最后卻沒有跳轉(zhuǎn)到百度

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


          主站蜘蛛池模板: 亚洲一区二区三区在线视频| 色一情一乱一伦一区二区三欧美| 亚洲欧美日韩一区二区三区在线| www一区二区www免费| 无码人妻精品一区二区三区不卡| 国产suv精品一区二区33| 日韩动漫av在线播放一区| 亚洲一区二区无码偷拍| 人妻久久久一区二区三区| 曰韩精品无码一区二区三区| 一区二区精品在线观看| 无码欧精品亚洲日韩一区夜夜嗨| 久久人妻无码一区二区 | 精品无码国产AV一区二区三区| 亚洲av无码不卡一区二区三区| 人妻少妇一区二区三区| 97久久精品午夜一区二区| 国产精品一区在线观看你懂的| 亚洲第一区精品观看| 久久久久国产一区二区| 精品国产不卡一区二区三区| 精品视频在线观看你懂的一区| 国产精品被窝福利一区| 97精品国产福利一区二区三区| 国偷自产av一区二区三区| 亚洲AV无码一区二区二三区入口 | 久久久久一区二区三区| 中文字幕一区二区在线播放| 无人码一区二区三区视频| 国精品无码一区二区三区在线 | 亚洲日本中文字幕一区二区三区| 国产一区二区三区在线看片 | 91视频国产一区| 日日摸夜夜添一区| 亚洲av无一区二区三区| 精品一区二区三区水蜜桃| 国产精品亚洲产品一区二区三区 | 国产精品香蕉在线一区| 国产麻豆精品一区二区三区| 日韩一区二区三区不卡视频| 久久国产高清一区二区三区|