2014-04-10 145 views
1

通過一些starnge原因,它不工作,我做我如何清除畫布?

canvas.width = canvas.width; 

這裏是我的代碼:

function startDraw(){ 
document.getElementById('PaintArea').setAttribute('onmousemove', 'getMouse(event)'); 
} 
function stopDraw(){ 
document.getElementById('PaintArea').setAttribute('onmousemove', ''); 
} 
function Paint(){ 
var Size = document.getElementById('Size').value; 
var Opacity = document.getElementById('opa').value; 
var color = document.getElementById('color').value; 
canvas = document.getElementById('PaintArea'); 
if(canvas.getContext){ 
    var ctx = canvas.getContext('2d'); 

    ctx.fillStyle = color; 
    ctx.globalAlpha = Opacity; 
    ctx.beginPath(); 
    ctx.arc(musX-10, musY-10, Size, 0, Math.PI*2); 
    ctx.closePath(); 
    ctx.fill(); 
} 
} 

function clear(){  
canvas.width = canvas.width; 
} 

function getMouse(event) { 
musY = event.clientY; 
musX = event.clientX; 
Paint(); 
} 

按鈕:

<button onclick="clear()">Clear</button> 
在它說的鉻控制檯

: 「document.clear()已被棄用,這種方法不會做任何事情。」

我也有這些全球varables:

var musX; 
var musY; 
var canvas; 
+0

同樣的原因及解決辦法,因爲我在http://stackoverflow.com/a/9160009/855543 – PointedEars

回答

1

猜測基礎上的錯誤信息......試試這個:

<button onclick="window.clear();">Clear</button> 

如果這樣的作品,可以考慮使用較少的模糊函數名,東西像clearCanvas()

+0

感謝解釋!這工作! – ZeppRock

+0

'window'是一個主機定義的屬性。它不應該被用來訪問ECMAScript全局對象。相反,在全局上下文中使用'var global = this;'(變量標識符無關緊要),然後使用'global.clear()'。同樣,'global.clearCanvas()'。有關詳細信息,請參閱我對問題的評論。 – PointedEars

+0

如果下一個瀏覽器提供了'window.clearCanvas'屬性呢?容易出錯,不推薦。 – PointedEars

0
<button onclick="clear()">Clear</button> 

在鉻控制檯它說:「document.clear()已棄用。此方法不會做任何事情。」

您已經運行到legacy scope chain augmentation problem

在這種情況下,clear是由主機定義document屬性所引用的對象的屬性的名稱,這是在事件處理程序的屬性值的代碼的作用域鏈爲了訪問功能可靠(跨瀏覽器),你需要繞過作用域鏈

可能的解決方案:。

  • 讓你的功能你自己的對象的方法:

    var myObject = { 
        startDraw: function (…) { 
        // … 
        }, 
    
        // … 
    
        clear: function (…) { 
        // … 
        } 
    }; 
    
    … 
    
    <button onclick="myObject.clear()">Clear</button> 
    
  • 訪問全局對象,其方法的功能,可以直接使用:

    var _global = this; 
    
    // … 
    
    function clear() 
    { 
        // … 
    } 
    
    … 
    
    <button onclick="_global.clear()">Clear</button> 
    

    (只要不與內置或主機定義的符號衝突,您可以選擇任何其他變量標識符代替_global_global是衝撞可能性的識別符。)被推薦

  • 方法1因爲它降低了用戶定義的全局符號的數量,從而具有內置和主機定義的符號發生碰撞的可能性。