Как использовать один элемент холста в качестве фона для другого элемента холста? - PullRequest
1 голос
/ 21 октября 2010

Я работаю над учебным пособием по HTML5 на следующем веб-сайте: Разработчики Mozilla . В этом уроке говорится, что вы можете использовать элемент canvas в качестве фона другого элемента canvas. Я попытался сделать именно это со следующей HTML-страницей. К сожалению, отладчик в Chrome сообщает, что не удалось загрузить ресурс. Правильно ли я ссылаюсь на исходный объект canvas в функции draw2 ()?:

<html>
<head>
<title>CANVAS TESTING</title>
<script type="text/javascript">

function draw()
    {
    var ctx = document.getElementById('tutorial').getContext('2d');

    ctx.translate(0,document.getElementById('tutorial').height); 
    ctx.scale(1,-1)

    // Create gradients
    var lingrad = ctx.createLinearGradient(0,0,0,150);
    lingrad.addColorStop(0, '#fff');
    lingrad.addColorStop(0.5, '#66CC00');
    lingrad.addColorStop(0.5, '#fff');
    lingrad.addColorStop(1, '#00ABEB');

    var lingrad2 = ctx.createLinearGradient(0,50,0,95);
    lingrad2.addColorStop(0.25, 'rgba(0,0,0,0)');
    lingrad2.addColorStop(0.75, '#000');

    // assign gradients to fill and stroke styles
    ctx.fillStyle = lingrad;
    ctx.strokeStyle = lingrad2;

    // draw shapes
    ctx.fillRect(10,10,130,130);
    ctx.strokeRect(50,50,50,50);

    }
function draw2()
    {
    ctx=document.getElementById('canvas').getContext('2d');
    img = new Image();
    img.onload = function()
        {
        ctx.drawImage(img,0,0);
        }
    img.src = document.getElementById('tutorial');  
    }
</script>
</head>
<body onload="draw()">
<p>This is a test of canvas element.</p>
<canvas id="tutorial" width="400" height="400" style="background-color: black"></canvas>
<br /><br />
<canvas id="canvas" width="400" height="400" style="background-color: black"></canvas>
<p>
<input type="button" onclick="draw2()" value="Draw!" />
</p>
</body>

Ответы [ 2 ]

3 голосов
/ 21 октября 2010

Ваше решение в некотором роде правильное, но вы делаете его более сложным, чем должно быть.

Все, что вам нужно сделать, - это, ничего более интересного:

var tut = document.getElementById('tutorial');
ctx.drawImage(tut,0,0); // just put in the canvas you want to draw!

Вот живой пример jsfiddle , если вам нужно больше деталей

1 голос
/ 21 октября 2010

Хорошо, я только что нашел ответ на свой вопрос.

отключив функцию в Draw2 (), мне нужно было установить в img.src следующее:

img.src = document.getElementById('tutorial').toDataURL();

Это возвращает строку данных в кодировке base64 png-изображения элемента canvas.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...