2016-04-09 3 views
0

Я делаю веб-интерактивный тест для музыкантов, и вы застряли, ну, интерактивность.Протяните и поверните определенную часть изображения SVG

Пользователи должны перемещать заметки на ноге и настраивать их. SVG-штрихи отображаются в виде заметок с отдельным родительским контейнером div для каждой заметки. Родительский div перетаскивается в stave, а затем может быть изменен (я использую jQuery UI для этого, с параметром «handle», установленным в «e», поэтому div можно изменить только вправо). После этого момента я не могу понять, как правильно изменить размер заметки SVG внутри, потому что то, что нужно изменить, - это не весь SVG, а только одна часть.

SVGs выглядеть следующим образом:

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="32" viewBox="0 0 24 32" class="svgnote" preserveAspectRatio="none"> 
 
    <path d="M0 23.703q0-0.922 0.672-1.797 0.313-0.344 0.766-0.711t1-0.727q0.531-0.25 1.031-0.359t0.953-0.109q0.953 0 1.688 0.531v-17.344h13.578v18.797q0 0.953-0.641 1.781-0.641 0.875-1.703 1.352t-2.047 0.477q-0.859 0-1.563-0.516t-0.703-1.375q0-0.984 0.703-1.797 0.609-0.797 1.719-1.438 0.578-0.25 1.055-0.359t0.93-0.109q0.969 0 1.703 0.531v-15.188h-12.484v16.641q0 0.953-0.641 1.781-0.641 0.875-1.695 1.352t-2.055 0.477q-0.891 0-1.594-0.516-0.672-0.516-0.672-1.375z"></path> 
 
</svg>

Picture example Я добавил фотографию, где выше красной фигура

  1. это начальное состояние записки;

  2. верхняя красная стрелка указывает на линию, которая является единственной частью svg, которая должна растягиваться вправо. нижние красные стрелки в сторону - примечание должно (как-то?) Поворачиваться вверх и вниз, чтобы сделать 3-е состояние возможным

  3. - это то, что окончательное состояние примечания я ищу.

То, что я сделал: за исключением чрезмерного Googling, не так много. Я попытался установить «ширину» изображения SVG на «100%» родительского div и добавить preserveAspectRatio = «none», но все, что я получил, - уродливое растянутое примечание. Что касается вращения, у меня нет ни единой идеи, с чего мне начать.
Я был бы бесконечно благодарен, если бы кто-то указывал, что мне делать, или, может быть, библиотеку, которую я должен использовать. Я чувствую, что решение этого близко где-то, я просто пропустил его из-за моего очень ограниченного опыта в этой области. Спасибо всем.

+0

preserveAspectRatio ничего не делает без Viewbox –

+0

Вам нужно 3 '<путь ...' для этой работы. Автономная записка x2 и соединительная панель. Не пытайтесь растягиваться, выглядит очень плохо. Вместо этого используйте javascript, чтобы переместить заметку и обновить соединительную панель. –

ответ

0

Вот 10-минутный взлом. Соединительная панель требует больше работы, но в основе используется набор <symbol> для ваших музыкальных нот и лучший путь (например: полигон?) Для соединительной панели.

<svg xmlns="http://www.w3.org/2000/svg"> 
 
    
 
    <symbol id="note-1" viewBox="0 0 313 340"> 
 
<g xmlns="http://www.w3.org/2000/svg" transform="matrix(-1,0,0,-1,313,340)" id="g11029"> 
 
    <path d="M 303.13715,299.65106 C 299.74131,301.47103 297.93187,304.76561 299.04493,307.24402 C 300.23219,309.88766 304.31194,310.63374 308.15151,308.90939 C 311.99107,307.18503 314.14367,303.63999 312.95641,300.99636 C 311.76914,298.35272 307.6894,297.60664 303.84983,299.33099 C 303.60986,299.43876 303.36355,299.52973 303.13715,299.65106 z " style="opacity:0.9;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.2;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" id="path11031"/> 
 
    <path d="M 299.50465,305.98445 L 299.50465,339.57202" style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path11033"/> 
 
    </g> 
 
    </symbol> 
 
    
 
    <g class="first" transform="translate(0,20)"> 
 
    <use xlink:href="#note-1" /> 
 
    </g> 
 
    <g class="second" transform="translate(30,10)"> 
 
    <use xlink:href="#note-1" /> 
 
    </g> 
 
    <path stroke-width="4" stroke="black" d="M87,20 L117,10"></path> 
 
    
 
    
 
</svg>

Смежные вопросы