2011-02-16 155 views
4

我想拖动位于画布上的文本,我找到了一个教程如何拖动Rectange但我无法在文本上实现它,这是移动矩形的以下代码,有人可以帮我在Text上实现吗?HTML5画布 - 在画布上拖动文本问题

<!doctype html> 
<html> 
<head> 
<meta charset="UTF-8" /> 
<title>Canvas Drag and Drop Test</title> 
</head> 
<body> 
<section> 

<div> 
<canvas id="canvas" width="400" height="300"> 
This text is displayed if your browser does not support HTML5 Canvas. 
</canvas> 
</div> 

<script type="text/javascript"> 

var canvas; 
var ctx; 
var x = 75; 
var y = 50; 
var dx = 5; 
var dy = 3; 
var WIDTH = 400; 
var HEIGHT = 300; 
var dragok = false; 

function rect(x,y,w,h) { 
ctx.beginPath(); 
ctx.rect(x,y,w,h); 
ctx.closePath(); 
ctx.fill(); 
} 

function clear() { 
ctx.clearRect(0, 0, WIDTH, HEIGHT); 
} 

function init() { 
canvas = document.getElementById("canvas"); 
ctx = canvas.getContext("2d"); 
return setInterval(draw, 10); 
} 

function draw() { 
clear(); 
ctx.fillStyle = "#FAF7F8"; 
rect(0,0,WIDTH,HEIGHT); 
ctx.fillStyle = "#444444"; 
rect(x - 15, y - 15, 30, 30); 
} 

function myMove(e){ 
if (dragok){ 
    x = e.pageX - canvas.offsetLeft; 
    y = e.pageY - canvas.offsetTop; 
} 
} 

function myDown(e){ 
if (e.pageX < x + 15 + canvas.offsetLeft && e.pageX > x - 15 + 
canvas.offsetLeft && e.pageY < y + 15 + canvas.offsetTop && 
e.pageY > y -15 + canvas.offsetTop){ 
    x = e.pageX - canvas.offsetLeft; 
    y = e.pageY - canvas.offsetTop; 
    dragok = true; 
    canvas.onmousemove = myMove; 
} 
} 

function myUp(){ 
dragok = false; 
canvas.onmousemove = null; 
} 

init(); 
canvas.onmousedown = myDown; 
canvas.onmouseup = myUp; 

</script> 

</section> 
</body> 
</html> 

Test

而且还当我添加此代码头标记这是行不通的。为什么这样?

回答

8

基本例如 http://jsfiddle.net/h3BCq/1/

美化了一番一个(保持RECT功能,增加了新的文本功能,绘制边框文本) http://jsfiddle.net/h3BCq/2/

我肯定被骗了。我使用字体大小的px来更容易地抓住它的宽度。您可以使用em或点,但您只需对像素进行转换即可获得估计的宽度。我基本上只是删除了矩形,并添加了filltext,并修改了检查以检查文本宽度。

+0

为什么当我将所有脚本代码放入HEAD标记时,此代码不起作用? – Yahoo 2011-02-16 17:44:03