2017-01-12 23 views
1

Я пытаюсь создать бесконечный цикл анимации круга SVG.Странное поведение свойства dasharray в круге SVG

Я хочу создать 12 равных частей и разделить их на некоторый промежуток.

Чтобы вычислить значение круга штук я использовал к коэффициент из таблицы ниже Так что я сделал 0,25782 * 160 (диаметр моего круга), и я получил: 41.2512 (это должно быть значение моих частей) ,

После этого я создал StrokeDashArray пропеллер с помощью этого значения: 40 1,2512 Я подумал, что это должно быть правильное значение.

Похоже, что это было, но когда я сменил strokedashOffset prop Я увидел несколько артефактов с правой стороны. Я не знаю, почему это произошло и как я могу это исправить (и где я сделал ошибку)?

Спасибо за любую помощь.

Демо здесь (просто измените strokedashOffset на значение 408, и вы увидите эту проблему).

https://jsfiddle.net/q8enje9o/

Вот мой чистый код SVG

<svg version="1.1" id="svgout_dasharray" baseProfile="full" width="500" 

height="500" viewBox="0, 0, 500, 500" xmlns="http://www.w3.org/2000/svg" style="border: 1px solid black"> 

<defs></defs> 

<circle cx="150" cy="150" r="80" fill="none" stroke="#ff0000" style="stroke-width: 30;stroke-dasharray: 40, 1.2512;stroke-dashoffset: 380;"></circle> 
</svg> 

Таблица к коэф. п - количество круглых кусочков

enter image description here

Вот формула, как вы можете рассчитать этот коэф. сам по себе

п - Количество деталей

360 - 2 * PI (целая окружность)

к - наш коэффициент. что мы хотим найти

enter image description here

P.S. Вот демо с проблемой после обновления (Chrome последней & для Windows 10) enter image description here

+0

Вы не объясняют, как в таблице значения рассчитаны таким образом, что это сложно комментировать, почему они могут быть ошибочными. –

ответ

3

Ваш вопрос немного запутан, потому что вы много говорите о том, как вы вычисляете массив тире, но жалуетесь на вещи, выглядящие забавно, когда вы меняете смещение тире.

Окружность круга 2 * PI * радиус.Если вы хотите п разделов в окружности, то «тир + пробел» в вашем тире массиве нужно подвести к:

(2 * PI * radius)/n 

так для 12 секторов, и радиус 80, то значение будет

(2 * PI * 80)/12 = 41.8879 

Как сказал Роберт, «stroke-dashoffset =« 40 1.8879 »должен работать. И действительно, так оно и есть.

<svg width="500" height="500" style="border: 1px solid black"> 
 
    <circle cx="150" cy="150" r="80" fill="none" stroke="#ff0000" 
 
      style="stroke-width: 30;stroke-dasharray: 40 1.8879;"/> 
 
</svg>

Теперь вы также говорите о тире смещения. Я не знаю, почему вы хотите изменить смещение тире. Наверное, вы пытаетесь заставить тире вращаться вокруг окружности чего-то. Это правильно?

Если это так, то это должно работать - до тех пор, пока вы точны с вашими значениями массива тире. Смотри ниже.

<svg width="500" height="500" style="border: 1px solid black"> 
 
    <circle cx="150" cy="150" r="80" fill="none" stroke="#ff0000" 
 
      style="stroke-width: 30;stroke-dasharray: 40 1.8879; stroke-dashoffset: 408;"/> 
 
</svg>

+0

Привет, Пол! Спасибо за ответ. Да, вы абсолютно правы. Я изменяю dashoffset для достижения анимации вращения. Я рассказываю о вычислении круга, потому что я думал, что я сделал некоторую проблему в вычислении круговых фигур – Velidan

+0

Я приложил демо с проблемой, которую я получил после обновления svg с фактическими значениями массива dashh. Я не понимаю, почему он появляется. – Velidan

+0

Причина этого заключается в том, что именно там, где штриховка на круге всегда начинается (и заканчивается). Из-за этой границы будет обнаружена какая-либо небольшая разница в округлении между одним пикселом и следующей. С зазором шаблона <2 пикселя вам не с чем поиграть. На самом деле вы ничего не можете с этим поделать - иначе, чем сделать ваш шаблон более крупным, чтобы он был менее очевидным. –

4

Окружность окружности/суммы значений штриха-dasharray должна быть целым числом, если вы хотите, равномерно расположенные линии, и это ISN» т в вашем случае.

Таким образом, вы, вероятно, хотите что-то вроде инсульта-дашаррая: 40, 1.8879; который должен работать с любым значением удара-dashoffset.

+0

Спасибо за ответ Роберт! Я обновил свою скрипку, но она также не работает правильно (это лучше, чем мой вариант, но также не идеально). Когда вы пытаетесь изменить stroke-dashoffset: до 418 вы увидите небольшую проблему. https://jsfiddle.net/3Ltx65xe/1/ – Velidan

+0

Работает отлично для меня в Firefox на Mac и в Chrome на Windows. –

+0

Я добавил демо в свой пост, я не знаю почему, но это = \ – Velidan

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

  • Нет связанных вопросов^_^