javascript - интерактивное вырезание не обновляет экран
Мне нужна программа, которая позволяет пользователю обрезать изображение прямоугольником:
https://jsfiddle.net/w3qfLr10/58/
Я ожидал, что когда я нажму в разных местах на холсте, программа обрежет фоновое изображение в этом месте. Однако, как видно из ссылки, при каждом щелчке мыши экран не обновляется. Я ожидал, что фон обрезается только одним прямоугольником в последней позиции мыши; вместо этого кажется, что фон обрезается всеми щелчками мыши.Thanks
Вот мой код:
<html>
<head>
<style>
body {
margin: 0px;
padding: 0px;
}
</style>
</head>
<body>
<canvas id='myCanvas' width="480" height="320"> </canvas>
<script >
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
var imageObj = new Image();
var rectX = 75;
var rectY = 60;
function draw() {
context.clearRect(0,0, canvas.width, canvas.height);
context.beginPath();
context.rect(rectX, rectY, 250, 180);
context.clip();
context.drawImage(imageObj, 69, 50);
};
imageObj.onload = function() {
draw();
canvas.onmouseup = function(e) {
rectX = e.x;
rectY = e.y;
draw();
};
};
imageObj.src = 'http://www.html5canvastutorials.com/demos/assets/darth-vader.jpg';
</script>
</body>
</html>
1 ответ
Я понял, что случилось. Чтобы заставить программу вести себя так, как я задумал, мне просто нужно добавить context.save() перед path и context.restore() после рисования. Итак, новый код будет выглядеть так:
....
context.clearRect(0,0, canvas.width, canvas.height);
context.save(); //new code
context.beginPath();
context.rect(rectX, rectY, 250, 180);
context.clip();
context.drawImage(imageObj, 69, 50);
context.restore();//new code