Я использую stackoverflow.com в качестве источника вдохновения и решения проблем уже много месяцев.Я просто никогда не сталкивался с проблемой без решения до сих пор, поэтому я сначала хотел бы представиться и поделиться своей проблемой со всеми, кто интересуется.
Для прошлой парынедель я пытался анимировать определенные формы и линии на элементе canvas, чтобы создать некоторые интересные эффекты - например, почерк или аналогичные.
Чтобы добиться этого, я использую некоторую технику, которая использует .clip ()команда элемента canvas, чтобы скрыть и постепенно выявить области, под которыми «ждет» предварительно визуализированное изображение (формы, линии ...).Проблема, с которой я здесь сталкиваюсь, связана с переменными, которые определяют область отсечения в элементе canvas.Кажется, есть какая-то странная проблема с увеличением (но не уменьшением) значений в анимации.
И поскольку все это звучит очень странно, о чем я знаю, вот соответствующая часть кода, о которой я говорю.
$(document).ready(function() {
var ctx = $( "#canvas" )[0].getContext("2d");
ctx.fillStyle = "#a00";
var recW = 200;
function animate() {
ctx.clearRect(0,0,400,400);
ctx.beginPath();
ctx.rect(50,50,recW,100);
ctx.clip();
ctx.beginPath();
ctx.arc(250,100,90,0,Math.PI*2,true);
ctx.fill();
recW--;
if (recW == 150) clearInterval(run);
}
var run = setInterval(function() { animate(); },60);
});
Приведенный выше код работает отлично.Он рисует прямоугольник на холсте 400 * 400, использует его в качестве области отсечения, затем рисует круг, и затем этот круг соответственно обрезается.Через интервал анимации длина прямоугольника отсечения затем уменьшается до тестового значения 150. Пока все хорошо.Но вот часть, которая заставляла меня загадывать часами подряд:
$(document).ready(function() {
var ctx = $( "#canvas" )[0].getContext("2d");
ctx.fillStyle = "#a00";
var recW = 150;
function animate() {
ctx.clearRect(0,0,400,400);
ctx.beginPath();
ctx.rect(50,50,recW,100);
ctx.clip();
ctx.beginPath();
ctx.arc(250,100,90,0,Math.PI*2,true);
ctx.fill();
recW++;
if (recW == 200) clearInterval(run);
}
var run = setInterval(function() { animate(); },60);
});
Если я переверну всю анимацию, начнем с ширины 150 для прямоугольника отсечения и увеличим ее с recW ++ дотест-значение 200, внезапно анимация больше не работает.Постепенное увеличение переменной работает без проблем, но видимая область отсечения не увеличивается.
Я подозреваю, что, возможно, я просто упускаю из виду очевидное здесь, но я просто не могу найти ошибку, и я быбудь очень благодарен, если кто-нибудь может указать мне правильное направление;)
Большое спасибо
Трикон