美文网首页
一个getBoundingClientRect()的例子

一个getBoundingClientRect()的例子

作者: 想飞的舟 | 来源:发表于2020-01-23 12:20 被阅读0次

    最近发现一个问题,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()的例子

          本文链接:https://www.haomeiwen.com/subject/huhnzctx.html