Показать сообщение отдельно
  #1 (permalink)  
Старый 12.03.2013, 20:45
Интересующийся
Отправить личное сообщение для prizrak39 Посмотреть профиль Найти все сообщения от prizrak39
 
Регистрация: 19.11.2012
Сообщений: 12

рисование прямоугольника по движению мыши
Здравствуйте. Есть необходимость создать небольшой графический редактор на JavaScript. Нашел пример кода для рисования линии. Дописал рисование прямоугольника, но не знаю как сделать чтобы при движении мыши "старый" прямоугольник удалялся, а отрисовывался только текущий?
<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link rel="stylesheet" href="style.css" type="text/css"> 
        <script src="draw.js"></script>
        <script type="text/javascript">
                     
            onload = function() {
                                
                document.getElementById('line').onclick = function(event) {
                    //Линия
                    Canva.init('my_canvas', 800, 500, Pencil);
                }
                
               document.getElementById('rect').onclick = function(event) {
                   //Прямоугольник
                    Canva.init('my_canvas', 800, 500, Rectangle);
                }
                
                var clear = document.getElementById('clear');
                clear.onclick = function(event) {
                    Canva.clear(800, 500);
                }
            };
        </script>
    </head>
    <body>
        <canvas id="my_canvas" width="800" height="500"></canvas> 
        <div id="panelDraw">
            <input type="button" id="clear" value="Очистить">
            <input type="button" id="line" value="Линия">
            <input type="button" id="rect" value="Прямоугольник">
            <input type="button" id="circle" value="Окружность">
        </div>
    </body>
</html>

/* 
 * Рисоание на "холсте"
 */
function ie_event(e)
{
    if (e === undefined)
        { return window.event; };
    return e;
}
//Объект - CANVAS
var Canva = {};
 
// Инициализация объекта
Canva.init = function(id, width, height, tools)
{
    var canv = document.getElementById(id);
    canv.width = width;
    canv.height = height;
 
    this.canvasId = id;
 
    this.ctx = canv.getContext("2d");
    // Свойства
    this.selectedColor = '#000000';
    this.selectedFillColor = '#FFFFFF';
    this.selectedWidth = 1;
    this.tool = tools; // Выбранный инструмент
    this.drawing = false; // true - если зажата кнопка мыши
 
    // Кнопка мыши зажата, рисуем
    canv.onmousedown = function(e)
    {
        var evnt = ie_event(e);
        Canva.tool.start(evnt);
    };
 
    // Кнопка мыши отпущена, рисование прекращаем
    canv.onmouseup = function(e)
    {
        if (Canva.drawing)
        {
            var evnt = ie_event(e);
            Canva.tool.finish(evnt);
        }
    };
 
    // процесс рисования
    canv.onmousemove = function(e)
    {
        if (Canva.drawing)
        {
            var evnt = ie_event(e);
            Canva.tool.move(evnt);
        }
    };
};
 
Canva.setTool = function(t) // Задать инструмент
{
    Canva.tool = t;
};
 
Canva.setWidth = function(width) // Задать толщину линий
{
    Canvas.selectedWidth = width;
};
 
Canva.setColor = function(color) // Задать текущий цвет
{
    Canva.selectedColor = color;
};
 
Canva.clear = function(width, height) // Очистить рисовалку
{
    var canv = document.getElementById(Canva.canvasId);
    Canva.ctx.clearRect(0, 0, width, height);
};
//------------------------------------------------------------------
var Pencil = {};
 
// Начинаем рисование
Pencil.start = function(evnt)
{
    // Текущее положение мыши - начальные координаты
    Pencil.x = evnt.clientX;
    Pencil.y = evnt.clientY;
 
    Canva.ctx.beginPath();
    // Свойства рисования
    Canva.ctx.strokeStyle = Canva.selectedColor;
    Canva.ctx.lineWidth = Canva.selectedWidth;
    Canva.ctx.moveTo(Pencil.x, Pencil.y); // Курсор на начальную позицию
 
    Canva.drawing = true; // Начато рисование
};
 
// Рисование закончили
Pencil.finish = function(evnt)
{   
    Pencil.x = evnt.clientX;
    Pencil.y = evnt.clientY;
    Canva.ctx.lineTo(Pencil.x, Pencil.y); // Дорисовываем последнюю линию
 
    Canva.drawing = false;
};
 
// Рисование в разгаре
Pencil.move = function(evnt)
{   
    Pencil.x = evnt.clientX;
    Pencil.y = evnt.clientY;
    Canva.ctx.lineTo(Pencil.x, Pencil.y); // Дорисовываем начатую линию
    Canva.ctx.stroke();
    // Начинаем рисованть новую линию из той же точки.
    Canva.ctx.moveTo(Pencil.x, Pencil.y); 
};
//-----------------------------------------------------------------
var Rectangle = {};
 
// Начинаем рисование
Rectangle.start = function(evnt)
{
    // Текущее положение мыши - начальные координаты
    Rectangle.x = evnt.clientX;
    Rectangle.y = evnt.clientY;
    
    //Canva.ctx.strokeRect(Rectangle.x, Rectangle.y,Rectangle.x, Rectangle.y);
  
    Canva.drawing = true; // Начато рисование
};
 
// Рисование закончили
Rectangle.finish = function(evnt)
{   
    Rectangle.x1 = evnt.clientX;
    Rectangle.y1 = evnt.clientY;
    
    Canva.ctx.strokeRect(Rectangle.x, Rectangle.y,Rectangle.x1 - Rectangle.x, Rectangle.y1 - Rectangle.y);
 
    Canva.drawing = false;
};
 
Rectangle.move = function(evnt)
{   
    Canva.ctx.clearRect(Rectangle.x, Rectangle.y,Rectangle.x2 - Rectangle.x, Rectangle.y2 - Rectangle.y);
    
    Rectangle.x1 = evnt.clientX;
    Rectangle.y1 = evnt.clientY;
    
    Canva.ctx.strokeRect(Rectangle.x, Rectangle.y,Rectangle.x1 - Rectangle.x, Rectangle.y1 - Rectangle.y);
    
    Rectangle.x2 = evnt.clientX;
    Rectangle.y2 = evnt.clientY;    
};

Также если возможно хотелось бы узнать как более правильно организовать такой редактор и какие ошибки есть в приведенном коде.
Ответить с цитированием