Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.07.2013, 15:09
Интересующийся
Отправить личное сообщение для Flaker Посмотреть профиль Найти все сообщения от Flaker
 
Регистрация: 26.12.2012
Сообщений: 11

Работа с изображениями в JS
Суть: Делаю каркас человека, в котором есть элементы, сделанные картинками.
Элементы - это: две ноги, две руки, тело, шея, голова.
Сами картинки белые, но при отображении на странице, элементы должны быть покрашены в цвет, от зеленого до красного, в зависимости от указанных параметров...
При наведении курсора на элемент ( Учитывая коллизии, а не просто прямоугольник ), элемент должен обводиться по контуру.

Как такое реализовать наилучшим образом, используя JS ( Jquery имеется. )?
Ответить с цитированием
  #2 (permalink)  
Старый 03.07.2013, 15:13
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

http://beej.us/blog/data/html5s-canvas-2-pixel/
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #3 (permalink)  
Старый 03.07.2013, 15:22
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Лучше всего тут подойдет SVG
Сообщение от Flaker
Jquery имеется.
Да ладно? Где взял? ДЕЛИСЬ!!!
Ответить с цитированием
  #4 (permalink)  
Старый 03.07.2013, 15:32
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

Не, ну раз уж на то пошла, то и на дивах здесь можно, если сильно захотеть
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #5 (permalink)  
Старый 03.07.2013, 16:01
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Nekromancer
Не, ну раз уж на то пошла, то и на дивах здесь можно, если сильно захотеть
А на svg можно сделать если совсем чуть-чуть захотеть.
Ответить с цитированием
  #6 (permalink)  
Старый 03.07.2013, 16:25
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

<!DOCTYPE html>
<svg id="image" width="640" height="320" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
	<style>
		.human *:hover{
			stroke: #ff0000;
		}
	</style>
	<!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
	<g class="human">
		<circle id="svg_1" r="37.735924" cy="76" cx="291" stroke-width="5" stroke="#000000" fill="#ffffff"/>
		<ellipse ry="56" rx="22" id="svg_3" cy="177" cx="293" stroke-linecap="null" stroke-linejoin="null" stroke-dasharray="null" stroke-width="5" stroke="#000000" fill="#ffffff"/>
		<ellipse rx="4" id="svg_13" cy="128" cx="251" stroke-linecap="null" stroke-linejoin="null" stroke-dasharray="null" stroke-width="5" stroke="#000000" fill="#ffffff"/>
		<ellipse transform="rotate(-28.4429 235 156)" ry="5" rx="38" id="svg_14" cy="156" cx="235" stroke-linecap="null" stroke-linejoin="null" stroke-dasharray="null" stroke-width="5" stroke="#000000" fill="#ffffff"/>
		<ellipse transform="rotate(67.249 327 275)" ry="4" rx="44" id="svg_15" cy="275" cx="327" stroke-linecap="null" stroke-linejoin="null" stroke-dasharray="null" stroke-width="5" stroke="#000000" fill="#ffffff"/>
		<ellipse id="svg_16" transform="rotate(36.5289 346 159.5)" ry="5" rx="38" cy="159.5" cx="346.000008" stroke-linecap="null" stroke-linejoin="null" stroke-dasharray="null" stroke-width="5" stroke="#000000" fill="#ffffff"/>
		<ellipse id="svg_17" transform="rotate(110.353 260 275.5)" ry="4" rx="44" cy="275.5" cx="260" stroke-linecap="null" stroke-linejoin="null" stroke-dasharray="null" stroke-width="5" stroke="#000000" fill="#ffffff"/>
	</g>
</svg>
<div>
	<label>R:<input type="range" id="r" min="0" max="255" value="255" /></label>
	<label>G:<input type="range" id="g" min="0" max="255" value="255" /></label>
	<label>B:<input type="range" id="b" min="0" max="255" value="255" /></label>
	<script>
		var onchange = function() {
			var channels = sliders.map(function(slider){
				return slider.value;
			});
			var color = 'rgb(' + channels + ')';
			var parts = image.querySelectorAll('.human *');
			for (var i = 0, part; part = parts[i]; i++) {
				part.style.fill = color;
			}
		};
		var sliders = [r,g,b];
		sliders.forEach(function(slider){
			slider.onchange = onchange;
		});
	</script>
</div>
Ответить с цитированием
  #7 (permalink)  
Старый 03.07.2013, 16:40
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

Ну круто. А ничего, что картинки они растровые и в случае канваса нужно всего пару байт сменить, что бы изменить цвет.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #8 (permalink)  
Старый 03.07.2013, 16:53
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Nekromancer, спорить не буду, пока автор топика не покажет свою графику
Ответить с цитированием
  #9 (permalink)  
Старый 03.07.2013, 16:54
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

на канве делал подобное . пикселы были в контуре и во вне прозрачные но разных цветов*(грубо говоря группы ) . проходил по массиву и перекрашивал группы в необходимый цвет
Ответить с цитированием
  #10 (permalink)  
Старый 03.07.2013, 23:58
Интересующийся
Отправить личное сообщение для Flaker Посмотреть профиль Найти все сообщения от Flaker
 
Регистрация: 26.12.2012
Сообщений: 11

Спасибо большое всем за дельные советы. Вариант с SVG кажется мне наиболее подходящим.

На сколько я понял, SVG картинку можно сделать в специальном редакторе типа Ai, а при использовании canvas вручную все просчитывать? Или не правильно понял?

А по поводу поддержки браузерами, что предпочтительнее?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с изображениями gismthedwarf Общие вопросы Javascript 3 06.05.2013 03:18
JS для VK - разовая работа sidorka Работа 1 16.03.2013 02:00
работа с JSON в JS EventPromo Элементы интерфейса 0 25.04.2011 14:09
работа с файлами JS demix Общие вопросы Javascript 1 19.02.2010 23:56
Работа js +php без обновления страницы Jekel Javascript под браузер 18 29.11.2009 20:17