Находится ли мышка над дивом ? (выпадающее меню)
Мне нужно сделать выпадающее меню. Поведение такое: навел на пункт меню - открылось выпадющее из него. Увел курсор - выпадающее меню закрылось. Событие mouseover() помогает открывать меню. Но вот с закрытием меню проблема. Не знаю когда его делать.
Его нужно закрывать в двух случаях. Если с пункта меню уведен курсор и он находится не над открывшимся выпадающем меню. А также если с выпадающего меню уведен курсор, но опять же, если он не переведен на меню. Тоесть нужно проверить - находится ли курсор мышки над каким-то дивом. А как эту проверку сделать я не знаю. Кто-нибудь может помочь с этим ? Если сумбурно изьясняюсь - ссылка на сайт: http://keramiki.ru/ Спасибо всем за помощь. |
Вы просите готовый скрипт с нуля.
Это работа, и за нее обычно платят деньги. Для таких сообщений предназначен раздел форума "Работа". Если вы все же хотите, чтобы вам помогли - приложите какие-то усилия сами и задавайте вопросы по ходу дела. |
Я не прошу говорый сприт с нуля. о_О
Я прошу чтобы мне подсказали как определить, находится ли мышка над определенным блоком в данный момент. |
Сайт, ссылку на который я дал в первом посте - это как раз то, что я делаю. Но там менюшка сейчас прыгает и закрывается даже тогда, когда не должна. И я пытаюсь это исправить.
|
помимо события mouseover есть еще и событие mouseout
обычно делают так: при mouseover, если меню еще не показано, то показать его, и сбросить таймер(о нем речь дальше) при mouseout сделать var timer = setTimeout(function(){/* здесь скрываем меню */}, 500); соответсвенно, если пользователь неаккруатно повел мышкой, переходя в подменю, или же из-за неаккуратной верстки между подменю, и меню есть зазор(и такое бывает), то меню не пропадет сразу же |
Точно. Читал про сбросы таймера, но не додумался, что так можно сделать в моем случае. Спасибо за помощь!
|
что ж такое .полгода пасся на этом форуме....
больно осознавать, что большая половина участников не знает что такое рекурсия мало того не может назвать древовидное меню древовидным меню http://javascript.ru/forum/jquery/11...selektory.html кидай почту пришлю сайт в архиве. |
rgwergwegwerg,
Чел 4 года ждал твоего ответа :) |
что делать. действительно надо различать програмистов и "веб грамистов", последним наверно практически невозможно объяснить как работает тод же квик-сорт.
|
rgwergwegwerg,
Ты странный тип :) Ты пришел на сайт на котором помогают людям что-то сделать, на котором люди учатся и задают вопросы по ходу обучения и удивляешься что они ничего не знают. Я думаю что если ты спросишь что такое рекурсия у любого с кармой >= 100, то тебе скажут без проблем :) |
да? вперед.
что расскажешь про всплытие событий? и почему все с упорством ослика рисуют вложенные спауны или ли руками? |
да и еще забыл че никто ничего за 4 года не ответил?
признаюсь JS заинтересовал полгода назад. |
Цитата:
Охота пофлудить на тему образованности местных программеров - создай тему в оффтопике. |
rgwergwegwerg,
Тебя трудно понимать без знаков препинания, прошу читай свои посты перед отправкой. Что например это значит? Цитата:
|
SPAN и LI
и если ты думаешь что просто потанутся решил - силно ошибешся. не знаю попался странный заказчик три дня на почту не отвечал, дозвонится не мог - ну не пропадать же добру? вывал сюда. я сюда пришел с трудом теги основные знал. и мне реально обидно что люди не знают основных приемов программирования.. |
rgwergwegwerg,
Я не знаю почему твои "все" это делают. Я "руками" верстку не трогаю, для этого шаблонизаторы придумали :) |
да-да конЭчно....
делаем руками а не головой. это и обидно. привыкли вбивать "шаблонизатором" списки охренительной вложенности, а написать самому 20 стросчек и всю жизнь пользоваться. касательно темы чета мне самому захотелось написать - сделал набросок. тут нужно положение мыши не над дивом, а над многими дивами. сделал так: только мыша уходит с дива запускаем отработчик события который берет this.id и в сотвествующем массиве меняет мышка над дивом с 1 на 0 и наоборот если над дивом мыша. после запускаем отложенный по времени подпрограмм, который эндит друг за другом элементы массива получилось 1 ничего не делаем получился ноль все дивы грохаем. вернее "орит". P.S. тут меня кста посетила прекрасная идея. навига я массив таскаю? ушла мышь с последний панели - всем кирдык. |
rgwergwegwerg,
молодчик, может скоро даже познаешь классы и нследование в js) |
Цитата:
ели ты будешь наследовать то панели будут ровнятся друг относительно друга т.е. нужно чтобы корневой элемент был один у всех. и просто менять стиль руками (конкретно топ или лефт, чтобы сместить их). дема ниже. наследование здесь ненужно. |
rgwergwegwerg,
Следи за базаром. |
var PMenu= { depth: 0 , panels_m_out: [], root: null }; PMenu.clear= function(){ alert('gweergwergwergwergwerg'); return } PMenu.mouseCk= function(ev){ var panel_depth; const DELAY= 500; ev.stopPropagation(); setTimeout('PMenu.clear()', DELAY); return } PMenu.nextPanel= function(ev){ var div; ev.stopPropagation(); PMenu.depth++; PMenu.createDiv(); PMenu.panels_m_out.push(0); return } PMenu.init= function(){ PMenu.root= document.getElementById('start_element'); return } PMenu.createDiv= function(){ var div= document.createElement('div'); div.className= 'PMlevel'+ PMenu.depth; div.onclick= PMenu.nextPanel; div.onmouseout= PMenu.mouseCk; div.id= PMenu.depth; PMenu.root.appendChild(div); return } PMenu.init(); PMenu.createDiv( а вот такие стили - никакго наследования здесь оно вредно: .PMlevel0 { position: absolute; height: 500px; width: 50px; top: 100px; left: 0%; z-index: 10; background-color: red; } .PMlevel1 { position: absolute; height: 400px; width: 50px; top: 100px; left: 51px; z-index: 10; background-color: red; } .PMlevel2 { position: absolute; height: 200px; width: 50px; top: 100px; left: 102px; z-index: 10; background-color: red; } |
Цитата:
|
rgwergwegwerg,
просто return писать не принято, возвращают всегда что-то (хоть false или undefined), на это любая ide ругается, сдается мне ты кодишь в блокнотике :) |
Цитата:
ксти не писать ретурн придумали "вебрамисты" ретурн означет возврат(берем со стека указатель и идем по нему) если программа возвращает значение пишут return <значение>. |
rgwergwegwerg,
Ниче-ниче. Ты очень умен, сообразителен, грамотно пишешь, офигенный программист и вообще победил. Я пожалуй не буду с тобой препираться. |
Цитата:
|
:lol:
В том коде нет наследования :haha: |
Цитата:
ща стили покажу. |
Цитата:
Цитата:
Цитата:
|
хвать базарить покажи как будет с наследованием
кста здесь он нужно http://javascript.ru/forum/jquery/11...elektory.html# видишь? каждый элемент кроме самого глубокого родитель последующего. наверное там тоже "кодят" на JS с использованием шаблонизаторов, меньше 30 строчек чистого JS c ненавидимым вебграмистами ретурном. |
как успехи? тут наковырял чего-то на днях закончу.
у меня получилось с покиданием блока так: tbl_tag.onmouseover= LMenu.mouseTop; tbl_tag.onmouseout= LMenu.mouseOut; LMenu.mouseTop - вывешивает признак что мыша над блогом 1 и делает setTimeout('LMenu.nextPanel()', DELAY); LMenu.mouseOut - проверяет чтоб блок был тот же и флаг мышь над блоком ставить в ноль LMenu.nextPanel() - проверяет это флаг и если да рисует панель (за DELAY мышь не ушла). там кошено куча примочек чтоб панели не рисовать просто так... ну короче потом - это по сути вопроса. у меня в оригинале там куча проверок (события генерятся периодически что мышь сверху) - просто скажу это надо учитывать. позиционирование блоков как и планировал div.style.top= LMenu.getY()+ 'px'; |
написал твое меню
http://sourceforge.net/p/ribbonmenu/code/HEAD/tree/ действий нет. будет настроение сделаю. кстати его можно одними css3 сделать. ну это так к слову. |
Часовой пояс GMT +3, время: 07:34. |