Нарисуйте несколько прямоугольников с svg.draw.js - PullRequest
1 голос
/ 05 апреля 2019

Проблема уже была размещена здесь , но я думаю, что она никогда не решалась. Мне нужно создавать новый прямоугольник каждый раз, когда я нажимаю кнопку «Создать SVG Rect». Отсюда рисуем несколько прямоугольников.

<!DOCTYPE html>
<html lang="en">
<head><style>#test_slide { width: 500px; height: 500px; cursor: crosshair;border: solid;}</style></head><body>
<div id="test_slide"></div>
<button id="create_svg_rect" >Create SVG Rect</button>

<!--SCRIPT FILES-->
<script src="https://code.jquery.com/jquery-3.3.1.min.js"  defer="defer"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/svg.js/2.7.1/svg.min.js" type="text/javascript" defer="defer"></script>
<script src="https://svgjs.com/svg.draw.js/demo/svg.draw.min.js" type="text/javascript" defer="defer"></script>
<script>
document.getElementById("create_svg_rect").onclick = function() {
    //SVG.on(document, 'DOMContentLoaded', function() {
        var drawing = new SVG('test_slide').size('100%', '100%');
        var rect = drawing.rect().attr('stroke-width',1).attr('fill','none');
        drawing.on('mousedown', function(e){
            rect.draw(e);
        }, false);

        drawing.on('mouseup', function(e){
            rect.draw('stop', e);
            console.log(rect.svg());
            return;
        }, false);
    //});

};
</script>
</body></html>

1 Ответ

3 голосов
/ 05 апреля 2019

В своем коде вы создавали совершенно новый рисунок и слушателей каждый раз, когда вы нажимаете на кнопку. Это не то, что вы хотите.

Вместо этого просто создайте один рисунок (<svg>) и прикрепите к нему слушателей.

Клик по кнопке должен создать новый прямоугольник.

Чтобы получить доступ к rect-var в слушателях, мы должны определить его во внешней области видимости. При нажатии мы создаем новый прямоугольник и сохраняем его. На mousedown мы начинаем рисовать и на mouseup мы заканчиваем.

Вот рабочий фрагмент:

document.addEventListener('DOMContentLoaded',() => {

  let rect, drawing = new SVG('test_slide').size('100%', '100%');

  drawing.on('mousedown', function(e){
     rect && rect.draw(e);
  });

  drawing.on('mouseup', function(e){
    if (rect) {
      rect.draw('stop', e);
      console.log(rect.svg());
      rect = null;
    } 
  });

  document.getElementById("create_svg_rect").addEventListener('click', function() {
    rect = drawing.rect().attr('stroke-width',1).attr('fill','none');
  });

})
#test_slide { width: 500px; height: 160px; cursor: crosshair;border: solid;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/svg.js/2.7.1/svg.min.js" type="text/javascript"></script>
<script src="https://svgjs.com/svg.draw.js/demo/svg.draw.min.js" type="text/javascript"></script>

<div id="test_slide"></div>
<button id="create_svg_rect" >Create SVG Rect</button>

Поскольку ваш код не использовал jquery, я удалил его из фрагмента.

...