HTML 5画布坐标和浏览器像素的相关性
HTML 5 Canvas Co-Ordinates and browser pixels correlation?
我正试图获得HTML 5画布为我的应用程序工作作为绘图板。我面临的问题是:
绘图发生在鼠标指针的某个偏移位置。我使用Jquery .offset
方法来计算画布上事件的偏移量。我注意到的另一件奇怪的事情是,虽然画布标签的宽度是150px,但从(0,10)到(150,10)绘制的一条线正好到达画布区域的中间,甚至一条从(0,10)到(250,10)的线也可见。不是"像素"计算从事件对象映射直接到画布标签的"点坐标"?还有什么是错的呢?示例代码:
if (event.pageX || event.pageY)
{
event._x = event.pageX;
event._y = event.pageY;
}
else if (event.clientX || event.clientY)
{
event._x = event.clientX + document.body.scrollLeft
+ document.documentElement.scrollLeft;
event._y = event.clientY + document.body.scrollTop
+ document.documentElement.scrollTop;
}
var canvasElem = $('#' + canvasId);
canvasOffset = canvasElem.offset();
event._x -= Math.floor(canvasOffset.left);
event._y -= Math.floor(canvasOffset.top);
////////////// CODE STRIPPED //////////////////////////////
this.mousedown = function (ev) {
context.beginPath();
context.moveTo(ev._x, ev._y);
tool.started = true;
};
// This function is called every time you move the mouse. Obviously, it only
// draws if the tool.started state is set to true (when you are holding down
// the mouse button).
this.mousemove = function (ev) {
if (tool.started) {
context.lineTo(ev._x, ev._y);
context.stroke();
}
};
// This is called when you release the mouse button.
this.mouseup = function (ev) {
if (tool.started) {
tool.mousemove(ev);
tool.started = false;
}
}
解决
发现问题:
我使用字符串来设置画布的高度和宽度。喜欢的东西:画布。
但是我们应该总是使用数字来设置画布的高度/宽度。画布。
问题解决了
可以使用jQuery .offset()函数获得画布左上角的坐标。从鼠标事件传递的坐标中减去这些,就得到了画布上的位置。
关于您遇到的缩放问题,有两种可能的解释:
A:你使用平移,变换或缩放来改变画布的坐标系统(但是当你这样做的时候,你肯定会意识到它)
B:你正在使用CSS样式属性来改变画布的大小。画布的分辨率由<canvas>
HTML标签的width
和height
属性决定。当你使用CSS改变画布呈现的宽度或高度时,它首先以内部分辨率绘制,然后相应地缩放以在浏览器中显示。
相关文章:
- 如何通过溢出来判断元素被切断了多少像素:隐藏在父级上
- 点击facebook像素跟踪注册(JS/JQUERY代码)
- 点击(右键点击)使用传单地图库获取图像覆盖的像素坐标
- 如何使线条的边缘像素保持半透明
- 画布:逐像素绘制图像并请求动画帧计时
- 如何's css标记"-webkit最小设备像素比”;在Javascript中实现
- javascript mootools平滑滚动'x'像素数量
- 逐像素碰撞检测弹球
- 获取图像的平均外部像素颜色
- d3.火狐浏览器中的鼠标像素偏移量
- 从FF和谷歌浏览器的像素坐标中选择
- 当屏幕 CSS 像素比大于 1 时,在不同的浏览器上获取相同的 window.screen.height 和 windo
- Chrome扩展:通过编程设置浏览器操作图标,使图标像素化
- 1像素的背景重复放大期间在谷歌Chrome浏览器
- 在WebKit浏览器中,图像调整会产生轻微的、短暂的像素化
- 像素化的跨浏览器图像缩放
- 当浏览器处于后台时,使用javascript触发的像素跟踪不会在移动设备上触发
- 如何使用JavaScript获得以像素为单位的浏览器宽度
- Javascript——将窗口高度增加一个像素——谷歌浏览器
- HTML 5画布坐标和浏览器像素的相关性