Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Смена изображения под курсором.
 
 автор: DEMON.GDV   (11.05.2006 в 17:05)   письмо автору
 
 

Имеется изображение с отмеченными областями map.
При наведении курсора на map в этом месте должен появиться другой маленький рисунок (наложеный на первый) а при убирании исчезать.
Всё хорошо, но при появлении рисунка срабатывает onMouseOut, т.к. появившийся рисунок перекрывает map, соответственно рисунок исчезает и курсор оказывается над map, срабатывает onMouseOver, ну и так далее до бесконечности.
Не могу сделать так, что бы map был сверху и одновременно рисунок был виден, ну т.е. что бы появляющийся рисунок не перекрывали map.
Возможно идея бредовая, но мне так надо. Если будут другие варианты реализации, то готов с удовольствием их рассмотреть, но есть некоторые ограничения, например, нужны координаты где будут выводиться рисунки, их много и работа с map очень удобна, т.к. можно прямо мышкой выбирать положение.

   
 
 автор: ZooM (ССС)   (11.05.2006 в 17:08)   письмо автору
 
   для: DEMON.GDV   (11.05.2006 в 17:05)
 

Приведите html код ...

   
 
 автор: DEMON.GDV   (11.05.2006 в 17:56)   письмо автору
 
   для: ZooM (ССС)   (11.05.2006 в 17:08)
 


var screenM = document.getElementById('screenMap');

function colorTableOver(coords){
x = coords.substring(0,3);
y = coords.substring(4,6);
screenM.innerHTML = '';
screenM.innerHTML += '<img class=unnamed2 style="left: '+x+'px; top: '+y+'px;" src="ok!.gif" width="20" height="20">';}

function colorTableOut(){screenM.innerHTML = '';}


 <area shape="circle" coords="319,83,25" onMouseOver="colorTableOver(this.coords)" onMouseOut="colorTableOut()" >

   
 
 автор: Бог Зайцев   (11.05.2006 в 17:45)   письмо автору
 
   для: DEMON.GDV   (11.05.2006 в 17:05)
 

Хм..)) Не понимаю, а в чем проблема ?)

Перенеси onmouseout на появляющуюся картинку :)

   
 
 автор: DEMON.GDV   (11.05.2006 в 18:01)   письмо автору
 
   для: Бог Зайцев   (11.05.2006 в 17:45)
 

Пробовал, не пойдёт, т.к. map круглый, а рисунок квадратный, да и по размеру они могут быть разные.

   
 
 автор: Бог Зайцев   (11.05.2006 в 18:14)   письмо автору
 
   для: DEMON.GDV   (11.05.2006 в 18:01)
 

Введи какую-нить переменную, меняй ее при наведении на разные объекты

var i =0;

Картинку убирай с некоторой задержкой, проверяя значение этой переменной-)

area.onMouseOver:

i=0;

img.onmouseover:

i=1;

area.onmouseout:

if(i!=1) window.setTimeout("colorTableOut()",10)


Можешь добавить onmouseout для верхней картинки )

думаю как-то так )

   
 
 автор: 12345   (11.05.2006 в 18:22)   письмо автору
 
   для: Бог Зайцев   (11.05.2006 в 18:14)
 

Тут понятно, что логику onMouseOver на мап-е надо переделывать: "если картинка сверху видима, и если указатель мыши над этой картинкой, то не скрывать её".

Используются offsetLeft , offsetTop для картинки;
Для мыши:
MSIE, Opera 7 - document.body.scrollWidth, document.body.scrollHeight
Netscape, Mozilla - document.width, document.height
IE c доктайпом - document.documentElement.scrollWidth

   
 
 автор: DEMON.GDV   (12.05.2006 в 14:11)   письмо автору
 
   для: 12345   (11.05.2006 в 18:22)
 

В общем сделал так:

iOffsetLeft = tOLeft.offsetLeft;
iOffsetTop = tOLeft.offsetTop;
xMouse = (document.layers) ? e.pageX : document.body.scrollLeft+event.clientX;
yMouse = (document.layers) ? e.pageY : document.body.scrollTop+event.clientY;
if ((xMouse < iOffsetLeft) || ( xMouse > iOffsetLeft+imageSizeX) || ( yMouse < iOffsetTop) || ( yMouse > iOffsetTop+imageSizeZ) ) { screenM.innerHTML = '';}

