Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> закраска объектов с помощью JS 
:(
    Опции темы
yalo
Дата 25.7.2006, 05:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 24.5.2006

Репутация: нет
Всего: 2



Перед тем как ломать голову самой, хочу разузнать, может где-то есть уже подобная задача:
на странице лежат три образца цвета в виде закрашенных квадратов, слева лежит штук 20 дверей разных видов, в один из трех цветов они все закрашены уже по умолчанию, требуется чтобы человек мог взять один из цветов, навести его на любую дверь и дверь должна покраситься в соответствующий цвет. В общем-то вот и вся задача, дело так понимаю рук JS.
 
PM MAIL ICQ   Вверх
S.A.P.
Дата 25.7.2006, 07:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: 8
Всего: 71



Думаю самым разумным будет отфотошопить все 3 цвета для каждой двери и  просто подменивать src у картинок при нажатии.

Можно конечно накладывать цветной прозрачный div на дверь при условии, что дверь имеет форму прямоугольника, но хорошего качества врядли этим можно добиться.

Хотя всё зависит от "серьёзности" проекта. 
PM MAIL   Вверх
yalo
Дата 25.7.2006, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 24.5.2006

Репутация: нет
Всего: 2



Я, пожалуй, не правильно изъяснилась, отфотошопить заранее все три варианта двери и подразумевалось. Требуется алгоритм (или самой придется учиться-мучиться;)), который бы реализовывал такое действие: 
пользователь берет одну из трех текстур, наводит на любую понравившуюся дверь и она "красится", т.е. заменяется другой фотошоповской дверью, соответствующей выбранной текстуре. 
PM MAIL ICQ   Вверх
Sardar
Дата 25.7.2006, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



yalo, браузер не может рисовать (о canvas поговорим больше когда руки дойдут изучить). Как вариант сделать полупрозрачную картинку двери, сохранить в PNG, менять цвет заднего фона (либо заливать текстурой), всё что прозрачно будет "закрашиваться". Сохранять лучше в PNG, т.к. есть градиентная прозрачность в отличии от GIF. 


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
yalo
Дата 25.7.2006, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 24.5.2006

Репутация: нет
Всего: 2



т.е. JS не может определить объект1, над которым находится другой объект2 и ПРОСТО ЕГО (объект1) ПОМЕНЯТЬ на другую картинку (т.е. на другую дверь)? 


разве замена одного изображения на другое является рисованием? 

Это сообщение отредактировал(а) yalo - 25.7.2006, 11:43
PM MAIL ICQ   Вверх
dstorm81
Дата 25.7.2006, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


бездельник
***


Профиль
Группа: Завсегдатай
Сообщений: 1178
Регистрация: 18.1.2006
Где: (16RU)

Репутация: 20
Всего: 39



обязателен драг анд дроп
а так просто
e=e||window.event
i=e.target||e.srcElement
document.getElementById('mylovelyDoor').src=i.src;
вроде так
 


