Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Линия прикрепленная к блоку, который можно перетягивать. (https://javascript.ru/forum/misc/32240-liniya-prikreplennaya-k-bloku-kotoryjj-mozhno-peretyagivat.html)

ozzon91 08.10.2012 21:30

Линия прикрепленная к блоку, который можно перетягивать.
 
Вот есть такой рисунок,


Представте, что блок А зафиксирован, а блоки В и С можно перетаскивать но вслед за ними джолжны двигаться и линии, линия не может растягиваться или сокращаться, поэтому блоки могут перетаскивться ограниченно, вокруг оси, которую описывает линия, тоесть как стрелки на часах.
Как это реализовать на JS, у меня только одна идея canavas, но хотелось бы без него.

Dmitriyff 09.10.2012 10:58

svg, flash, div+css3+rotate =-))

но думаю канвас самое лучшее,

блоки можно и так вывести, а нижним слоем положить канвас на котором только линии и отрисовывать.

Tek 09.10.2012 11:08

Я думаю можно реализовать данную проблему с использованием jquery ui draggable. Соединяющие линии выполнить в виде дивов при перетаскивании блоков вращать линии с помощью css3 свойства rotate.

Либо использовать векторную библиотеку raphaeljs
http://raphaeljs.com/graffle.html

dmitry111 09.10.2012 11:22

Joint js вам в помощь!

Maxmaxmахimus 09.10.2012 12:27

Цитата:

Сообщение от Dmitriyff
div+css3+rotate

лол

ozzon91 09.10.2012 14:27

смотрю пока в сторону
http://raphaeljs.com
и Joint js

Nekromancer 09.10.2012 14:37

Цитата:

canavas, но хотелось бы без него.
Раньше так писали про флеш и это ещё понятно было. Но в канвасе, что не устраивает?

melky 09.10.2012 14:48

Цитата:

Сообщение от Maxmaxmахimus
лол

тогда уж лучше SVG - ровно для таких фич он и приспособлен.

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

разницу трудно уловить, но она есть :)

хотя никто и не запрещает сделать это на канвасе.

dmitry111 09.10.2012 18:29

тут еще надо уточнять что будет в блоках?
Если буквы A,B,C :) то я бы выбрал canvas
если динамический график зарплат сотрудников (или еще что-нибудь в этом роде) то svg
Если разметка html - сделал бы на дивах

ozzon91 09.10.2012 20:40

Блин мне на флеше проще я канвас не разу не юзал.
В принципе уже почти доделал канвас оказался не таким страшным.
Выложу потом.

ozzon91 10.10.2012 04:35

Что то ребята у меня нифига не выходит.
Наделал всякой фигни, а то что нужно не выходит.
http://learn.alpaca.org.ua/canavas.html
http://learn.alpaca.org.ua/druag.html

Наталкните на мысль.

Dmitriyff 10.10.2012 09:47

ozzon91,
да вы не отрисовывайте все на канвасе, рисуйте только линии,

возьмите jquery ui dragable, там есть событие drag, вот на него повешайте обновление канваса

eirnvn 10.10.2012 10:11

Прикольные куранты))) Только :
1) В функции draw - попробуй, переставь местами
line(); и rect(x - 15, y - 15, 30, 30); Чтобы линия была под блоком
2) у меня хром твой фон не видит (http://learn.alpaca.org.ua/druag.html) - все белое, лучше поменять на нормальный цвет
И 2 глюка еще надо убрать. (чтбы блок не выходил за канвас и иногда мышка рисует без нажатия - у меня тоже такое было)

eirnvn 10.10.2012 11:32

Вопрос на самом деле в том, как сделать чтобы линии были жестко заданными.
Есть такой метод (подробностей не знаю, надо читать): http://www.w3.org/TR/2dcontext/#dom-...-ispointinpath
Возможно пригодится (если определить окружность, дальше которой линии не могут уходить и делать проверку).

ozzon91 10.10.2012 15:14

Цитата:

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

ozzon91 10.10.2012 15:26

Я исчерапал все идеи, опыта наверное маловато

ozzon91 10.10.2012 15:43

Цитата:

да вы не отрисовывайте все на канвасе, рисуйте только линии,

возьмите jquery ui dragable, там есть событие drag, вот на него повешайте обновление канваса
И как же сделать на jquery ui dragable что бы блок драгабился по определенной траектории

Dmitriyff 10.10.2012 22:21

вот держите вариант

ozzon91 10.10.2012 23:00

Благодарю, вы очень помогли

ozzon91 11.10.2012 00:05

Dmitriyff, не могли бы вы расставить комментарии по js коду вашего примера.

Dmitriyff 11.10.2012 08:40

ozzon91,
вуаля =-)))

даже чуть улучшил =-)))

ozzon91 11.10.2012 16:55

супер, благодарю, буду ковырять.

Dmitriyff 12.10.2012 08:03

ozzon91,
будут вопросы пишите =-)

ozzon91 12.10.2012 11:52

Подгоняю под свои нужды, не выходит перенести все это гамузом в центр страницы т. к . центр вращения остается на прежнем месте,
вот http://learn.alpaca.org.ua/exemple.html как это решить?
и еще мне были нужны две независимые линии, пришлось продублирывать muve и dovn, думаю плохое решение.

ozzon91 12.10.2012 12:02

Ди еще не могу сделать чтобы при перетаскивании центрального блока все перетаскивалось за ним.

eirnvn 12.10.2012 15:55

А как у тебя сделано, так , что код не посмотреть?

eirnvn 12.10.2012 15:57

В Хроме не показывает, в FF открылось.

ozzon91 12.10.2012 16:12

Цитата:

Сообщение от eirnvn
А как у тебя сделано, так , что код не посмотреть?

Ничего не делал


Dmitriyff, оставте пожалуйсто свои контакты в ЛС, очень нужна помощь по данному вопросу.

Dmitriyff 12.10.2012 16:51

новая версия

eirnvn 12.10.2012 17:17

var x = e.clientX - CENTER-400 сделай в каждом move
margin-left то есть

ozzon91 12.10.2012 17:22

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

eirnvn 12.10.2012 17:24

Странно, что не помогло - у меня работает, а решении тоже самое - offset.left == 400

eirnvn 12.10.2012 17:27

Я про принцип, offset конечно намного лучше, чем цифра

ozzon91 12.10.2012 20:50

ну в принцыпе я сделал с офсетом


Часовой пояс GMT +3, время: 11:05.