一日一技:在网页上如何获取鼠标当前指向的元素

简介: 一日一技:在网页上如何获取鼠标当前指向的元素

摄影:产品经理跟产品经理吃烤肉

开发爬虫的同学肯定用过 Chrome 开发者工具自动定位页面元素对应的 HTML 标签的功能,如下图所示:

那么有没有同学思考过,这个功能,如果用 JavaScript 怎么实现呢?

显然,随着鼠标的移动,鼠标指向的页面元素是不断变化的,我们需要知道鼠标当前指向了哪一个页面元素。

在 JavaScript 中,有一个函数叫做document.elementFromPoint(x, y),输入页面坐标,返回该坐标上的页面元素。而坐标可以通过鼠标的事件来获得。

于是,我们可以写出如下的 JavaScript 代码:

function get_current_element(event){
        var x = event.clientX, y = event.clientY,
        element = document.elementFromPoint(x, y);
        return element
    }
function track_mouse(event){
        var elementMouseIsOver = get_current_element(event)
        console.log('当前鼠标指向的元素是:', elementMouseIsOver)
    }
window.onmousemove = track_mouse

这样,当鼠标移动时,可以实时获得当前鼠标指向的元素。

但是,如果你直接使用上面的代码,那么你会被打印出来的信息刷屏,因为鼠标一旦移动就会有数据打印出来。所以我们需要做一个限制,当鼠标在元素内部移动的时候,不打印数据。track_mouse修改为:

var last_element = null
function track_mouse(event){
        var elementMouseIsOver = get_current_element(event)
        if (elementMouseIsOver === last_element) {
            return
        }
        console.log(elementMouseIsOver)
        last_element = elementMouseIsOver
    }

我们在 Chrome 的控制台运行看看效果:

这样直接打印元素可能不太好查看,我们再加个元素边框的功能。增加两个函数:

function highlight(element){
    element.style.outline = '#f00 solid 2px'
    }
function remove_hightlight(element){
        element.style.removeProperty('outline')
    }

修改track_mouse代码为:

function track_mouse(event){
        var elementMouseIsOver = get_current_element(event)
        if (elementMouseIsOver === last_element) {
            return
        }
        if (last_element != null) {
            remove_hightlight(last_element)
        }
        highlight(elementMouseIsOver)
        last_element = elementMouseIsOver
    }

运行效果如下面的动图所示。

有了这个功能以后,只要我们再稍稍修改一下代码,就可以实现自动获取鼠标指向位置的 XPath 了。有兴趣的同学请留言,我继续写。

目录
相关文章
|
7月前
【实现手机端上滑滚动加载列表】判断页面是否滚动到底部或者指定元素位置
【实现手机端上滑滚动加载列表】判断页面是否滚动到底部或者指定元素位置
|
7月前
|
前端开发 JavaScript
几种常见的获取页面元素数据的方法
几种常见的获取页面元素数据的方法
60 0
|
1月前
网页的基本构成元素
网页的基本构成元素 1.2.1文本:清晰明确的展示网页z 1.2.2图片和动画:让网页更加的生动。 1.2.3超链接:引入外链。 1.2.4音频和视频:让网页更加丰富生动。 1.2.5交互表单:个人信息的收集。 1.2.6其他常见元素
41 0
文本-----优化地方----添加搜索框,快捷链接,跳转页面要放置页数跳转框
文本-----优化地方----添加搜索框,快捷链接,跳转页面要放置页数跳转框
scrollIntoView()定位元素显示导致页面上移解决方法?
scrollIntoView()定位元素显示导致页面上移解决方法?
628 0
|
7月前
定位网页元素
定位网页元素
|
JavaScript 前端开发
js 各种位置获取全解(包括元素属性、鼠标位置、滚动位置)
js 各种位置获取全解(包括元素属性、鼠标位置、滚动位置)
js 各种位置获取全解(包括元素属性、鼠标位置、滚动位置)
Axure RP 9查找属性栏位置简单步骤(以文本框举例)
Axure RP 9查找属性栏位置简单步骤(以文本框举例)
2280 0
Axure RP 9查找属性栏位置简单步骤(以文本框举例)
|
JavaScript 前端开发 Python
一日一技:Selenium 如何获取鼠标指向的元素?
一日一技:Selenium 如何获取鼠标指向的元素?
439 0
一日一技:Selenium 如何获取鼠标指向的元素?