--------------------
на форуме с 8.12.2002 (http://forum.vingrad.ru/index.php?act=ST&f=10&t=4874&st=0#)

PM   Вверх
Sardar
Дата 25.7.2006, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



yalo, может конечно, как говорилось выше смена аттрибута src у картинки. Я предлагал "закраску" обьектов "с помощью JS". 


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
12345c
Дата 25.7.2006, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



yalo, Вы, наверное, немного не в тот раздел написали. Если бы вопрос был в разделе "Для начинающих", Вам бы попытались объяснить или написать алгоритм, а в общем разделе "Javascript" даже мысли ни у кого не возникло, что проблемы с алгоритмом и процедурами реализации. Перенести тему туда?

Реализуется на том же, что и таскание объектов (слоёв) по окну - http://js2.ru/example/JsPrimeryCode-56.htm . Потом определяется точка отпускания, сравнивается с точкой расположения целевых объектов.   

Это сообщение отредактировал(а) 12345c - 3.3.2008, 14:45


--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
yalo
Дата 25.7.2006, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 24.5.2006

Репутация: нет
Всего: 2



если возможно, то перенесите, пожалуйста, прошу прощения за невнимательность - где увидела слово JS, туда и ломанулась не глядя smile  
PM MAIL ICQ   Вверх
12345c
Дата 25.7.2006, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Перенёс. Если я правильно понял уровень Ваших затруднений.

yalo, извиняться тут не за что.
Из необъяснённого тут осталась одна нетривиальная вещь - как определить, что мышь отпущена над целевой картинкой. Вам нужно получить координаты угла каждой целевой картинки в документе - document.getElementById('...').offsetTop, ..., размеры её, и проверить условие попадания координат мыши в момент onmouseout в один из целевых прямоугольников. Справитесь? 
PM WWW   Вверх
yalo
Дата 26.7.2006, 04:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 24.5.2006

Репутация: нет
Всего: 2



буду стараться... надо начать писать, а там начну спрашивать конкретнее... сегодня 
PM MAIL ICQ   Вверх
yalo
Дата 26.7.2006, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 24.5.2006

Репутация: нет
Всего: 2



написан такой код
Код

<HTML>
<HEAD><TITLE>onMouseMove Event Handler</TITLE>
<STYLE TYPE="text/css">
    #orcolor {position:absolute; left:560; top:120}
    #bucolor {position:absolute; left:560; top:220}
    #vicolor {position:absolute; left:560; top:320}
</STYLE>
<script LANGUAGE="JavaScript">
// global variables used while dragging
var offsetX = 0
var offsetY = 0
var selectedObj
var frontObj
var doorsPos = new Array(40)

// set document-level event handlers
document.onmousedown = engage
document.onmouseup = release

// positioning an object at a specific pixel coordinate
function shiftTo(obj, x, y) {
    obj.style.pixelLeft = x
    obj.style.pixelTop = y
}

// setting the z-order of an object
function bringToFront(obj) {
    if (frontObj) {
        frontObj.style.zIndex = 0
    }
    frontObj = obj
    frontObj.style.zIndex = 1
}

// set global var to a reference to dragged element
function setSelectedObj() {
    var imgObj = window.event.srcElement
    if (imgObj.id.indexOf("color") == 2) {
        selectedObj = imgObj
        bringToFront(selectedObj)
        return
    }
    selectedObj = null
    return
}

// do the dragging (called repeatedly by onMouseMove)
function dragIt() {
    if (selectedObj) {
        shiftTo(selectedObj, (event.clientX - offsetX), (event.clientY - offsetY))
        return false
    }
}

// set global vars and turn on mousemove trapping (called by onMouseDown)
function engage() {
    setSelectedObj()
    if (selectedObj) {
        document.onmousemove = dragIt
        offsetX = window.event.offsetX - document.body.scrollLeft
        offsetY = window.event.offsetY - document.body.scrollTop
    }
}

// restore everything as before (called by onMouseUp)
function release() {
    if (selectedObj) {
        document.onmousemove = null
        selectedObj = null
    }
}

function doorPos()  {
   for (var i=0; i<20; i++)  {
   //     document.write('xfhbs')
     doorsPos[i]=document.getElementById('door'+i).offsetTop
    // document.write(doorsPos[i])
   }
}

</SCRIPT>
</HEAD>
<BODY>
<script LANGUAGE="JavaScript">doorPos()</SCRIPT>
<IMG id="door0" SRC="102_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
<IMG id="door1" SRC="103_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
<IMG id="door2" SRC="104_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
<IMG id="door3" SRC="105_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
<IMG id="door4" SRC="106_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
<IMG ID="orcolor" SRC="oreh.gif" WIDTH="50" HEIGHT="50" BORDER="0">
<IMG ID="bucolor" SRC="buk.gif" WIDTH="50" HEIGHT="50" BORDER="0">
<IMG ID="vicolor" SRC="vishnya.gif" WIDTH="50" HEIGHT="50" BORDER="0">
</SCRIPT>
</BODY>
</HTML>


застопорилась на определении местоположения дверей, не срабатывает  
doorsPos[i]=document.getElementById('door'+i).offsetTop в функции doorPos()   smile 
 
PM MAIL ICQ   Вверх
Sardar
Дата 26.7.2006, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



yalo, потому что пытаешся ты выбрать элементы до того как они определены, поставь вызов после вёрстки, либо повесь на body.onload. Также ты пытаешся выбрать 20 элементов, у тебя их 4, следовательно на пятом null и исключение.

Лучше верстать структурно:
Код
<div id="doors">
<IMG id="door0" SRC="102_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
<IMG id="door1" SRC="103_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
<IMG id="door2" SRC="104_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
<IMG id="door3" SRC="105_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
<IMG id="door4" SRC="106_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
</div>
<div id="fills">
<IMG ID="orcolor" SRC="oreh.gif" WIDTH="50" HEIGHT="50" BORDER="0">
<IMG ID="bucolor" SRC="buk.gif" WIDTH="50" HEIGHT="50" BORDER="0">
<IMG ID="vicolor" SRC="vishnya.gif" WIDTH="50" HEIGHT="50" BORDER="0">
</div>
<script type="text/javascript">doorPos()</script>


Код
function doorPos()  {
   var drs = document.getElementById("doors").getElementsByTagName("img");
   for (var i=0; i<drs.length; i++)
      doorsPos[i]=drs[i].offsetTop;
}

Сами скрипты написанны не очень, только под ИЕ.    


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
yalo
Дата 26.7.2006, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 24.5.2006

Репутация: нет
Всего: 2



ок, дверей поставлено сколько нужно, т.е. 20 штук, код исправлен на 
Код

<div id="doors">
<IMG id="door0" SRC="102_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
<IMG id="door1" SRC="103_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
<IMG id="door2" SRC="104_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
<IMG id="door3" SRC="105_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
<IMG id="door4" SRC="106_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0"><br>
<IMG id="door5" SRC="102_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
<IMG id="door6" SRC="103_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
<IMG id="door7" SRC="104_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
<IMG id="door8" SRC="105_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
<IMG id="door9" SRC="106_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0"><br>
<IMG id="door10" SRC="102_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
<IMG id="door11" SRC="103_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
<IMG id="door12" SRC="104_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
<IMG id="door13" SRC="105_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
<IMG id="door14" SRC="106_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0"><br>
<IMG id="door15" SRC="102_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
<IMG id="door16" SRC="103_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
<IMG id="door17" SRC="104_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
<IMG id="door18" SRC="105_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
<IMG id="door19" SRC="106_vishnya.gif" WIDTH="70" HEIGHT="165" BORDER="0">
</div>
<div id="fills">
<IMG ID="orcolor" SRC="oreh.gif" WIDTH="50" HEIGHT="50" BORDER="0">
<IMG ID="bucolor" SRC="buk.gif" WIDTH="50" HEIGHT="50" BORDER="0">
<IMG ID="vicolor" SRC="vishnya.gif" WIDTH="50" HEIGHT="50" BORDER="0">
</div>
<script type="text/javascript">doorPos()</script>


функция определения объектов приняла вид

Код

function doorPos()  {
   var drs = document.getElementById("doors").getElementsByTagName("img");
   for (var i=0; i<drs.length; i++) {
      doorsPos[i]=drs[i].offsetTop
      doorsPos[i+20]=drs[i].offsetLeft
    //  document.write(doorsPos[i]+ ' ')
    //  document.write(doorsPos[i+20] +' '+'<br>')
    }
}

что дальше? как отпустить мышь и назначить после этого 2 взаимоисключающих расклада вещей:
1) если плашка над какой-то дверью, то она заменяется на дверь цвета плашки, а плашка возвращается на свое  место
или
2) если плашка не была ни над какой дверью, значит при отпускании мыши возвращается на место
Хоть наметки? подскажите, пожалуйства! 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0679 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.