如何清除图像以进行重绘?

时间:2014-03-08 03:54:17

标签: javascript html html5 canvas

我需要找到一种方法来改变图片,当用户点击它时,我似乎遇到了问题。

继承我的代码:

        var canvas = document.getElementById("myCanvas");
        var context = canvas.getContext("2d");
        var img = new Image();

        img.src = 'Birthday.jpg';

        img.onload = function() {
            context.drawImage(img, 47, 90, 200, 300);
        };

        }

我已经尝试过这样的事情:

img.onclick = function() {
            context.clearRect(47, 90, 200, 300);
            img2.src = 'BirthdayOUT.jpg';
            context.drawImage(img2, 47, 90, 200, 300);
        };

4 个答案:

答案 0 :(得分:0)

当您将图像绘制到画布时,您不会绘制图像元素本身,只是一个位图表示。

这意味着img.onclick永远不会触发。相反,您必须手动跟踪绘制图像的位置并使用画布onclick,确定是否单击了图像,然后更改绘制新图像。

答案 1 :(得分:0)

您的问题不是清除画布,而是点击事件处理 img.onclick未触发,因为画布上的图片不是Image对象。请参阅this作为示例。

答案 2 :(得分:0)

你应该在设置src之前创建你的img.onload函数,否则onload可能永远不会触发。

答案 3 :(得分:0)

我不确定你要在这里实现什么,但如果你只是想在页面上有一个图像,请不要使用'canvas'并通过'src'属性更改图像。 /> 但是,如果你想在画布上使用它 - 我怀疑 - 你必须在绘制时存储图像的坐标/尺寸。然后,要更改图片,请使用'clearRect()'将该区域空白并绘制新图像。

请注意,在您的代码中,'img'不会作为元素传递给画布,而是作为位图传递,如'Simon Sarris'所述。这意味着,必须将“onclick”事件的处理程序分配给画布。然后检查点击是否在图像的边框内出现。要实现这一点,您需要从事件对象访问“clientX”和“clientY”,该事件对象声明鼠标单击相对于客户区的位置。确保相对于客户区域保持img坐标。

使用Javascript:

window.onload = init;

var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
var img = new Image();

function init(){
    img.src = 'Birthday.jpg';
    context.drawImage(img, /* your img coords */ );
    canvas.addEventListener('click', onCanvasClick);
}

function onCanvasClick(event){
    var clickX = event.clientX;
    var clickY = event.clientY;

    if ( clickX > imgLeft && clickX < imgRight   &&   clickY > imgTop && clickY < imgBottom ){ changePicture(); }
}

function changePicture(){
    context.clearRect( /* your img coords */ );
    img.src = /* new img URL */;
    // save new img coords before next step
    context.drawImage(img, /* your new img coords */ );
}

图像坐标称为'imgLeft','ImgRight','ImgTop','imgBottom'/相对于客户区! 您可能必须在'addEventListener()'中修改函数名称,我不完全确定。也许如下:

canvas.addEventListener('click', function(){ onCanvasClick(); });