相关疑难解决方法(0)

画布中的真实鼠标位置

我试图用鼠标画在HTML5画布上,但它似乎运行良好的唯一方法是如果画布位于0,0(左上角),如果我改变画布位置,由于某种原因它不会像它应该画的那样.这是我的代码.

 function createImageOnCanvas(imageId){
    document.getElementById("imgCanvas").style.display = "block";
    document.getElementById("images").style.overflowY= "hidden";
    var canvas = document.getElementById("imgCanvas");
    var context = canvas.getContext("2d");
    var img = new Image(300,300);
    img.src = document.getElementById(imageId).src;
    context.drawImage(img, (0),(0));
}

function draw(e){
    var canvas = document.getElementById("imgCanvas");
    var context = canvas.getContext("2d");
    posx = e.clientX;
    posy = e.clientY;
    context.fillStyle = "#000000";
    context.fillRect (posx, posy, 4, 4);
}
Run Code Online (Sandbox Code Playgroud)

HTML部分

 <body>
 <div id="images">
 </div>
 <canvas onmousemove="draw(event)" style="margin:0;padding:0;" id="imgCanvas"
          class="canvasView" width="250" height="250"></canvas> 
Run Code Online (Sandbox Code Playgroud)

我已经读过有一种方法可以在JavaScript中创建一个简单的函数来获得正确的位置,但我不知道如何做到这一点.

javascript canvas mouse-position html5-canvas

80
推荐指数
4
解决办法
11万
查看次数

在画布中获取鼠标位置

有没有办法将位置鼠标放在<canvas>标签内?我想要相对于右上角的位置<canvas>,而不是整个页面.

javascript html5 canvas

43
推荐指数
6
解决办法
7万
查看次数

我们应该为layerX/layerY使用什么替代品,因为它们在webkit中已被弃用?

在chrome canary中,不推荐使用layerX和layerY,但我们应该使用什么呢?

我找到了offsetX,但它不适用于Firefox.所以为了在webkit上没有警告的情况下获取layerX,我已经这样做了:

var x = evt.offsetX || evt.layerX,
    y = evt.offsetY || evt.layerY;
Run Code Online (Sandbox Code Playgroud)

但这看起来相当复杂!这是否真的应该让layerX在所有浏览器中运行?

javascript

23
推荐指数
3
解决办法
1万
查看次数

当没有周围元素时,在画布中跟踪鼠标位置

我在使用画布获取鼠标位置时遇到了麻烦.

有两种情况:

1)如果画布div周围没有div元素,那么我就可以获得鼠标位置.

2)当画布被包裹在div当时offsetLeft并且offsetTop不能按预期工作时

这种差异的原因是什么?

javascript html5 canvas

18
推荐指数
1
解决办法
1万
查看次数

在Web浏览器中创建可单击网格

我想在HTML5画布上绘制一个10 x 10格的网格,方块上显示数字1-100.单击一个正方形应该调用一个JavaScript函数,并将方形的数字作为变量传递给函数.

html javascript html5 canvas

16
推荐指数
2
解决办法
4万
查看次数

Canvas标记中的addEventListener

我有一个canvas标签来创建一个图形.在我的每一行,我都有一个"点"来启用"鼠标悬停"并显示更多细节.

当我不向此点添加事件监听器时,一切正常.

Firebug警告我:s.addEventListener不是函数...

是否可以创建动态事件监听器?(我是Javascript的新手)

javascript html5 canvas javascript-events

13
推荐指数
1
解决办法
2万
查看次数

获取相对于元素的内容区域的鼠标位置

当鼠标移动到一个元素,我想相对于元素的内容区域的左上角光标的鼠标坐标(这是不包括区域填充,边框和轮廓).听起来很简单吧?到目前为止我所拥有的是一个非常受欢迎的功能:

function element_position(e) {
    var x = 0, y = 0;
    do {
        x += e.offsetLeft;
        y += e.offsetTop;
    } while (e = e.offsetParent);
    return { x: x, y: y };
}
Run Code Online (Sandbox Code Playgroud)

并且我将获得相对于元素的鼠标位置element:

