2014-04-10 142 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因为它降低了用户定义的全局符号的数量,从而具有内置和主机定义的符号发生碰撞的可能性。