js计算距离最近的元素坐标

实现思路

根据两元素的坐标形成直角三角形的两个直角边,再有两个直角边得出斜边,斜边就是两个坐标点的距离。

核心函数

Math.abs():计算绝对值
Math.sqrt():计算平方根

                //a,b为直角三角形的两个直角边
                a = Math.abs(x - targetOffset[0])
                b = Math.abs(y - targetOffset[1])
                //c为直角三角形的斜边
                c = Math.sqrt(a * a + b * b) as 0

实现方法

//计算计算离目标为位置最近元素的坐标
//parentDom:元素外层容器 / 父元素 targetOffset目标元素坐标[x,y]
const computedDistance = (parentDom: Element, targetOffset: Array<number>) => {
    let min = -1
    let orgPath: Array<number> = []
    let a, b, c
    if (parentDom.childNodes.length > 3)
    //只计算类名为 dom_item 的元素
        parentDom.childNodes.forEach((e: any) => {
            if (e.getAttribute('class') === 'dom_item') { 
                let { x, y, width, height } = e.getBoundingClientRect()
                //a,b为直角三角形的两个直角边
                a = Math.abs(x - targetOffset[0])
                b = Math.abs(y - targetOffset[1])
                //c为直角三角形的斜边
                c = Math.sqrt(a * a + b * b) as 0
                c = Number(c.toFixed(0)) as 0
                if (c !== 0 && (min === - 1 || c < min)) {
                    //min为元素中离目标元素最近元素的距离
                    min = c
                    //最近的元素的坐标
                    orgPath = [Number((x + (width / 2)).toFixed(0)), Number((y + (height / 2)).toFixed(0))]
                }
            }
        })
    //距离最近元素的坐标
    return orgPath
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值