Как закрыть меню со списком при наведении мыши с помощью jQuery - PullRequest
1 голос
/ 17 августа 2010

У меня есть следующий сценарий:

<div class="dropMenuWrapper_content">
<img src="images/dropMenu.gif" class="menu_head_content" />
<ul class="menu_body_content scroll-pane" id="SmallDropDown">
  <li><a class="modalWindow cboxElement" href="http://mysite.com/service/0.aspx">1</a></li>
  <li><a class="modalWindow cboxElement" href="http://mysite.com/service/1.aspx">2</a></li>
  <li><a class="modalWindow cboxElement" href="http://mysite.com/service/2.aspx">3</a></li>
  <li><a class="modalWindow cboxElement" href="http://mysite.com/service/3.aspx">4</a></li>
  <li><a class="modalWindow cboxElement" href="http://mysite.com/service/4.aspx">5</a></li>
  <li><a class="modalWindow cboxElement" href="http://mysite.com/service/5.aspx">6</a></li>
  <li><a class="modalWindow cboxElement" href="http://mysite.com/service/6.aspx">7</a></li>
  <li><a class="modalWindow cboxElement" href="http://mysite.com/service/7.aspx">8</a></li>
  <li><a class="modalWindow cboxElement" href="http://mysite.com/service/8.aspx">9</a></li>
  <li><a class="modalWindow cboxElement" href="http://mysite.com/service/9.aspx">10</a></li>
  <li><a class="modalWindow cboxElement" href="http://mysite.com/service/10.aspx">11</a></li>
  <li><a class="modalWindow cboxElement" href="http://mysite.com/service/11.aspx">12</a></li>
  <li><a class="modalWindow cboxElement" href="http://mysite.com/service/12.aspx">13</a></li>
  <li><a class="modalWindow cboxElement" href="http://mysite.com/service/13.aspx">14</a></li>
  <li><a class="modalWindow cboxElement" href="http://mysite.com/service/14.aspx">15</a></li>
  <li><a class="modalWindow cboxElement" href="http://mysite.com/service/15.aspx">16</a></li>
  <li><a class="modalWindow cboxElement" href="http://mysite.com/service/16.aspx">17</a></li>
</ul>

Когда я нажимаю на изображение dropMenu, открывается список, показывающий раскрывающееся меню с использованием jQuery. Все работает хорошо, за исключением того, что когда я убираю изображение или сам список, мне нужно закрыть меню. У меня уже есть функция закрытия меню, когда вы снова нажимаете на изображение, но мне нужно закрыть его, когда вы покидаете изображение или список.

Я подумал, что мог бы использовать div dropMenuWrapp_content, чтобы он растягивался с содержимым, когда оно открыто, так что при наведении указателя мыши на этот div он закрывается, но он очень глючит.

Во Flash я бы настроил hitTest, чтобы увидеть, где находится мышь, и если ее больше нет в этой области, раскрывающееся меню закроется.

Есть ли лучший способ проверить это с помощью jQuery?

Большое спасибо!

Ответы [ 4 ]

0 голосов
/ 17 августа 2010

события mouseover и mouseleave должны решить эту проблему или лучше использовать hover в таких сценариях, когда вам нужно переключить некоторое представление содержимого.api.jquery.com/hover

  $("img")
        .hover(function(){   
                  Here show code should come     
               },
               function(){           
                    Here show code should come which should hide only if mouse coordinates are              not over menu
                       });
0 голосов
/ 17 августа 2010

Ответ Аяза отлично сработал для меня!

если вы можете изменить событие на наведение мыши и mouseleave тогда это может быть сделано функция переключения jQuery

Спасибо! -

0 голосов
/ 17 августа 2010

Если вы сделаете раскрывающиеся параметры дочерними для кнопки, открывающей меню, а затем добавьте прослушиватель события mouseout / mouseleave к кнопке, открывающей меню, этот обработчик должен применяться, если мышь находится за пределами кнопки, открывающей меню. и дети, так как они теперь являются частью меню. Тем не менее, тег <img> не может иметь дочерние элементы, если вы не добавите их динамически, поэтому вы должны изменить тег <img> на другой тег, который может иметь дочерние элементы (но не элемент уровня блока), и указать изображение с помощью Свойство CSS background-image.

Другим вариантом может быть добавление mouseover / mouseenter и слушателя mouseout / mouseleave к изображению и меню и установка времени ожидания после каждого mouseout / mouseleave в течение примерно 1 секунды, которое будет проверять переменную, установленную mouseover / mouseenter обработчик и посмотрите, изменился ли он - если так, то произошел еще один переход мышью / указатель мыши (т. е. пользователь убрал свою мышь с изображения, вызвав указатель мыши / отпускание мыши, но затем переместил его в меню, вызвав указатель мыши / указатель мыши) , Например:

<img src="images/dropMenu.gif" class="menu_head_content" />
<ul class="menu_body_content scroll-pane" id="SmallDropDown">
    <li><a class="modalWindow cboxElement" href="http://mysite.com/service/0.aspx">1</a></li>
...
    <li><a class="modalWindow cboxElement" href="http://mysite.com/service/16.aspx">17</a></li>
</ul>

<script type="text/javascript">
// Global var
var is_in_menu = false;

$(function () {
    // Initially hide menu body
    $(".menu_body_content").hide();

    // MouseEnter event handler
    $(".menu_head_content, .menu_body_content").bind("mouseenter", function () {
        is_in_menu = true;
        if ($(".menu_body_content").css("display") == "none") {
            $(".menu_body_content").fadeIn("fast");
        }
    });

    // MouseLeave event handler
    $(".menu_head_content, .menu_body_content").bind("mouseleave", function () {
        is_in_menu = false;
        setTimeout(function () {
            if (is_in_menu === false) {
                $(".menu_body_content").fadeOut("fast");
            }
        }, 1000);
    });

    // Image click handler
    $(".menu_head_content").click(function () {
        is_in_menu = true;
        if ($(".menu_body_content").css("display") == "none") {
            $(".menu_body_content").fadeIn("fast");
        }
    });
});
</script>
0 голосов
/ 17 августа 2010

Добавьте "обработчик щелчка на закрытии" в тег BODYТаким образом, меню будет закрываться при нажатии в любом месте за пределами меню.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...