2017-02-08 11 views
0

Этот код SVG отображает стрелку в Firefox и хром, но не работает в интернет-проводник 11:SVG-маркеры сломаны в Internet Explorer?

<svg viewBox="0 0 100 100"> 

    <defs> 
     <marker id="arrow" markerWidth="5" markerHeight="6" refx="5" refy="2" orient="auto"> 
     <path d="M0,0 L0,4 L5,2.5 L5,1.5 L0,0" style="fill:red;" ></path> 
     </marker> 
    </defs> 

    <path d="M0,0 L50,50" 
     style="stroke:red; stroke-width: 10px; fill: none; 
      marker-end: url(#arrow);" 
    ></path> 

    </svg> 

Смотрите сами на https://jsfiddle.net/ns3qfau5/6/

+0

педантизм комментарий: Ваш маркер цит не имеет идентификатора, поэтому я удивлен, что это работает.>. <... jsfiddle делает –

+0

Спасибо @OwenBeresford - исправлено сейчас. Я закончил с помощью http://jsplumbtoolkit.com/ btw ... –

ответ

3

Добавить инсульт: нет; в экскурсионном стиле путь:..

<svg viewBox="0 0 100 100"> 
    <defs> 
     <marker id="arrow" markerWidth="5" markerHeight="6" refx="5" refy="2" orient="auto"> 
      <path d="M0,0 L0,4 L5,2.5 L5,1.5 L0,0" style="fill:red; stroke: none;" ></path> 
     </marker> 
    </defs> 

    <path d="M0,0 L50,50" 
      style="stroke:red; stroke-width: 10px; fill: none; 
       marker-end: url(#arrow);" 
    ></path> 
</svg> 

Он работает в IE-11

+1

Это правильный ответ! По словам Dev Console, он работает даже до 9. Спасибо Сергий! –

+0

Без проблем швейцарский. –

1

IE имеет баг, когда он не поддерживает маркеры, определяются с помощью markerUnits="strokeWidth". Он всегда был, и он не фиксировался до Edge. Это настоящая боль, потому что «strokeWidth» является значением по умолчанию для атрибута markerUnits.

Фактически поддержка IE-маркеров в целом довольно плохая. Существуют и другие ошибки с маркерами (например, см. Ниже).

Единственным обходным путем является использование markerUnits="userSpaceOnUse". Чтобы преобразовать ваше конкретное определение маркера в эту форму, вам нужно умножить все значения маркера на 10, потому что это ширина штриха вашей линии.

<svg viewBox="0 0 100 100"> 
 

 
    <defs> 
 
    <marker id="arrow" markerWidth="50" markerHeight="60" refx="50" refy="20" orient="auto" markerUnits="userSpaceOnUse"> 
 
     <path d="M0,0 L0,40 L50,25 L50,15 L0,0" style="fill:red;" ></path> 
 
    </marker> 
 
    </defs> 
 

 
    <path d="M0,0 L50,50" 
 
     style="stroke:red; stroke-width: 10px; fill: none; 
 
       marker-end: url(#arrow);" 
 
    ></path> 
 

 
</svg>

Даже конвертированы, маркер еще не является совершенным - что это то, что я имел в виду других ошибок маркеров в IE. :(

+0

Спасибо, Пол! Вы правы - это Однако я не настолько разборчив в отношении реализации этой стрелки: есть ли лучший способ, чем эта «маркерная» функция? Я не являюсь эксперт по SVG. Я просто хочу прямую стрелу, с которой я могу легко манипулировать с помощью javascript. Любое предложение приветствуется! –

+0

Маркеры - это очевидный путь. Но у вас также есть возможность просто добавить стрелку. –

+0

Я знаю, что это будет отдельный вопрос, и я не уверен, как это сказать: возможно ли параметризовать SVG-установку (т. Е. Без маркера), а затем дать две координаты для начала и конца? –