где imageSizeX и imageSizeZ размеры выводимой картинки
и добавил onMouseOut в выводимую картинку

Спасибо всем, кто помогал!

   
 
 автор: 12345   (12.05.2006 в 14:46)   письмо автору
 
   для: DEMON.GDV   (12.05.2006 в 14:11)
 

К document.body.scrollTop нельзя забывать +document.body.offsetHeight - иначе после скролла всё перестанет работать.
Про document.layers можно навсегда твёрдо забыть, он нигде после NN4 не используется, нужно распознавать Мозиллу и Оперу, и про 6-ю версию её тоже забыть.

   
 
 автор: DEMON.GDV   (12.05.2006 в 15:18)   письмо автору
 
   для: 12345   (12.05.2006 в 14:46)
 

Не понял смысла предложения:
Про document.layers можно навсегда твёрдо забыть, он нигде после NN4 не используется, нужно распознавать Мозиллу и Оперу, и про 6-ю версию её тоже забыть.

Т.е. document.layers лучше не пользоваться?

   
 
 автор: 12345   (12.05.2006 в 17:25)   письмо автору
 
   для: DEMON.GDV   (12.05.2006 в 15:18)
 

Не лучше, а вообще не пользоваться, его не существует.

   
 
 автор: DEMON.GDV   (12.05.2006 в 23:20)   письмо автору
 
   для: 12345   (12.05.2006 в 17:25)
 

А как тогда лучше координаты мыши определять?

   
 
 автор: Бог Зайцев   (13.05.2006 в 00:07)   письмо автору
 
   для: DEMON.GDV   (12.05.2006 в 23:20)
 

Вместо вот этого:

xMouse = (document.layers) ? e.pageX : document.body.scrollLeft+event.clientX; 
yMouse = (document.layers) ? e.pageY : document.body.scrollTop+event.clientY;

Достаточно оставить вот это:

xMouse = document.body.scrollLeft+event.clientX; 
yMouse = document.body.scrollTop+event.clientY;

Хотя можешь оставить и так, хуже точно не станет -)

   
 
 автор: DEMON.GDV   (13.05.2006 в 05:54)   письмо автору
 
   для: Бог Зайцев   (13.05.2006 в 00:07)
 

Гооспода!!!
Так ка же всё таки лучше?! То ли так, то ли эдак!? Один говорит "устарело", другой "хуже не станет"...
Может найдём истину... в чём фишлка :

   
 
 автор: 12345   (13.05.2006 в 07:16)   письмо автору
 
   для: DEMON.GDV   (13.05.2006 в 05:54)
 

Я же привёл ссылку: pageXOffset, pageYOffset для Мозиллы.

xMouse=document.all?document.body.scrollLeft+event.clientX:pageXOffset;
yMouse=document.all?document.body.scrollTop+event.clientY:pageYOffset;

   
 
 автор: DEMON.GDV   (31.05.2006 в 11:33)   письмо автору
 
   для: 12345   (13.05.2006 в 07:16)
 

Как узнать величину теущего скрола страницы?
Т.е. надо определить координаты без учёта скрола.

   
 
 автор: 12345   (31.05.2006 в 17:21)   письмо автору
 
   для: DEMON.GDV   (31.05.2006 в 11:33)
 

Координаты угла окна?
Здесь всё для IE, по форуму найдёте по кл.словам и для FF. Рис. 9.1. И обязательно уберите DOCTYPE со страницы.

   
 
 автор: DEMON.GDV   (01.06.2006 в 11:20)   письмо автору
 
   для: 12345   (31.05.2006 в 17:21)
 

Благодарю, помоголо.

   
 
 автор: Бог Зайцев   (13.05.2006 в 07:22)   письмо автору
 
   для: DEMON.GDV   (13.05.2006 в 05:54)
 

Я передумал -) Пользуй вариант 12345, он прав -)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования