【问题标题】:Draw multiple Rectangles with svg.draw.js使用 svg.draw.js 绘制多个矩形
【发布时间】:2019-08-27 01:09:43
【问题描述】:

这个问题已经发布在here,但我认为从未得到解决。每次单击“创建 SVG 矩形”按钮时,我都需要创建一个新矩形。因此绘制多个矩形。

<!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.dev/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>

【问题讨论】:

    标签: javascript svg svg.js


    【解决方案1】:

    在您的代码中,您每次单击按钮时都会创建一个全新的绘图和侦听器。那不是你想要的。

    相反,只需创建一个绘图 (&lt;svg&gt;) 并将侦听器附加到它。

    点击按钮只需要创建一个新的矩形。

    为了能够在监听器中访问 rect-var,我们必须在外部范围内定义它。单击时,我们创建一个新矩形并保存它。在 mousedown 时开始绘制,在 mouseup 时结束。

    这里正在运行 sn-p:

    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.dev/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,我将其从 sn-p 中删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多