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 倾斜的网页图片库实例教程
Nov 14 HTML / CSS
基于CSS3实现立方体自转效果
Mar 01 HTML / CSS
CSS3实现水平居中、垂直居中、水平垂直居中的实例代码
Feb 27 HTML / CSS
CSS3+HTML5+JS 实现一个块的收缩与展开动画效果
Nov 17 HTML / CSS
详解css3中的伪类before和after常见用法
Nov 17 HTML / CSS
Html5移动端获奖无缝滚动动画实现示例
Jun 25 HTML / CSS
HTML5画渐变背景图片并自动下载实现步骤
Nov 18 HTML / CSS
html5本地存储 localStorage操作使用详解
Sep 20 HTML / CSS
Html5实现首页动态视频背景的示例代码
Sep 25 HTML / CSS
html2canvas截图空白问题的解决
Mar 24 HTML / CSS
巧用 -webkit-box-reflect 倒影实现各类动效(小结)
Apr 22 HTML / CSS
css3 选择器
May 11 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
dede3.1分页文字采集过滤规则详说(图文教程)
2007/04/03 PHP
php下统计用户在线时间的一种尝试
2010/08/26 PHP
PHPMailer邮件发送的实现代码
2013/05/04 PHP
php实现自动获取生成文章主题关键词功能的深入分析
2013/06/03 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
js TextArea的选中区域处理
2010/12/28 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
2014/10/31 Javascript
BootStrap扔进Django里的方法详解
2016/05/13 Javascript
JS解决iframe之间通信和自适应高度的问题
2016/08/24 Javascript
AngularJS开发教程之控制器之间的通信方法分析
2016/12/25 Javascript
基本DOM节点操作
2017/01/17 Javascript
Angularjs实现搜索关键字高亮显示效果
2017/01/17 Javascript
微信小程序 Toast自定义实例详解
2017/01/20 Javascript
详解webpack es6 to es5支持配置
2017/05/04 Javascript
Javarscript中模块(module)、加载(load)与捆绑(bundle)详解
2017/05/28 Javascript
JavaScript中一些特殊的字符运算
2017/08/17 Javascript
简单的Vue SSR的示例代码
2018/01/12 Javascript
微信小程序滑动选择器的实现代码
2018/08/10 Javascript
webpack4 升级迁移的实现
2018/09/12 Javascript
Vue 重置组件到初始状态的方法示例
2018/10/10 Javascript
angular4自定义表单控件[(ngModel)]的实现
2018/11/23 Javascript
js实现简单点赞操作
2020/03/17 Javascript
JavaScript自定义超时API代码实例
2020/04/30 Javascript
Python 命令行非阻塞输入的小例子
2013/09/27 Python
Python标准库之多进程(multiprocessing包)介绍
2014/11/25 Python
python创建和删除目录的方法
2015/04/29 Python
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
Bealls Florida百货商店:生活服饰、家居装饰和鞋子
2018/02/23 全球购物
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
雅诗兰黛澳大利亚官网:Estée Lauder澳大利亚
2019/05/31 全球购物
教研活动总结
2014/04/28 职场文书
2014年入党积极分子学习三中全会思想汇报
2014/09/13 职场文书
2015年效能监察工作总结
2015/04/23 职场文书
学校计划生育责任书
2015/05/09 职场文书
Vue CLI中模式与环境变量的深入详解
2021/05/30 Vue.js
Nginx性能优化之Gzip压缩设置详解(最大程度提高页面打开速度)
2022/02/12 Servers