В своем коде вы создавали совершенно новый рисунок и слушателей каждый раз, когда вы нажимаете на кнопку. Это не то, что вы хотите.
Вместо этого просто создайте один рисунок (<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, я удалил его из фрагмента.