p = element_position(element);
x = mouseEvent.pageX - p.x;
y = mouseEvent.pageY - p.y;
Run Code Online (Sandbox Code Playgroud)

这不太正确.由于offsetLeftoffsetTop是一个元件的"外"左上和"内"左上其偏移父之间的差异,则总和位置将跳过所有层次结构中的边界和补白.

这是一个比较,应该(希望)澄清我的意思.

  • 如果我得到元素的"外部"左上角和偏移父母的"内部"左上角之间的距离总和(outers减去内部 ;我现在正在做什么),我得到元素的内容区域position,减去偏移层次结构中的所有边框和填充.
  • 如果我得到元素的"外部"左上角和偏移父母的"外部"左上角之间的距离总和(outers减去outers),我得到元素的内容区域的位置,减去边框和填充期望的元素(关闭,但不完全).
  • 如果我得到元素的"内部"左上角和偏移父母的内部"内部"(内部减去内部)之间的距离总和,我得到元素的内容区域的位置.这就是我要的.

html javascript

13
推荐指数
1
解决办法
1万
查看次数

单击画布时获取鼠标坐标

一个常见问题,但我仍然需要帮助.当有人在画布中点击时,我正试图获取并存储鼠标坐标.

我的HTML

<canvas id="puppyCanvas" width="500" height="500" style="border:2px solid black" onclick = "storeGuess(event)"></canvas>
Run Code Online (Sandbox Code Playgroud)

和我的javascript

//setup canvas
var canvasSetup = document.getElementById("puppyCanvas");
var ctx = canvasSetup.getContext("2d");

guessX = 0;//stores user's click on canvas
 guessY = 0;//stores user's click on canvas

function storeGuess(event){
    var x = event.clientX - ctx.canvas.offsetLeft;
    var y = event.clientY - ctx.canvas.offsetTop;
    /*guessX = x;
    guessY = y;*/


    console.log("x coords:" + x + ", y coords" + y);
Run Code Online (Sandbox Code Playgroud)

我已经阅读了很多论坛,w3schools和视频.我已经接近搞清楚,但我错过了一些东西.如果删除ctx.canvas.offsetLeft和ctx.canvas.offsetTop,我可以获取页面的坐标.但我需要以某种方式合并这些以获取画布的坐标,然后存储到变量guessX和guessY中.

mouse canvas coordinates

8
推荐指数
1
解决办法
8033
查看次数

滚动上的画布签名会更改鼠标绘制位置

我正在尝试使用画布,以便用鼠标可以写出他们的签名.一切正常,直到我拉伸或滚动屏幕然后它在远离鼠标的不同位置绘制线条.

代码:

function onMouseUp(event) {
    'use strict';
    mousePressed = false;
}
function onMouseMove(event) {
    'use strict';
    if (mousePressed) {
        event.preventDefault();
        mouseX = event.clientX - can.offsetLeft - mleft;
        mouseY = event.clientY - can.offsetTop - mtop;
        ctx.lineTo(mouseX, mouseY);
        ctx.stroke();
    }
}
function onMouseDown(event) {
    'use strict';
    mousePressed = true;
    mouseX = event.clientX - can.offsetLeft - mleft;
    mouseY = event.clientY - can.offsetTop - mtop;
    ctx.beginPath();
    ctx.moveTo(mouseX, mouseY);
}
can.addEventListener('mousemove', onMouseMove, false);
can.addEventListener('mousedown', onMouseDown, false);
can.addEventListener('mouseup', onMouseUp, false);
Run Code Online (Sandbox Code Playgroud)

HTML看起来像: <canvas id="signature" width="567" height="150"></canvas>

javascript jquery html5 canvas

7
推荐指数
1
解决办法
1236
查看次数

如何检测是否单击了形状(HTML5 画布)?

我正在使用此博客中的画布和lineTo方法绘制不同的形状,如矩形、三角形、六边形等。我只想要一种简单的方法来查找我是否在形状内部单击。我可以通过用某种颜色填充形状并检查我单击的点是否具有这种颜色来实现,但我不想使用填充颜色方法。有没有其他方法可以做到?

还发现isPointInPath但它不起作用。

html javascript canvas

5
推荐指数
1
解决办法
1万
查看次数