Что не так ?
Да всё не так.
Что за
clone? - у DOM-узлов такого метода нет. Меняйте на
cloneNode. Или используйте jquery (судя по тому, что контекст вы пытаетесь получить у
clone[0], так и предполагалось), там
clone есть.
Копировать содержимое оригинала вы пытаетесь до того, как оно вообще будет загружено. Выполняйте копирование в обработчике события
load.
Копируете непонятно откуда:
canvas = document.getElementById('myCanvas');
<...>
drawImage(canvas[0],
Опять же - или получайте элемент через jquery, или уберите
[0].
Исправляем:
const canvas = document.querySelector('#myCanvas');
const image = Object.assign(new Image, {
onload() {
canvas.getContext('2d').drawImage(this, 0, 0, 300, 300);
const clone = canvas.cloneNode();
clone.getContext('2d').drawImage(canvas, 0, 0);
document.querySelector('#target').append(clone);
},
src: 'https://www.photographyatthesummit.com/wp-content/uploads/2013/03/p-nature43-300x300.jpg',
});
или
const $canvas = $('#myCanvas');
const $image = $('<img>')
.on('load', function() {
$canvas[0].getContext('2d').drawImage(this, 0, 0, 300, 300);
const $clone = $canvas.clone();
$clone[0].getContext('2d').drawImage($canvas[0], 0, 0);
$('#target').append($clone);
})
.prop('src', 'https://www.photographyatthesummit.com/wp-content/uploads/2013/03/p-nature43-300x300.jpg');