【问题标题】:Snap SVG - Moving a loaded element aroundSnap SVG - 移动加载的元素
【发布时间】:2014-02-19 16:07:42
【问题描述】:

我正在尝试使用Snap SVG library 在屏幕上移动 SVG 图形中的元素。这是元素的代码:

<g id="butterfly">
  <path id="wings" fill="#FFFFFF" stroke="#CFEA90" stroke-width="4" stroke-miterlimit="10" d="M139.741,74.038c-5.847-1.477-11.794,1.029-14.605,5.736c-0.463-5.791-5.095-10.963-11.275-12.115c-7.017-1.309-13.365,3.059-14.179,9.755c-0.654,5.381,2.469,10.622,7.36,13.155c-0.143,0.146-0.28,0.284-0.403,0.402c-3.157,3.055-2.81,7.082,0.777,8.994c3.586,1.912,9.053,0.985,12.211-2.071c0.836-0.809,1.773-2.517,2.632-4.62c-0.068,2.586,0.13,4.835,0.632,6.038c1.724,4.127,6.377,7.274,10.394,7.031c4.017-0.244,5.876-3.786,4.152-7.913c-0.067-0.16-0.14-0.343-0.215-0.538c5.45-0.264,10.315-3.753,11.775-8.957C150.814,82.459,146.669,75.79,139.741,74.038z"/>
  <path id="body" fill="#97BD40" d="M123.467,99.008c-0.3,1.287-1.587,2.086-2.873,1.786l0,0c-1.287-0.3-2.086-1.587-1.786-2.873l5.159-22.099c0.3-1.287,1.587-2.086,2.873-1.786l0,0c1.287,0.3,2.086,1.587,1.786,2.873L123.467,99.008z"/>
</g>

我想在屏幕上移动这个元素(例如,我想将它向上移动然后向左然后再次向下移动到初始位置),所以我首先创建一个 canvas 并获取元素。我使用此代码:

var canvas = Snap("div#canvas");

Snap.load("MyImage.svg", function (image) {

    var butterfly = image.select("g#butterfly");    
    canvas3.append(butterfly);

    // Now I want to move the element around...
}

有人有想法吗?

我找到了有关移动圆形或矩形的信息,它们具有 xycx 等属性cy 很容易修改,但就我而言,我没有这些属性...

【问题讨论】:

    标签: svg snap.svg


    【解决方案1】:

    Set a transform 在蝴蝶上。你想要一个平移变换来移动它。例如

    butterfly.transform("t100,100");
    

    那个syntax和拉斐尔是一样的。但你也可以使用Snap matrix

    var t = new Snap.Matrix()
    t.translate(100, 100);
    butterfly.transform(t); 
    

    【讨论】:

    • butterfly.transform("t100,100"); 100 之前的 t 在这里做什么?
    • t = 翻译 = 移动 x,y
    • 这对我来说真的很糟糕,我怎么能简单地设置x=1,y=1?
    • 如果您有问题,您应该使用按钮来提问。
    【解决方案2】:

    SVG 变换属性将变换列表应用于元素及其子元素(这里有一个非常好的教程:https://www.dashingd3js.com/svg-group-element-and-d3js)。您可以使用不同类型的转换;例如,正如 Totty 所要求的,要移动到 x=1 和 y=1,您可以使用

    myElement.setAttribute('transform','translate(30,100)');
    

    有关此答案的更多信息:How to manipulate translate transforms on a SVG element with javascript in chrome?。阅读更多内容后,您会发现您甚至可以通过 Snap 轻松使用动画:

    myElement.animate({ transform:'translate(30,100)'}, 700, mina.bounce );
    

    【讨论】:

      【解决方案3】:

      也许你可以试试

      butterfly.drag()
      

      【讨论】:

        猜你喜欢
        • 2015-04-23
        • 2015-01-13
        • 1970-01-01
        • 2017-02-10
        • 2015-10-03
        • 2013-12-05
        • 1970-01-01
        • 2013-06-19
        • 1970-01-01
        相关资源
        最近更新 更多