使用 JavaScript 在画布上的光标位置绘制
Drawing at cursor position on canvas with JavaScript
我正在尝试通过单击并拖动鼠标在画布上绘制。我的问题是,除了线条质量很差(我想要更明显的边框)之外,它只在 0,0 处时才尊重鼠标位置。当我将鼠标移动到下角时,线条与它的距离增加,就像我在画布中间时一样多,线条已经离开了它。我的代码在:http://jsfiddle.net/ajTkP/12/
我也将在这里发布它:
var MDown = false;
var Color = 'blue';
var Canvas = document.getElementById('canvas');
var Context = Canvas.getContext('2d');
Canvas.onselectstart = function() { return false; };
Canvas.unselectable = "on";
Canvas.style.MozUserSelect = "none";
Canvas.onmousedown = function(e) {
MDown = true;
Context.strokeStyle = Color;
Context.lineWidth = 3;
Context.lineCap = 'round';
Context.beginPath();
Context.moveTo(e.pageX - Position(Canvas).left, e.pageY - 5);
}
Canvas.onmouseup = function() { MDown = false; };
Canvas.onmousemove = function(e) {
if (MDown) {
Context.lineTo(e.pageX - Position(Canvas).left, e.pageY - 5);
Context.stroke();
}
}
function Position(el) {
var position = {left: 0, top: 0};
if (el) {
if (!isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) {
position.left += el.offsetLeft;
position.top += el.offsetTop;
}
}
return position;
}
感谢您的帮助!
您需要在
画布上设置显式width
和height
。 画布的默认尺寸为宽度为 300,高度为 150(请参阅此处的规范)。 通过CSS设置宽度和高度,您只需拉伸画布。
执行以下任一操作:
<canvas id="canvas" width="300" height="200"></canvas>
或通过 JavaScript 设置宽度/高度:
canvas.width = 300;
canvas.height = 200;
请参阅更新的 jsfiddle: http://jsfiddle.net/ajTkP/13/
看起来 jimr 在画布高度和宽度方面击败了我。
不过,线条的质量很差是由于你画线的方式造成的。您会注意到,您在每个 onmousemove 事件上都调用了stroke()
。请记住,它会跟踪从beginPath()
到closePath()
的线路路径,因此您基本上会多次抚摸同一条线(每次鼠标移动时)。这就是为您提供锯齿(块状)线条的原因,而不是您期望的平滑抗锯齿线条。
相关文章:
- 自定义函数中的光标位置
- jQuery/Javascript>on单击将文本放置在最后一个已知的光标位置
- 当用户单击按钮(在光标位置)时,在输入字段中添加一个文本字符串
- 内容可编辑分区-根据内部HTML位置的光标位置
- 保持光标位置元素在顶部使用 svg
- 保存键控触发器时保持光标位置的最佳做法
- 如何在java脚本中获取光标位置
- 获取光标位置或光标在 TinyMCE 中的行数
- 如何在每次页面重新加载时更改渐变背景,同时保持光标位置元素处于活动状态
- 在Chrome中,光标位置异常地位于输入值的末尾
- 在光标位置的文本区域中插入一个字符串,并进行一些更改
- 如何从谷歌地图事件访问光标位置(即页面的x和y轴)
- 如何在网页加载asp.net上显示文本框中第二个字母的光标位置
- 当前光标位置(百分比)
- GWT:如何从当前光标位置或所选文本中获取css样式的属性
- 在光标位置插入HTML,并使用javascript将光标移动到插入的HTML的末尾
- jQuery:使用插件Tipsy将工具提示附加到鼠标光标位置
- 不带HTML的光标位置需要转换为带HTML的位置
- 如何从内容可编辑区域获取光标位置之前的文本
- 如何在Wysihtml5沙盒编辑器中的光标位置插入文本