Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   JavaScript Paint (https://javascript.ru/forum/project/8415-javascript-paint.html)

Ilyan 24.03.2010 13:40

JavaScript Paint
 
Доделал JavaScript Paint для несложного редактирования изображений. Много чего не хватает (особенно контрл+зед), но все жизненоважное присутствует :) Поиграться можно тут.

Круг, эллипс, квадрат, прямоугольник, кисть, надпись (в т.ч. ссылки), "картинка в картинке", пока все. За ядро взята вот эта библиотека. Вначале думал, что библиотка канвасовская, но потом узрел, что рисует она чистым DOM, тоесть по-настощему true :)

Kolyaj 24.03.2010 13:49

Цитата:

Сообщение от Ilyan
тоесть по-настощему true

Что трушного в куче дивов?

Ilyan 24.03.2010 13:58

Цитата:

Сообщение от Kolyaj (Сообщение 48885)
Что трушного в куче дивов?

Трувеб. Paint - точечный рисунок. Каждая точка в данном случае - элемент страницы, а не вектор. Туда можно поместить любой элемент html (ссылка, картинка, даже другой скрипт или событие при наведении на точку).

Kolyaj 24.03.2010 13:59

Тру -- это SVG, а дивы -- костыль.

Ilyan 24.03.2010 14:18

Не вникал в SVG, спорить не буду. Элементам svg можно присваивать innerHTML, присваивать события типа element.onclick = function() {}?

Kolyaj 24.03.2010 14:32

Цитата:

Сообщение от Ilyan
можно присваивать innerHTML

Какому из дивов, образующих эллипс, вы будете присваивать innerHTML?

Ilyan 24.03.2010 14:38

Цитата:

Сообщение от Kolyaj (Сообщение 48901)
Какому из дивов, образующих эллипс, вы будете присваивать innerHTML?

Эллипс - дети (набор дивов) родительского дива. Для каждой фигуры создается отдельный див, в т.ч. для линии кисти, уже в этом диве рисуется то, что надо.

---
innerHTML я привел для примера, основная сила дома - в событиях. По клику на эллипсе можно перекрашивать этот эллипс например или менять координаты положения.

Ilyan 24.03.2010 15:20

Цитата:

Сообщение от Ilyan
Много чего не хватает (особенно контрл+зед)

Добавил "отмену".

subzey 24.03.2010 16:48

Цитата:

Сообщение от Ilyan
Элементам svg можно присваивать innerHTML, присваивать события типа element.onclick = function() {}?

Насчет innerHTML не уверен, но .setAttribute() и .appendChild() вполне себе работают.

События вешать — да, можно. И css. И бесскриптовую анимацию.

Ilyan 24.03.2010 17:09

subzey, спасибо, тогда и это намного интереснее, чем я думал, пойду изучать :) Значит, единственный недостаток свг - кроссбраузерность?

Kolyaj 24.03.2010 17:11

Есть vml для IE. Или не мучаясь http://raphaeljs.com/

Ilyan 24.03.2010 17:33

Спасибо, обязательно поэксперементирую. Если понравится - перепишу :)

Octane 24.03.2010 17:38

http://mugtug.com/sketchpad/
;)

Ilyan 24.03.2010 18:15

Цитата:

Сообщение от Octane (Сообщение 48942)

Круто :) Только чувак не стал решать проблему зернистости, просто сделал огромный размер кисти :)

Octane 24.03.2010 18:42

Там все настраивается

PepeL 25.03.2010 13:24

innerHTML в SVG не работает, и еще keyCode не работает вроде как )
Ilyan, просто svg по разному вставляется в html... а писать прямо в документе можно вроде только в firefox, и то если у документа стоит расширение xhtml.
На мой взгляд лучше использовать сочетание canvas и vml.

subzey 25.03.2010 14:03

Canvas (англ. «холст») — изображение, содержимое каждого пикселя которого контролируется яваскриптом.

Растровый графический редактор — приложение, которое контролирет каждый пиксель рабочей области.

По-моему, целесообразность использования canvas для растрового графредактора очевидна. :)

Ilyan 25.03.2010 14:07

Ковырял, ковырял это svg, наковырял до того, что получилось трансформировать и перемещать фигуры по клику, получилось создать новую фигуру по тому же клику по другой фигуре. А вот onmousedown и onmousemove ну никак не хочет работать у меня, получить координаты курсора тоже не удается. И браузеры не выдают ошибок text/ecmascript. Как-то неинтересно становится без результатов :)

Ilyan 17.05.2010 09:48

Переделал на SVG.
IE пока в топку :)


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