整合營銷服務商

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

          免費咨詢熱線:

          js 獲取元素在文檔上的坐標

          .獲取元素在文檔上的坐標

          function DocuemntHtmlPageXY (elem) {
           var rect = elem.getBoundingClientRect();
           var scrollTop = window.scrollTop || (document.documentElement && document.documentElement.scrollTop) || document.body.scrollTop || 0;
           var scrollLeft = window.scrollLeft || (document.documentElement && document.documentElement.scrollLeft) || document.body.scrollLeft || 0;
           var html = document.documentElement || document.getElementsByTagName_r('html')[0];
           //修復ie6 7 下的瀏覽器邊框也被算在 boundingClientRect 內的 bug
           var deviation = html.getBoundingClientRect();
           //修復 ie8 返回 -2 的 bug
           deviation = { //FF 不允許修改返回的對象
           left: deviation.left < 0 ? 0 : deviation.left,
           top: deviation.top < 0 ? 0 : deviation.top
           };
           return {
           left: rect.left + scrollLeft - deviation.left,
           top: rect.top + scrollTop - deviation.top
           };
           }
          

          2.舉例如下:

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

          什么是 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 構造函數,都能實現這一功能。希望大家在日常開發中能用到這個技巧,提升工作效率。

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

          近在做一個微信端的應用,其中有一個功能是這樣的功能:不管怎么移動百度地圖都能獲取到屏幕中心點的坐標。這種功能在ios端和android端通過一些邏輯計算很容易就實現了,但是在web端想要動態的獲取地圖屏幕中心點的坐標,通過計算就不是那么容易實現的了。通過翻找百度地圖手冊收發現百度地圖在js接口中提供的有一個方法,下面只列出關鍵性的代碼:

          var map = new BMap.Map("allmap");

          map.centerAndZoom(new BMap.Point(116.4035,39.915), 14);

          var bs = map.getBounds(); //獲取可視區域

          var bssw = bs.getSouthWest(); //可視區域左下角

          var bsne = bs.getNorthEast(); //可視區域右上角

          //alert("當前地圖可視范圍是:" + bssw.lng + "," + bssw.lat + "到" + bsne.lng + "," + bsne.lat);

          var pt = bs.getCenter(); //獲取地圖中心點

          //根據中心點坐標添加彈跳動畫marker

          var point = new BMap.Point(pt.lng, pt.lat);

          var marker = new BMap.Marker(point); // 創建標注

          map.addOverlay(marker);// 將標注添加到地圖中

          marker.setAnimation(BMAP_ANIMATION_BOUNCE);


          主站蜘蛛池模板: 亚洲综合在线一区二区三区| 亚洲天堂一区二区三区| 日韩一区二区三区精品| 亚洲一区二区三区深夜天堂| 久久免费国产精品一区二区| 国产一区二区精品久久| 亚洲AV午夜福利精品一区二区| 日韩制服国产精品一区| 91国在线啪精品一区| 99久久精品费精品国产一区二区| 久夜色精品国产一区二区三区| 国精品无码A区一区二区| 2014AV天堂无码一区| 国产一区二区三区久久精品| 无码日韩精品一区二区三区免费 | 天堂va视频一区二区| 中文字幕av一区| 无码一区二区三区免费视频| 国产在线观看精品一区二区三区91| 国产一区二区三区亚洲综合 | 精品视频一区二区三三区四区 | 亚洲一区二区三区四区视频| 99精品一区二区三区无码吞精 | 国产在线精品一区二区不卡| 人妻体内射精一区二区三四| 亚洲精品国产suv一区88| 国产成人一区二区三区免费视频| 日本一区二区三区在线看| 国产精品被窝福利一区 | 日韩一区二区超清视频| 精品国产区一区二区三区在线观看| 精品3d动漫视频一区在线观看| 国产精品亚洲不卡一区二区三区| 亚洲av不卡一区二区三区| 中文乱码人妻系列一区二区| 一区 二区 三区 中文字幕| 久久久久一区二区三区| 成人在线观看一区| 日韩精品无码一区二区三区AV| 91一区二区三区四区五区 | 国产SUV精品一区二区88L|