#svg.js
#svg.js
Вопрос:
Я знаю, что могу получить его с помощью функции width или size, но я пытаюсь сделать это в момент создания перетаскиваемого объекта.
Я делаю это, потому что мне нужно придать элементу эффект сетки, а также заставить его оставаться внутри области рисования.
Вот что-то похожее на то, что я пытаюсь сделать:
square = draw.rect(size, size).x(x).y(y).draggable(function(x, y){
var xend = x - x % size;
var yend = y - y % size;
if(xend < 0)
xend = 0;
if(yend < 0)
yend = 0;
if(xend > 1000)
xend = 1000 - width*;
return { x: xend, y: yend }
});
Переменная с * — это то, что я хочу получить.
Также было бы здорово знать, как разрешить svg.js элементы взаимодействуют с jquery, но я думаю, это уже другой вопрос.
Редактировать: Ну, теперь на самом деле мне нужен доступ к другим свойствам элемента, если я не могу сделать это из перетаскиваемого элемента, я думаю, мне следует поискать другой способ сделать его перетаскиваемым? : ( пожалуйста, помогите!
Комментарии:
1. Ну, я, наконец, сделал это. Я использовал функцию SVG.get() . Позже я прокомментирую ответ, чтобы показать, как это можно сделать.
2. Вы можете просто использовать square.box().width в функции. Если ширина не изменяется, вы должны кэшировать ее для повышения производительности. Использование SVG.get заключается в том, что ситуация далека от оптимальной с точки зрения производительности.
3. К сожалению, нет, javascript просто выдает square.box не является функцией
4. Извините, это должно быть square.bbox() . Я путешествую и пишу на своем мобильном телефоне.
Ответ №1:
Решение (как сказал Нильс), например, использовать функцию square.bbox:
square = draw.rect(size, size).x(x).y(y).draggable(function(x, y){
var xend = x - x % size;
var yend = y - y % size;
if(xend < 0)
xend = 0;
if(yend < 0)
yend = 0;
if(xend > 1000)
xend = 1000 - square.bbox().width;
return { x: xend, y: yend }
});
Кроме того, если вы хотите получить доступ к элементу позже, вы можете назначить идентификатор с помощью метода square.attr(‘id’,‘id_name’) и вызвать с помощью метода SVG.get(‘id_name’).
Ответ №2:
Вас может заинтересовать тот факт, что обратный вызов перетаскиваемой функции вызывается в области самого элемента. Кроме того, здесь нет необходимости использовать bbox, потому что ширина сохраняется как атрибут в элементе.
Таким образом, решение было бы:
square = draw.rect(size, size).x(x).y(y).draggable(function(x, y){
var xend = x - x % size;
var yend = y - y % size;
if(xend < 0)
xend = 0;
if(yend < 0)
yend = 0;
if(xend > 1000)
xend = 1000 - this.attr('width')
return { x: xend, y: yend }
});
Кстати: Почему вы ищете ширину и используете размер несколькими строками выше? Это то же значение, потому что вы просто устанавливаете ширину в размер