Итак, для того, чтобы сделать графический редактор нужны:
canvas (холст) - для рисования на нем
palette - палитра
clear - для очистки контекста
Оформим стили:
Собственно приступаем к реализации:
Спасибо за внимание.
- Базовые знания HTML5, JS
- Браузер
- Canvas
1 2 3 4 5 | <div class= "container" > <canvas id= 'canvas' width= "600" height= "600" >Ваш браузер устарел!</canvas> <div id= "palette" ></div> <div id= "clear" >Очистить изображение</div> </div> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | .button { width : 15px ; height : 15px ; display : inline- block ; padding : 1px ; cursor : pointer ; border : solid 1px #fff ; } .button:hover { border : solid 1px #f00 ; } .button:active { border : solid 1px #ff0 ; } #palette, #canvas { display : inline- block ; border : solid 1px #aaa ; cursor : default ; vertical-align : top ; } #palette { width : 95px ; } #clear { background : #eee ; color : #777 ; padding : 10px ; width : 200px ; text-align : center ; margin : 15px auto ; cursor : pointer ; } .container { white-space : normal ; width : 710px ; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | // Выполняем по завершении загрузки страницы window.addEventListener( "load" , function onWindowLoad() { // Инициализируем переменные // Генерируем палитру в элемент #palette generatePalette(document.getElementById( "palette" )); var canvas = document.getElementById( "canvas" ); var context = canvas.getContext( "2d" ); // переменные для рисования context.lineCap = "round" ; context.lineWidth = 8; // вешаем обработчики на кнопки // очистка изображения document.getElementById( "clear" ).onclick = function clear() { context.clearRect(0, 0, canvas.width, canvas.height); }; // На любое движение мыши по canvas будет выполнятся эта функция canvas.onmousemove = function drawIfPressed (e) { // в "e" попадает экземпляр MouseEvent var x = e.offsetX; var y = e.offsetY; var dx = e.movementX; var dy = e.movementY; // Проверяем зажата ли какая-нибудь кнопка мыши // Если да, то рисуем if (e.buttons > 0) { context.beginPath(); context.moveTo(x, y); context.lineTo(x - dx, y - dy); context.stroke(); context.closePath(); } }; function generatePalette(palette) { // генерируем палитру // в итоге 5^3 цветов = 125 for ( var r = 0, max = 4; r <= max; r++) { for ( var g = 0; g <= max; g++) { for ( var b = 0; b <= max; b++) { var paletteBlock = document.createElement( 'div' ); paletteBlock.className = 'button' ; paletteBlock.addEventListener( 'click' , function changeColor(e) { context.strokeStyle = e.target.style.backgroundColor; }); paletteBlock.style.backgroundColor = ( 'rgb(' + Math.round(r * 255 / max) + ", " + Math.round(g * 255 / max) + ", " + Math.round(b * 255 / max) + ")" ); palette.appendChild(paletteBlock); } } } } }); |
Очистить изображение