canvas 绘图时位置偏离的问题解决


Posted in HTML / CSS onSeptember 16, 2020

使用 canvas 绘图时,指定的 div 大小一定不要超过该 div 所能获得的最大范围,否则绘制的点会跟实际位置发生偏离。

例如

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled 1</title> 
<style type="text/css"> 
.style1 { 
  font-size: x-small; 
} 
</style> 

</head> 
 
<body > 
    <div style="margin:2%">
            <div id="test" style="width:800px;height:800px;background-color:#cbdad0d9">
                    <canvas id="container" onmousemove="mousemove(event)" onmousedown="mousedown()" onmouseup="mouseup()"></canvas>
            </div>
    </div>
    
    <script type="text/javascript"> 
        var paint = false;
        var start = false;
        var canvas = document.getElementById("container");
        canvas.width = 800;
        canvas.height = 800;
        var offsetY = canvas.offsetTop;
        var offsetX = canvas.offsetLeft;
        var y;
        var x;
        var context = canvas.getContext("2d");
    
        function mousemove(e) {
            if (paint == true){
                if (start == false){
                    context.moveTo(0, 0);
                    start = true;
                } else {
                    context.moveTo(x, y);
                }

                x = e.pageX - offsetX;
                y = e.pageY - offsetY;
                context.lineTo(x, y);
                context.stroke();
            }
        }
    
        function mousedown(event) {
            paint = true;
            console.log("down")
        }
    
        function mouseup(event) {
            paint = false;
            console.log("up")
        }
    
    </script>
</body> 
</html>

上例中可以正确的绘制线图。

如果更改为:

<div style="margin:20%">
            <div id="test" style="width:800px;height:800px;background-color:#cbdad0d9">
                    <canvas id="container" onmousemove="mousemove(event)" onmousedown="mousedown()" onmouseup="mouseup()"></canvas>
            </div>
    </div>

由于 canvas 所需 width 800px 无法满足,因此绘制线图时,与实际鼠标位置发生偏离。

到此这篇关于canvas 绘图时位置偏离的问题解决的文章就介绍到这了,更多相关canvas 绘图位置偏离内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

HTML / CSS 相关文章推荐
css3动画效果抖动解决方法
Sep 03 HTML / CSS
css3圆角边框和边框阴影示例
May 05 HTML / CSS
CSS3 @font-face属性使用指南
Dec 12 HTML / CSS
前端隐藏出边界内容的实现方法
Apr 14 HTML / CSS
canvas之万花筒效果的简单实现(推荐)
Aug 16 HTML / CSS
CSS3实现酷炫的3D旋转透视效果
Nov 21 HTML / CSS
浅谈cookie和localStorage那些事
Aug 27 HTML / CSS
HTML5之SVG 2D入门9—蒙板及mask元素介绍与应用
Jan 30 HTML / CSS
HTML5 虚拟键盘出现挡住输入框的解决办法
Feb 14 HTML / CSS
快速创建 HTML5 Canvas 电信网络拓扑图的示例代码
Mar 21 HTML / CSS
如何使用 resize 实现图片切换预览功能
Aug 23 HTML / CSS
CSS文本阴影 text-shadow 悬停效果详解
May 25 HTML / CSS
关于canvas.toDataURL 在iOS运行失败的问题解决
Sep 16 #HTML / CSS
canvas绘制图片drawImage使用方法
Sep 15 #HTML / CSS
HTML5中外部浏览器唤起微信分享功能的代码
Sep 15 #HTML / CSS
浅析HTML5 Landmark
Sep 11 #HTML / CSS
详解HTML5中CSS外观属性
Sep 10 #HTML / CSS
详解如何在登录过期后跳出Ifram框架
Sep 10 #HTML / CSS
HTML5中input输入框默认提示文字向左向右移动的示例代码
Sep 10 #HTML / CSS
You might like
PHP 文件类型判断代码
2009/03/13 PHP
php获取远程图片体积大小的实例
2013/11/12 PHP
PHP获取文件的MD5值并判断是否被修改的例子
2014/06/19 PHP
关于Laravel Route重定向的一个注意点
2017/01/16 PHP
Mootools 1.2教程(21)——类(二)
2009/09/15 Javascript
Jquery判断IE6等浏览器的代码
2011/04/05 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
2013/05/07 Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
2014/03/13 Javascript
js实现字符串转日期格式的方法
2015/05/20 Javascript
Vue-cli创建项目从单页面到多页面的方法
2017/09/20 Javascript
基于jQuery中ajax的相关方法汇总(必看篇)
2017/11/08 jQuery
vue项目总结之文件夹结构配置详解
2017/12/13 Javascript
浅谈Fetch 数据交互方式
2018/12/20 Javascript
JavaScrip数组去重操作实例小结
2019/06/20 Javascript
vue-video-player实现实时视频播放方式(监控设备-rtmp流)
2020/08/10 Javascript
python使用super()出现错误解决办法
2017/08/14 Python
Python 基础教程之闭包的使用方法
2017/09/29 Python
Python实现的十进制小数与二进制小数相互转换功能
2017/10/12 Python
python 中的int()函数怎么用
2017/10/17 Python
在python下使用tensorflow判断是否存在文件夹的实例
2019/06/10 Python
python中比较两个列表的实例方法
2019/07/04 Python
Python在Matplotlib图中显示中文字体的操作方法
2019/07/29 Python
Flask和pyecharts实现动态数据可视化
2020/02/26 Python
requests在python中发送请求的实例讲解
2021/02/17 Python
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
国际知名设计师时装商店:Coggles
2016/09/05 全球购物
Oracle快照(snapshot)
2015/03/13 面试题
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
如何利用find命令查找文件
2015/02/07 面试题
毕业生自我鉴定范文
2013/11/08 职场文书
仓管岗位职责范本
2014/02/08 职场文书
共产党员岗位承诺书
2014/05/29 职场文书
批评与自我批评总结
2014/10/17 职场文书
抄袭同学作业检讨书1000字
2014/11/20 职场文书
培训通知书模板
2015/04/17 职场文书
redis数据结构之压缩列表
2022/03/21 Redis