Это правда, getImageData()
слишком неэффективно. Но лучше начать именно то, что вы пытаетесь сделать:
С помощью метода drawImage
контекста холста вы можете передать изображение, но вы можете передать и другой холст. Поэтому создайте временный холст, который никогда не будет добавлен на страницу:
// only exists in javascript, not on the page
tempcanvas = document.createElement('canvas');
tempcanvas.height = (normal canvas width);
tempcanvas.width = (normal canvas height);
Затем вы можете позвонить tempcanvasContext.drawImage(normalCanvas, 0, 0)
, чтобы сделать снимок текущего холста непосредственно перед созданием раскрывающегося меню. Когда раскрывающееся меню исчезает, вы вызываете normalcanvasContext.drawImage(tempcanvas, 0, 0)
, чтобы вернуть его назад.
Я надеюсь, что это дает хорошее общее представление, и оно должно быть намного быстрее, чем getImageData
. Вы можете сделать его еще более эффективным, скопировав только те части экрана, которые хотите перерисовать.