Raphael.js как установить атрибут для пути?

#javascript #raphael

#javascript #рафаэль

Вопрос:

В Raphael.js Если у меня есть объект path, я хотел бы сбросить атрибут, как это сделать?

 myPath.attr('M', VALUE_FOR_M)
      .attr('L', VALUE_FOR_L);
  

кажется, не работает…

Комментарии:

1. @Joachim, почему я не должен так думать???? Конечно, я знаю, что Raphael — это не jQuery. Рафаэль также предоставляет метод attr () для установки атрибута для элемента. Если вы проверите документацию Raphael на его официальном сайте. raphaeljs.com/reference.html#attr

2. Однако чтение связанной документации показывает, что M или L не указаны в возможных параметрах.

3. Да, вот почему я спрашиваю здесь, как установить атрибут для пути, поскольку для этого нет ссылки.

4. насколько я понимаю, M и L не являются атрибутами пути, они просто элементы, которые могут существовать в его спецификации. Они также могут существовать несколько раз , поэтому «изменение их значения» на самом деле не имеет большого смысла. Не могли бы вы опубликовать пример того, чего вы пытаетесь достичь?

Ответ №1:

вы делаете это следующим образом:

 var newPath = ["M", VALUE_FOR_M_X, VALUE_FOR_M_Y, 
               "L", VALUE_FOR_L_X, VALUE_FOR_L_Y];

myPath.attr({ path : newPath });
  

newPath — это строка пути (см. Формат строки пути SVG)

Комментарии:

1. Это кажется лучшим решением, вы не теряете никаких других атрибутов, которые были сохранены в path при его создании.

2. Вы действительно можете просто использовать массив таким образом? Или вам нужно .join(' ') использовать его для создания строки?

3. @TimErickson Оба преобразуются в строку. Разница только в том, что неявное приведение приведет к строке значения, разделенной запятой, а ваше решение — к строке значения, разделенной пробелом. «M,1,1,L,1,1» против «M 1 1 L 1 1 1»

Ответ №2:

Чтобы создать путь, я предпочитаю,

 var myPath = paper.path(['M', M_VAL0, M_VAL1, 
                         'L', L_VAL0, L_VAL1].join(' '));
myPath.insertAfter(nodewhatever);
  

Это значительно упрощает отслеживание ваших действий.

чтобы обновить свой путь,

 myPath.remove();
myPath = paper.path(['M', M_VAL2, M_VAL3, 
                     'L', L_VAL2, L_VAL3].join(' '));
myPath.insertAfter(nodewhatever);
  

Это то, что вы хотели сделать?