0
나는 마우스를 사용하여 캔버스를 그리려하고있다. 내 응용 프로그램은 파이어 폭스에서 잘 작동하지만 크롬에서는 작동하지 않습니다. 내 코드는 다음과 같다 : 코드에서캔버스에 크롬으로 마우스를 그려 넣는 것
function getMousePos(canvas, evt) {
var rect = canvas.getBoundingClientRect();
scaleX = canvas.width/rect.width, /*relationship bitmap vs. element for X*/
scaleY = canvas.height/rect.height; /*relationship bitmap vs. element for Y*/
return {
x: Math.round((evt.clientX - rect.left)*scaleX),
y: Math.round((evt.clientY - rect.top)*scaleY)
};
}
내가 마우스 좌표를 얻을 위, 캔버스는 "Lienzo"라는 DIV에 포함합니다. 나는 해결책을 찾기 위해 노력했다
canvas {
image-rendering: -moz-crisp-edges; /* Firefox */
image-rendering: pixelated; /* Chrome */
position:absolute;
width:100%;
height:auto;
background:white;
box-shadow: 0 0 10px black;
}
#lienzo {
position:relative;
margin-left:1em;
width:80%;
}
,하지만 난 정말 잘못 이해 해달라고 할 수 없기 때문에 : 캔버스와 lienzo에 대한 CSS는 다음과 같다.
마우스로 그리는 데 사용하는 코드는 좌표를 밀어 넣는 배열로 구성되어 있으며 마우스를 놓으면 배열에 포함 된 모든 좌표가 인쇄됩니다.
this.mostrarForma= function(){
for(var i=0; i < lista_de_puntos.length; i++)
{
ctx.strokeStyle=color;
ctx.lineJoin=tipo;
ctx.lineWidth=grosor;
ctx.beginPath();
//If i am at the begining of the array
if(lista_de_puntos[i][2] && i){
//Entramos aqui si pulsamos y arrastramos
ctx.moveTo(lista_de_puntos[i-1][0], lista_de_puntos[i-1][1]);
}else{
//If I press and I release the button
ctx.moveTo(lista_de_puntos[i][0], lista_de_puntos[i][1]);
}
ctx.lineTo(lista_de_puntos[i][0], lista_de_puntos[i][1]);
ctx.closePath();
ctx.stroke();
}
}
내가 바이올린의 링크를 첨부 그것을 명확하게하기 위해 : 다음은 코드의 조각이다
https://jsfiddle.net/ciberlook/rhwcbwwL/18/ 어떤 도움을?
파이어 폭스에서 작동하는 코드 전체로 스 니펫이나 바이올린을 만들 수 있습니까? 내가 가지고있는 것을 하나의 조각으로 만들려고 노력하고 있는데,'this.mostrarForma'가 어떤 스코프인지, 또는 당신이 사용하고있는 마우스 이벤트가 무엇인지 알지 못합니다. – zfrisch
오케이, 지연에 대해 유감스럽게 생각하지만 바이올린을 파악하는 방법을 알지 못해 잠시 시간이 걸렸습니다. 따라서 필자는 바이올린에 예제를 첨부하여 어떤 일이 일어나고 있는지 더 잘 이해할 수 있습니다. 여기 있습니다 : https://jsfiddle.net/ciberlook/rhwcbwwL/18/ – galeonweb