#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);
Это то, что вы хотели сделать?