Paper.js,光标与 canvas 之间的间隙
Paper.js, gap between cursor and canvas
我正在尝试使用 Paper.js 构建一个简单的绘图应用程序。我可以用鼠标绘图,但光标和 canvas 上绘制的线之间有间隙。
我意识到网页顶部的导航菜单正在下推光标 (100px) 我假设鼠标坐标是从 window 的左上角 (0-0) 获取的,并且在 canvas 上使用了相同的坐标,它从自己的左上角测量了这些点(参见屏幕截图)。我已经尝试将 canvas 位置设置为绝对位置,这有助于将其置于左上角,但我需要它位于 window.
的中心
我该如何解决这个问题?
谢谢!
脚本:
...
var doc = $(document),
win = $(window),
canvas = $('#paper'),
ctx = canvas[0].getContext('2d')
doc.on('mousemove',function(e){
if($.now() - lastEmit > 30){
socket.emit('mousemove',{
'x': e.pageX,
'y': e.pageY,
'drawing': drawing,
'id': id
});
lastEmit = $.now();
}
// Draw a line for the current user's movement, as it is
// not received in the socket.on('moving') event above
// (because he only broadcats (not receiving))
if(drawing){
drawLine(prev.x, prev.y, e.pageX, e.pageY);
prev.x = e.pageX;
prev.y = e.pageY;
}
});
function drawLine(fromx, fromy, tox, toy){
console.log(fromy + ' ' + toy);
ctx.moveTo(fromx, fromy);
ctx.lineTo(tox, toy);
ctx.stroke();
}
我可以使用早期版本的 paperjs 重现您的问题 - 特别是这个版本是 jsfiddle 上的版本。我看到线条偏移了您使用 v 0.22 的方式,然后使用版本 0.9.25 正确呈现。这是我的代码:
<!-- fails -->
<script type='text/javascript' src='http://cdnjs.cloudflare.com/ajax/libs/paper.js/0.22/paper.js'></script>
<!-- works --> <!--
<script type='text/javascript' src='https://cdnjs.cloudflare.com/ajax/libs/paper.js/0.9.25/paper-full.js'></script>
-->
<style type='text/css'>
#canvas1{
height: 400px;
width: 400px;
border: 1px solid black;
}
</style>
<script type='text/javascript'>
paper.install(window);
window.onload = function() {
paper.setup('canvas1');
var path = new Path();
var tool = new Tool();
path.strokeColor = 'black';
tool.onMouseMove = function(event) {
path.add(event.point);
}
}
</script>
我正在尝试使用 Paper.js 构建一个简单的绘图应用程序。我可以用鼠标绘图,但光标和 canvas 上绘制的线之间有间隙。
我意识到网页顶部的导航菜单正在下推光标 (100px) 我假设鼠标坐标是从 window 的左上角 (0-0) 获取的,并且在 canvas 上使用了相同的坐标,它从自己的左上角测量了这些点(参见屏幕截图)。我已经尝试将 canvas 位置设置为绝对位置,这有助于将其置于左上角,但我需要它位于 window.
的中心我该如何解决这个问题?
谢谢!
脚本:
...
var doc = $(document),
win = $(window),
canvas = $('#paper'),
ctx = canvas[0].getContext('2d')
doc.on('mousemove',function(e){
if($.now() - lastEmit > 30){
socket.emit('mousemove',{
'x': e.pageX,
'y': e.pageY,
'drawing': drawing,
'id': id
});
lastEmit = $.now();
}
// Draw a line for the current user's movement, as it is
// not received in the socket.on('moving') event above
// (because he only broadcats (not receiving))
if(drawing){
drawLine(prev.x, prev.y, e.pageX, e.pageY);
prev.x = e.pageX;
prev.y = e.pageY;
}
});
function drawLine(fromx, fromy, tox, toy){
console.log(fromy + ' ' + toy);
ctx.moveTo(fromx, fromy);
ctx.lineTo(tox, toy);
ctx.stroke();
}
我可以使用早期版本的 paperjs 重现您的问题 - 特别是这个版本是 jsfiddle 上的版本。我看到线条偏移了您使用 v 0.22 的方式,然后使用版本 0.9.25 正确呈现。这是我的代码:
<!-- fails -->
<script type='text/javascript' src='http://cdnjs.cloudflare.com/ajax/libs/paper.js/0.22/paper.js'></script>
<!-- works --> <!--
<script type='text/javascript' src='https://cdnjs.cloudflare.com/ajax/libs/paper.js/0.9.25/paper-full.js'></script>
-->
<style type='text/css'>
#canvas1{
height: 400px;
width: 400px;
border: 1px solid black;
}
</style>
<script type='text/javascript'>
paper.install(window);
window.onload = function() {
paper.setup('canvas1');
var path = new Path();
var tool = new Tool();
path.strokeColor = 'black';
tool.onMouseMove = function(event) {
path.add(event.point);
}
}
</script>