2011-04-01 73 views
1

我正在學習HTML5,我想學習的一個示例是在畫布上創建2個點,並且我應該能夠在2個點之間跟蹤一條線並加入它們,應該在移動設備上使用鼠標和觸摸事件來完成。使用JavaScript在畫布上跟蹤一條線

是否有任何提供這些API的框架,或者是否有任何可以開始使用的示例?

+0

個人而言,我喜歡這樣做沒有框架,但一些可用的框架包括http://raphaeljs.com/和http://processingjs.org/。您可以結合觸摸事件並計算應放置點的位置;然後在它們之間劃一條線。 – pimvdb 2011-04-01 21:31:07

+0

這個問題是非常開放的,快速的谷歌搜索會給你帶來很大的答案。有關於webgl和canvas的很好的教程,大多數主要的javascript框架也會幫助你支持移動設備,查看jquery mobile和YUI。 – idbentley 2011-04-01 21:32:30

回答

3
window.onload=function(){ 

var canvas = document.getElementById('canvas'); 
var ctx=canvas.getContext('2d'); 
var mouse={x:0,y:0}, down=false, lines=[] 

canvas.addEventListener("mousedown",function(e) { 
            down=true 
            mouse={x:e.pageX,y:e.pageY} 

       },false); 

canvas.addEventListener("mousemove",function(e) { 
         this.width=this.width 
         lines.map(function(item){ 
          ctx.beginPath() 
          ctx.moveTo(item[0].x, item[0].y); 
          ctx.lineTo(item[1].x, item[1].y); 
          ctx.stroke(); 
          }) 
       if(down){ 
        ctx.beginPath(); 
        ctx.moveTo(mouse.x, mouse.y); 
        ctx.lineTo(e.pageX-this.offsetLeft, e.pageY-this.offsetTop); 
        ctx.stroke() 
        } 

      },false); 

canvas.addEventListener("mouseup",function(e) { 
         down=false 
         this.width=this.width 
         lines.push([{x:mouse.x,y:mouse.y},{x:e.pageX-this.offsetLeft,y:e.pageY-this.offsetTop}]) 
         lines.map(function(item){ 
           ctx.beginPath() 
           ctx.moveTo(item[0].x, item[0].y); 
           ctx.lineTo(item[1].x, item[1].y); 
           ctx.stroke(); 
           }) 
       },false); 
} 
1

我編寫了一個非常基本的代碼片段,可以幫助您開始:http://jsfiddle.net/vF4dY/

var ctx = $('canvas').get(0).getContext('2d'); 

$('canvas').mousedown(function(e) { 
    ctx.beginPath(); 
    ctx.moveTo(e.offsetX, e.offsetY); 
}); 

$('canvas').mouseup(function(e) { 
    ctx.lineTo(e.offsetX, e.offsetY); 
    ctx.stroke(); 
});