获取canvas中鼠标的坐标,并绘制图片

2019-04-15 11:22:35

难点在于,cavas可能放大,然后画图的坐标就会改变了,必须也要跟着放大缩小。


// 监听点击事件

canvas.addEventListener("click", function(event) {

    getMousePos(canvas, event);

});


function getMousePos(canvas, event) {

    //1

    var rect = canvas.getBoundingClientRect();

    //2

    var x = (event.clientX - rect.left) * (canvas.width / rect.width);

    var y = (event.clientY - rect.top)* (canvas.height / rect.height);

    console.log("x:"+x+",y:"+y);

}



解析

getBoundingClientRect()

这个方法返回的对象有六个属性,如下表:


属性 描述

top 元素上边界距窗口最上边的距离

left 元素左边界距窗口最左边的距离

bottom 元素下边界距窗口最上边的距离

right 元素右边界距窗口最左边的距离

width 元素的宽度

height 元素的高度

rect.left * (canvas.width / rect.width)

之所以要乘一个(canvas.width / rect.width),是为了保证画布的像素值和显示在页面上的尺寸不一致的情况下,也能够正确获取到鼠标相对于canvas中的坐标。


画布的像素值和显示在页面上的尺寸不一致的情况


<canvas id="canvasId" width="100" height="100" style="width: 500px;height: 500px;"></canvas>


  • 2017-03-27 16:24:26

    laravel,gulp,Browsersync浏览器同步测试

    Browsersync能让浏览器实时、快速响应您的文件更改(html、js、css、sass、less等)并自动刷新页面。更重要的是 Browsersync可以同时在PC、平板、手机等设备下进项调试。您可以想象一下:“假设您的桌子上有pc、ipad、iphone、android等设备,同时打开了您需要调试的页面,当您使用browsersync后,您的任何一次代码保存,以上的设备都会同时显示您的改动”。无论您是前端还是后端工程师,使用它将提高您30%的工作效率。

  • 2017-03-28 09:27:41

    Java中Arrays的asList()方法

    Java中Arrays的asList()方法 可以将 数组转为List 但是,这个数组类型必须是 引用类型的,如果是8中基本数据类型就不可以 原因如下,引用别人的一篇文章:

  • 2017-03-28 10:58:01

    No such property: sonatypeRepo for class:

    这种问题一般是出现在导入一些开源项目的时候。原因为该项目的原作者会把项目发布到maven中央仓库中,所以在gradle中添加了相关的maven发布任务,而发布任务需要配置