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 相关文章推荐
网页切图的CSS和布局经验与要点
Apr 09 HTML / CSS
纯CSS3实现8组超炫酷鼠标滑过图片动画
Mar 16 HTML / CSS
CSS3打造百度贴吧的3D翻牌效果示例
Jan 04 HTML / CSS
HTML5 本地存储 LocalStorage详解
Jun 24 HTML / CSS
canvas基础之图形验证码的示例
Jan 02 HTML / CSS
基于第一个PhoneGap(cordova)的应用详解
May 03 HTML / CSS
探讨HTML5移动开发的几大特性(必看)
Dec 30 HTML / CSS
Html5 web本地存储实例详解
Jul 28 HTML / CSS
Html5 页面适配iPhoneX(就是那么简单)
Sep 05 HTML / CSS
CSS3 制作的图片滚动效果
Apr 14 HTML / CSS
DIV CSS实现网页背景半透明效果
Dec 06 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使浏览器直接下载pdf文件的方法
2013/11/15 PHP
ThinkPHP之getField详解
2014/06/20 PHP
Laravel框架实现多个视图共享相同数据的方法详解
2019/07/09 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
用ASP将SQL搜索出来的内容导出为TXT的代码
2007/07/27 Javascript
javascript之学会吝啬 精简代码
2010/04/25 Javascript
自动刷新网页,自动刷新当前页面,JS调用
2013/06/24 Javascript
JavaScript中获取鼠标位置相关属性总结
2014/10/11 Javascript
jquery插件推荐浏览器嗅探userAgent
2014/11/09 Javascript
JS简单实现多级Select联动菜单效果代码
2015/09/06 Javascript
jQuery实现简单的DIV拖动效果
2016/02/19 Javascript
浅谈Sublime Text 3运行JavaScript控制台
2016/06/06 Javascript
VueJs与ReactJS和AngularJS的异同点
2016/12/12 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
2017/05/05 Javascript
jquery easyui如何实现格式化列
2017/07/30 jQuery
Vue2.0基于vue-cli+webpack Vuex的用法(实例讲解)
2017/09/15 Javascript
jQuery实现的监听导航滚动置顶状态功能示例
2018/07/23 jQuery
React中使用async validator进行表单验证的实例代码
2018/08/17 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
JavaScript面试技巧之数组的一些不low操作
2019/03/22 Javascript
如何使用CSS3和JQuery easing 插件制作绚丽菜单
2019/06/18 jQuery
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
2014/05/06 Python
Python转换HTML到Text纯文本的方法
2015/01/15 Python
Python isinstance函数介绍
2015/04/14 Python
Python基于回溯法子集树模板解决数字组合问题实例
2017/09/02 Python
python进行文件对比的方法
2018/12/24 Python
如何更优雅地写python代码
2019/07/02 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
2019/08/14 Python
django 框架实现的用户注册、登录、退出功能示例
2019/11/28 Python
python numpy库np.percentile用法说明
2020/06/08 Python
python语言中有算法吗
2020/06/16 Python
python中tab键是什么意思
2020/06/18 Python
Vilebrequin美国官方网上商店:法国豪华泳装品牌
2020/02/22 全球购物
大学生的自我鉴定范文
2014/01/21 职场文书
园林系毕业生求职信
2014/06/23 职场文书
2014年安全保卫工作总结
2014/11/13 职场文书