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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> События mouseEnter и mouseLeave, События mouseEnter и mouseLeave 
:(
    Опции темы
SlavaDeveloper
Дата 7.3.2011, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Приветствую всех! При реализации всплывающих попапов при наведении на ссылку столкнулся с проблемой бесконечной генерации событий mouseenter и mouseleave в том случае, когда всплывающий попап перекрывает область элемента, на который навешены события - происходит мерцание попапа при нахождении мышли в области, где перекрываются элементы управления.
Пожалуйста, подскажите, как можно решить (обойти) эту проблему. Ниже пример кода и несколько скриншотов.

user posted image
user posted image

Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Mouse enter | mouse leave test</title>
    <style type="text/css">
        a
        {
            display:block; 
            text-align:center;
            width:200px;
            height:50px;
            top: 120px;
            left: 182px;
            position: absolute;
            background: #F9A;
        }
        
        div
        {
            background: Yellow;
            border: solid Orange 1px;
            width: 159px;
            height: 181px;
            top: 26px;
            left: 67px;
            position: absolute;
            display: none;
            opacity: 0.5;
        }
    </style>
    <script src="http://code.jquery.com/jquery-1.5.js"></script> 
    <script type="text/javascript">
        $(document).ready(function () {
            $('#aTest').mouseenter(function () {
                $('#popup').show();
            });

            $('#aTest').mouseleave(function () {
                $('#popup').hide();
            });
        });
     </script>
</head>
<body>
    <a id="aTest" href="#">Н А В Е Д И</a>
    <div id="popup">
        <strong>Заголовок</strong>
        <p>Текст, текст, текст, текст, текст, текст</p>
        <p>Текст, текст, текст</p>
    </div>
</body>
</html>

PM MAIL   Вверх
z-END
Дата 8.3.2011, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 4
Всего: 102



может проще поискать готовый плагин к jQuery?


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
SlavaDeveloper
Дата 8.3.2011, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Так такого нет, дело в том, что события mouseenter и mouseleave специально создавались jQuery как улучшенный аналог mouseover и mouseout. Скорее всего буду пробовать с явными координатами и событием mousemove
PM MAIL   Вверх
SlavaDeveloper
Дата 8.3.2011, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Проблему решил использованием события mousemove

$(document).ready(function () {
            $(document).mousemove(function (e) {
                var coordinates = getCoordinates('#aTest');

                if (pointInsideElement(e.pageX, e.pageY, coordinates.Left,
                    coordinates.Top, coordinates.Right, coordinates.Bottom)) {
                    $('#popup').show();
                }
                else {
                    $('#popup').hide();
                }
            });

        });

        var valueInRange = function (value, min, max) { return (value >= min) && (value <= max); }
        var pointInsideElement = function (x, y, leftEl, topEl, rightEl, bottomEl) {
            return valueInRange(x, leftEl, rightEl) && valueInRange(y, topEl, bottomEl);
        }
        var getCoordinates = function (selector) {
            var element = $(selector);
            var result = new Object();

            result.Left = element.offset().left;
            result.Top = element.offset().top;
            result.Right = element.offset().left + element.width();
            result.Bottom = element.offset().top + element.height();

            return result;
        }

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


 




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


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

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