0

キャンバスを複製しようとしていますが、drawCanvas is nullエラーがスローされます。ボタンを押すたびに、エラーがスローされます。キャンバスを複製する他の方法はありますか?

HTML

<Html>
<Head>
<Title>Java Example</Title>

        <script type="text/javascript">
{

if (!window.Clipboard) {
   var pasteCatcher = document.createElement("apDiv1");
   pasteCatcher.setAttribute("contenteditable", "");
   pasteCatcher.style.opacity = 0;
   //document.body.appendChild(pasteCatcher);
   pasteCatcher.focus();
   document.addEventListener("click", function() { pasteCatcher.focus(); });
} 

//window.addEventListener("paste", onPasteHandler);

function onPasteHandler(e)
{
    if(e.clipboardData) {
        var items = e.clipboardData.items;
        if(!items){
            alert("Image Not found");
        }
        for (var i = 0; i < items.length; ++i) {
        if (items[i].kind === 'file' && items[i].type === 'image/png') {
            var blob = items[i].getAsFile(),
                source = window.webkitURL.createObjectURL(blob);

            pastedImage = new Image();
            pastedImage.src = source;

            pasteData();
            }
        }
    }
}

function pasteData()
{
    drawCanvas = document.getElementById('drawCanvas1');
    ctx = drawCanvas.getContext( '2d' );
    ctx.clearRect(0, 0, 640,480);
    ctx.drawImage(pastedImage, 0, 0);
}

function pasteData2()
{
    drawCanvas = document.getElementById('drawCanvas1');
    ctx = drawCanvas.getContext( '2d' );
    ctx.clearRect(0, 0, 640,480);
    ctx.drawImage(pastedImage, 0, 0);
    image2 = convertCanvasToImage(drawCanvas);
    document.getElementById("canvasHolder").appendChild(image2);
}

 // Converts image to canvas; returns new canvas element
            function convertImageToCanvas(image) {
            var canvas = document.createElement("canvas");
                canvas.width = image.width;
                canvas.height = image.height;
                canvas.getContext("2d").drawImage(image, 0, 0);                
                return canvas;
            }

            // Converts canvas to an image
            function convertCanvasToImage(canvas) {
                var image = new Image();
                image.src = canvas.toDataURL("image/png");
                return image;
            }
}

        </script>
<style type="text/css">
#apDiv1 {
    position:absolute;
    width:258px;
    height:165px;
    z-index:1;
    left: 71px;
    top: 59px;
}
</style>
</Head>

<Body>
<div id="apDiv1" contenteditable='true'>Paste Test</div>
<!--div id='div' contenteditable='true'>Paste</div-->
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<button type="button" value="click me" onclick="return pasteData2();" />
<h2>Canvas Image</h2>
    <p id="canvasHolder">

    </p>
</Body>
</Html> 

エラー ここに画像の説明を入力

4

1 に答える 1

0

まず、画像がロードされていることを確認するために、画像の onload イベントに登録する必要があります。

     // inside onPastHandler ...

        pastedImage = new Image();
        pastedImage.onload = pasteData.bind(null,pastedImage);
        pastedImage.src = source;

次に、必要のない存在しないキャンバス「drawCanvas1」について言及しています。

function pasteData(img) {
      document.getElementById("canvasHolder").appendChild(img);
 }
于 2013-07-17T12:03:08.360 に答える