Как изменить размер изображения тега SVG с помощью пользовательского интерфейса jQuery? - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть изображение SVG, подобное тегу ниже в div

<div id="MainDiv">
 <div id="annotationText">
    <svg id="circle" width="50" height="50">
  <circle cx="25" cy="25" r="20" stroke="green" stroke-width="4" fill="yellow" fill-opacity="0.0"/>
</svg>
</div>
</div>

Я делаю перетаскиваемый и изменяемый размер.Draggable работает, как сделать его изменяемого размера, я пытался, но он не работает.

makeDragableCircle('#annotationText',jQuery('#MainDiv'));




 function makeDragableCircle(selector,obj){
    var height=obj.height();
    var width=obj.width();
    var objdiv=jQuery( selector );
      jQuery( selector ).draggable({      
          containment: obj,
          drag: function( event, ui ) { 
          var cleft=ui.position.left*100/width;
          var top=ui.position.top*100/height;
          jQuery(event.target).attr('data-offsetx',cleft);
          jQuery(event.target).attr('data-offsety',top);

          }

      }).resizable({
         alsoResize: "#"+circle,
          aspectRatio: 1.0
      });

    }

1 Ответ

0 голосов
/ 18 декабря 2018

Как я уже упоминал в своем комментарии, изменяемый размер предназначен для блочных моделей, таких как <div> или <span>.Вы можете использовать его в элементе <svg>, но он будет обрабатывать его как элемент HTML.

Если вы хотите использовать его для манипулирования стриктурой объекта SVG, вам нужно свернуть свой собственныйнемного.

$(function() {
  function makeDragableCircle(selector, obj) {
    var height = obj.height();
    var width = obj.width();
    var objdiv = $(selector);
    var circle = $("#circle", objdiv);
    $(selector).draggable({
      containment: obj,
      drag: function(event, ui) {
        var cleft = ui.position.left * 100 / width;
        var top = ui.position.top * 100 / height;
        $(event.target).attr('data-offsetx', cleft);
        $(event.target).attr('data-offsety', top);
      }
    }).resizable({
      aspectRatio: 1.0,
      containment: obj,
      minWidth: 40,
      minHeight: 40,
      resize: function(e, ui) {
        circle.attr({
          width: ui.size.width,
          height: ui.size.height
        });
        $("circle", circle).attr({
          cx: Math.round(ui.size.width / 2) - 2,
          cy: Math.round(ui.size.height / 2) - 2,
          r: Math.round(ui.size.width / 2) - 4
        });
      }
    });
  }

  makeDragableCircle('#annotationText', $('#mainDiv'));

});
#mainDiv {
  width: 400px;
  height: 200px;
  border: 1px dashed #eee;
}
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div id="mainDiv">
  <div id="annotationText">
    <svg id="circle" width="50" height="50">
      <circle cx="25" cy="25" r="20" stroke="green" stroke-width="4" fill="yellow" fill-opacity="0.0" />
    </svg>
  </div>
</div>

Как видите, при перетаскивании все движется.При изменении размера мы корректируем размер SVG и настраиваем свойства <circle>.

Надежда, которая помогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...