Пара примеров использования метода двухмерного контекста холста clip(): "Упражнение с циркулем" - имитация начертания циркулем цветка (наверняка каждый хотя бы один раз пробовал в школе) и "Солнечное затмение" - имитация солнечного затмения (+ музыкальное сопровождение с использованием тэга <audio>).
Исходный код "Упражнения с циркулем":
Результат:
Исходный код "Солнечного затмения":
Результат (в процессе):
Исходный код "Упражнения с циркулем":
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>HTML5 Canvas Clip</title> <style type="text/css"> #sign {font: normal 20px Segoe Script, sans-serif; display: block; color: #000; text-decoration: none;} </style> <script type="text/javascript"> window.onload = function() { var canvas = document.getElementById('myCanvas'); var context = canvas.getContext('2d'); var c = 260; // координата центра окружности var r = 240; // радиус окружности var t = 20; // отступ окружности от края холста // отступ для нахождения координаты края лепестка var off = Math.round(((r*3)/Math.sqrt(3))/2); context.save(); // сохраним контекст перед обрезкой context.beginPath(); // первая окружность - маска обрезки context.arc(c, c, r, 0, 2 * Math.PI, false); context.clip(); context.lineWidth = 3; context.strokeStyle = 'red'; // массив значений координат var arr = [[c, t], [c + off, t + r/2], [c + off, t + r/2 + r], [c, t + r*2], [c - off, t + r/2 + r], [c - off, t + r/2]]; var i=0; setTimeout(function() {setSign("Поехали!");}, 1); setTimeout(function() {setSign("Рисовал такой цветок в школе? Циркулем?");}, 2500); setTimeout(start, 1); function start() { canvas.style.border = '3px solid blue'; setTimeout(nextStep, 1000); } function nextStep() { if (i > 5) { finish(); return; } context.beginPath(); context.arc(arr[i][0], arr[i][1], r, 0, 2 * Math.PI, false); context.stroke(); i++; setTimeout(nextStep, 1000); } function finish() { context.restore(); // восстановим сохраненный контекст context.beginPath(); context.arc(c, c, r, 0, 2 * Math.PI, false); context.lineWidth = 3; context.strokeStyle = 'blue'; context.stroke(); setTimeout(function() {setSign("© Designed by Anatoly Demidovich");}, 1000); } } function setSign(txt) { var sign = document.getElementById('sign'); while ( sign.firstChild ) sign.removeChild( sign.firstChild ); var i=0; function setText() { if (i == txt.length) return; sign.appendChild(document.createTextNode(txt.charAt(i))); i++; setTimeout(setText, 100); } setTimeout(setText, 100); } </script> </head> <body> <canvas id="myCanvas" width="520" height="520"></canvas> <a id="sign" href="http://www.daspot.ru"></a> </body> </html>
Результат:
Исходный код "Солнечного затмения":
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>HTML5 Canvas Clip</title> <style type="text/css"> #sign {font: normal 20px Segoe Script, sans-serif; display: block; color: #000; text-decoration: none; height: 30px} </style> <script type="text/javascript"> window.onload = function() { var canvas = document.getElementById('myCanvas'); var context = canvas.getContext('2d'); var c = 260; // координата центра окружности var r = 240; // радиус окружности context.save(); // сохраним контекст перед обрезкой context.beginPath(); // первая окружность - маска обрезки context.arc(c, c, r, 0, 2 * Math.PI, false); context.clip(); context.beginPath(); context.arc(c, c, r, 0, 2 * Math.PI, false); context.fillStyle = 'red'; context.fill(); i = -r; setTimeout(nextStep, 100); setTimeout(function() {setSign("Солнечное затмение вручную . . .");}, 1000); setTimeout(function() {setSign("Солнце - красная окружность . . .");}, 6000); setTimeout(function() {setSign("Луна - синяя окружность . . .");}, 12000); function nextStep() { if (i > c) { finish(); return; } i += 3; context.beginPath(); context.arc(i, c, r, 0, 2 * Math.PI, false); context.fillStyle = 'blue'; context.fill(); setTimeout(nextStep, 100); } function finish() { context.restore(); // восстановим сохраненный контекст context.beginPath(); context.arc(c, c, r, 0, 2 * Math.PI, false); context.lineWidth = 3; context.strokeStyle = 'yellow'; context.stroke(); setTimeout(function() {setSign("© Designed by Anatoly Demidovich");}, 1000); } } function setSign(txt) { var sign = document.getElementById('sign'); while ( sign.firstChild ) sign.removeChild( sign.firstChild ); var i=0; function setText() { if (i == txt.length) return; sign.appendChild(document.createTextNode(txt.charAt(i))); i++; setTimeout(setText, 100); } setTimeout(setText, 100); } </script> </head> <body> <canvas id="myCanvas" width="520" height="520"></canvas> <a id="sign" href="http://www.daspot.ru"></a> <audio controls autoplay> <source src="nikogda.mp3" type="audio/mpeg"> Тег audio не поддерживается вашим браузером. </audio> </body> </html>
Результат (в процессе):
Комментариев нет:
Отправить комментарий
Комментарий будет опубликован после модерации