2013-07-25 3 views
1

사용자가 캡션을 추가 할 수있는 응용 프로그램이 있는데 문제는 여러 텍스트를 끌어서 놓는 데 문제가 있다는 것입니다. 일반적인 mousedown, mousemove, mouseup 이벤트를 사용하면 하나의 텍스트 만 드래그 앤 드롭 할 수 있지만 여러 텍스트를 드래그 앤 드롭하는 기능을 원하지만이 문제에 대한 명확한 접근법은 없습니다. 어떤 도움이라도 대단히 감사 할 것입니다.HTML5 캔버스 여러 텍스트 끌어서 놓기

업데이트 : 두 텍스트를 모두 드래그하려고 할 때 코드가 엉망이지만 어쨌든 게시합니다.

감사

<html> 
<body> 
<canvas id = 'canvas'></canvas> 
<textarea id = 'topCaption'></textarea> 
<textarea id = 'bottomCaption'></textarea> 
<script type = 'text/javascript'> 


window.addEventListener('load',initCanvas,false); 

function initCanvas(e) 
{ 
canvas = document.getElementById('canvas'); 
context = canvas.getContext('2d'); 
canvas.height = 500; 
canvas.width = 500; 
mouse = {x:0,y:0}; 
dragging = false; 
topCap = document.getElementById('topCaption'); 
bottomCap = document.getElementById('bottomCaption'); 
topX = 100; //top x position 
topY = 100; //top y position 
botX = 300; //bottom x position 
botY = 300; //bottom y position 
canvas.addEventListener('mousemove',MouseMove,false); 
canvas.addEventListener('mouseup',MouseUp,false); 
canvas.addEventListener('mousedown',MouseDown,false); 
window.addEventListener('keyup',KeyUp,false); 
return setInterval(keyup,10) 
} 
function clear() 
{ 
context.clearRect(0,0,canvas.width,canvas.height); 
} 

function text(Caption,x,y) 
{ 
context.fillStyle = '#000'; 
context.font = '45px Impact';  //'bold 45px impact'; 
context.textAlign = 'center'; 
context.lineCap = 'round'; 
context.lineJoin = 'round'; 
context.fill(); 
context.stroke(); 
context.fillText(Caption,x,y); 
}; 




function MouseMove(event){ 
mouse.x = event.pageX - canvas.offsetLeft; 
mouse.y = event.pageY - canvas.offsetTop; 
if(dragging) 
{ 
context.lineTo(mouse.x,mouse.y); 
} 
} 



function MouseDown(event) 
{ 
dragging = true; 
setInterval(function(){ 
topX = mouse.x; 
topY = mouse.y; 
botX = mouse.x; 
botY = mouse.y; 
},10) 
} 

function MouseUp(event) 
{ 
if(dragging) 
{ 
dragging = false; 
} 
} 

function KeyUp(event) 
{ 
clear(); 
text(topCap.value.toUpperCase(),topX,topY); 
text(bottomCap.value.toUpperCase(),botX,botY); 

} 



</script> 
</body> 
</html> 
+0

우리가 살펴볼 코드와 시도한 코드를 제공해주십시오. 텍스트는 어떻게 선택됩니까? 여러 텍스트를 어떻게 선택할 수 있습니까? –

답변

1

는 마우스 이벤트를 듣고하여 기본적인 드래그를 이해처럼, 그래서 여기에 소리 여러 항목을 드래그하는 방법의 개요입니다 : mousedown, mouseup에와 MouseMove 이벤트를 수신

합니다.

당신은 MouseMove 이벤트의 < 10px있는 텍스트 BoundingBox의 내부 mousedown +와 mouseUp을 얻는 경우에 사이에, 당신은 mousedown을받을 경우

을 (어쩌면 "선택"배열에의 참조를 추가)이 텍스트를 "선택" mousemove의 10+ 픽셀, 그 "드래그"("선택된"배열의 모든 텍스트를 이동).