2015-01-26 2 views
0

У меня есть сценарий, который анимирует мое меню ul element при наведении. Он также создает фоновый элемент для ul. Я сделал этот сценарий:jQuery hoverintent создание и удаление элемента

jQuery(document).ready(function($) { 

    $(".main-navigation ul:first > li").hoverIntent({ 
     sensitivity: 1, 
    interval: 100, 
    timeout: 400, 
    over: function() { 
     if ($(this).children().length > 1) { 
     $(this).parent().prepend('<div class="sub-nav" style="position: absolute; top: 0px; left: 250px; display: block; opacity: 1;"></div>'); 
       $(this).children("ul").css({ 
      "display" : "block", 
      "left" : "250px", 
      }).stop().animate({ 
       top: '-50px', 
       opacity: 1, 
       }, 500) 
       }}, 
    out: function() { 
    $(".sub-nav").remove(); 
    $(this).children("ul").stop().animate({ 
       "top" : "-500px", 
       "opacity": 0, 
        }, 500).css({ 
        "display" : "none", 
        }) 

      } 
     }) 
    }); 

Он работает нормально, но проблема возникает, когда я выбираю другое меню, которое находится ниже этого. Итак, у меня есть два меню с подменю. Если я выбираю separetly, каждый из них работает нормально, но если я выбираю первый, а затем перехожу на другой, фоновые элементы (.sub-nav) не отображаются.

Что мне не хватает?

JS FIDDLE: http://jsfiddle.net/r8vx07ae/10/ (попытайтесь переместить курсор из пункта меню # 2 в меню пункт № 3)

+0

Это только первая ul не первая li. Селектор> означает, что он выбирает onyl li, родительский - ul. Он может обойтись без него, так как структура html не имеет li за пределами ul. Но я пробовал без него. Еще одна проблема. –

+0

@Persijn. Да. Но это конкретное, потому что у него есть фон, который покрывает всю высоту экрана. –

+0

Я расскажу вам, прежде чем придут другие люди: html поможет и фрагмент кода jsfiddle, который воспроизводит его, необходимо будет полностью помочь вам. – Persijn

ответ

0

Я не уверен, если это правильный способ сделать это, но вмешиваются вокруг I своего рода достиг чего я хотел. Я сделал следующее:

jQuery(document).ready(function($) { 

    $(".main-navigation ul:first li").hoverIntent({ 
     sensitivity: 1, 
    interval: 100, 
    timeout: 400, 
    over: function() { 
     if ($(this).children().length > 1) { 
     $(this).parent().prepend('<div class="sub-nav" style="position: absolute; top: 0px; left: 250px; display: block; opacity: 1;"></div>'); 
       $(this).children("ul").css({ 
      "display" : "block", 
      "left" : "250px", 
      }).animate({ 
       top: '-50px', 
       opacity: 1, 
       }, 500) 
       }} 
     }) 

     .mouseleave(function() { 
     $(".sub-nav").remove() 
     $(this).children("ul").stop().animate({ 
       "top" : "-500px", 
       "opacity": 0, 
        }, 500).css({ 
        "display" : "none", 
        }) 

      }) 
    }); 

Это решило мою проблему. Он работает так, как я хотел.

JS Fiddle также обновляется: http://jsfiddle.net/r8vx07ae/11/

Прежде чем выбрать ответ, который я хотел бы ждать, пока кто-нибудь, возможно, обновить его с более более чистым раствором.

+0

Я мог бы сделать решение в чистом css, если бы вы хотели? – Persijn

+0

, но мне очень нравится, что вы прилагаете усилия, чтобы ответить на свой вопрос! – Persijn

+0

О, поверь мне, я приложил все усилия: D В течение трех дней через несколько решений. Это может быть два месяца с тех пор, как я сделал свой первый материал jQuery, поэтому я все еще новичок ... –

Смежные вопросы