码迷,mamicode.com
首页 > 其他好文 > 详细

一个关于getBoundingClientRect()的例子

时间:2020-01-23 22:43:56      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:clientx   部分   一个   https   建图   rect   网上   function   获取   

最近发现一个问题,MouseEvent.clientXMouseEvent.clientY获取到的坐标点是以当前body的左上角为坐标原点,若body含有水平滚动条或垂直滚动条时,左上角还是坐标原点

入下图所示,不管水平滚动条或垂直滚动条怎么移动时,以左上角的那个点为坐标原点

技术图片

在网上找了找,发现只有关于getBoundingClientRect()的介绍,然后自己就琢磨了一下,用起来还是挺方便的。

上图我创建了三给按钮:

第一个是当鼠标在我定义的画布区域中移动时获取(clienX,clienY)的坐标,
第二个是当水平滚动条或垂直滚动条改变时,用getBoundingClientRect()方法获取画布区域的topleftrightbottom的数值
第三个是用(clienX-top,clienY-left)的值

代码部分:

var canF=document.getElementById("canvas_floor");//获取我定义的画布节点
canFloor.onmousemove = function(e) {//鼠标移动事件
    canFF=canF.getBoundingClientRect();//调用这个方法
                
    var t=canFF.top;//获取这些值
    var l=canFF.left;
    var r=canFF.right;
    var b=canFF.bottom;
                
    xy.value = "(" + t + "," + l + "," + r+"," + b+")";//第二个按钮
    var x = e.clientX;
    var y = e.clientY;
    var x_y1 = document.getElementById("x_y1");
    x_y.value = "(" + x + "," + y + ")";//第一个按钮
    var xx=x-l;
    var yy=y-t
    xxyy.value="(" + xx+ "," + yy + ")";//第三个按钮
}

下图为当滚动条改变后获取到的一些值:

技术图片

bottom-top=600
right-left=1200

<canvas id="canvas_floor" width="1200" height="600"  onmousedown="fiiyuan(event)" onmouseup="fiiiyuan(event)">
            Your browser does not support the canvas element.
        </canvas>

这两个数值不就是我对画布定义的widthheight

所以,当画布有滚动条后,传(clienX,clienY)的值去创建图案就会有问题。

就好比下图,明明我的画布高是600,但在鼠标移动到黑点的区域时(clienX,clienY)显示的值明显就是错的,实际的值是(clienX-top,clienY-left),也就是第三个按钮显示的值。

技术图片

当我将浏览器窗口最大化时,没有了滚动条,鼠标移动到黑点位置。果然,其坐标点就是(clienX-top,clienY-left)

技术图片

一个关于getBoundingClientRect()的例子

标签:clientx   部分   一个   https   建图   rect   网上   function   获取   

原文地址:https://www.cnblogs.com/ranmomo/p/12231386.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!