Вопрос по jquery, hover, mouseevent – JQuery меню зависания

5

У меня есть меню, которое, когда я наведу курсор мыши на div, оно будет отображаться, а при наведении мыши оно исчезнет. проблема в том, что если вы перевернете любого из потомков меню, меню исчезнет (потому что технически, если вы находитесь над одним из потомков, а не родительским), есть ли способ, чтобы переворачивание дочерних элементов не считать мышью? вот мой код:http://jsfiddle.net/32bLg/

Ваш Ответ

5   ответов
1

это мое исправление

window.menushowing = false;

$('#menu').hover(

function() {
    window.menushowing = true;
}, function() {
    window.menushowing = false;
    hideMenu();
});

function hideMenu() {
    if (window.menushowing) return;
    $('#menu').animate({
        opacity: 0
    }, 1500, function() {
        $('#menu').hide();
    });
}

$('#examplePic').hover(

function() {
    window.menushowing = true;
    $('#menu').css('display', 'block');
    $('#menu').animate({
        opacity: 1
    }, 1500);

}, function() {
    hideMenu();
});
2

http://jsfiddle.net/T72jm/2/ .

Вы заметите (по крайней мере, в Chrome), что, если вы наведите курсор мыши на свой div при наведении курсора и ничего не сделаете, div меню исчезнет.

2
Мне нравится идея использования setTimeout +1. Selvakumar Arumugam
1

Хорошие JQuery меню

Конкретный многоуровневый:

Многоуровневое меню JQuery

HTML из ссылки 2:

    <ul id="nav">
    <li><a href="#">1 HTML</a></li>
    <li><a href="#">2 CSS</a></li>
    <li><a href="#">3 Javascript</a>
        <ul>
            <li><a href="#">3.1 jQuery</a>
                <ul>
                    <li><a href="#">3.1.1 Download</a></li>
                    <li><a href="#">3.1.2 Tutorial</a></li>
                </ul>
            </li>
            <li><a href="#">3.2 Mootools</a></li>
            <li><a href="#">3.3 Prototype</a></li>
        </ul>
    </li>
</ul>

CSS:

 #nav, #nav ul{
         margin:0;
         padding:0;
         list-style-type:none;
         list-style-position:outside;
         position:relative;
         line-height:1.5em;
     }

    #nav ul ul{
    top:auto;
    }

#nav li ul ul {
    left:12em;
    margin:0px 0 0 10px;
    }

#nav li:hover ul ul, #nav li:hover ul ul ul, #nav li:hover ul ul ul ul{
    display:none;
    }
#nav li:hover ul, #nav li li:hover ul, #nav li li li:hover ul, #nav li li li li:hover ul{
    display:block;
    }

JS:

function mainmenu(){
$(" #nav ul ").css({display: "none"}); // Opera Fix
$(" #nav li").hover(function(){
        $(this).find('ul:first').css({visibility: "visible",display: "none"}).show(400);
        },function(){
        $(this).find('ul:first').css({visibility: "hidden"});
        });
}

 $(document).ready(function(){
    mainmenu();
});
5

большинство людей склонны чрезмерно усложнять таймеры и проверки особых случаев. Простое решение с помощью разметки. Поместите цель наведения и меню под одним и тем же родителем, а затем наведите курсор на родительский элемент.Нравится, Вы также можете использоватьhoverIntent Плагин JQuery, чтобы избежать ложных событий наведения.

Примечание UX: анимация затухания продолжительностью более 500 мс - это просто грубость. Пожалуйста, не делай этого.

У меня возникла некоторая проблема, когда я пытаюсь навести курсор мыши на меню и выйти из него ... 'now before fadeOut' .. mouse in examplePic и mouse out now ... и снова mouse in испортила анимацию. Selvakumar Arumugam
самый превосходный. как и в жизни, самый простой ответ - правильный. также 500 мс были только для тестирования, это слишком быстро для большинства людей, чтобы заметить в любом случае ... спасибо, чувак. zero
@SKS да, используя обычныйhover событие + длинные анимации сделают это. Переключиться наhoverIntent и короткие анимации, и вы не увидите этого. Ilia G

Похожие вопросы