2015-05-29 4 views
0

Не могли бы вы взглянуть на эту демонстрационную версию и сообщить мне, как я могу заставить .droper сползать вниз, пока мышь все еще не закончится над всем ребенком. <li> s?Проблема с сохранением раскрывающегося списка вниз до тех пор, пока мышь не закончится над детьми.

Как вы можете видеть из демки .droper начинает скользить вверх, как только мышь из .menu-itemb (которые делают Sence мне!), Но мне нужно, чтобы держать его в режиме, пока пользователь не просматривает в выпадающем меню

$(document).ready(function(){ 
 
    $(".menu-itemb").mouseover(function(){ 
 
    
 
    $(".droper").stop().slideDown("slow"); 
 
    }); 
 
    $(".menu-itemb").mouseout(function(){ 
 
    $(".droper").slideUp("slow"); 
 
    }); 
 
});
body { 
 
    background: #1f1f1f; 
 
} 
 

 
.site-navigation { 
 
\t display: block; 
 
\t font-family: 'Titillium Web', sans-serif; 
 
\t font-size: 16px; 
 
\t font-weight: bold; 
 
\t margin: 40px; 
 
} 
 

 
.site-navigation ul { 
 
    background: #3498DB; 
 
\t list-style: none; 
 
\t margin: 0; 
 
\t padding-left: 0; 
 
} 
 

 
.site-navigation li { 
 
\t color: #fff; 
 
    background: #3498DB; 
 
\t display: block; 
 
\t float: left; 
 
\t margin: 0 2px 0 0; 
 
\t padding: 12px; 
 
\t position: relative; 
 
\t text-decoration: none; 
 
\t text-transform: uppercase; 
 
} 
 
    
 
.site-navigation li a { 
 
    color: #fff; 
 
    text-decoration: none; 
 
    display: block; 
 
} 
 

 
.site-navigation li:hover { 
 
\t @include transition(background, 0.2s); 
 
\t background: #52a6df; 
 
\t cursor: pointer; 
 
} 
 

 
.site-navigation ul li ul { 
 
\t background: #52a6df; 
 
\t display:none; 
 
\t float: left; 
 
    min-width: 150px; 
 
\t position: absolute; 
 
    transition: visibility 0.65s ease-in; 
 
    margin-top:12px; 
 
\t left: 0; 
 
\t z-index: 999; 
 
} 
 

 
.site-navigation ul li:hover > ul, 
 
.site-navigation ul li ul:hover { 
 
    visibility: visible; 
 
} 
 

 
.site-navigation ul li ul li { 
 
\t clear: both; 
 
\t padding: 5px 0 5px 18px; 
 
    width: 100%; 
 
} 
 

 
.site-navigation ul li ul li:hover { 
 
\t background: #74b7e4; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> 
 
<nav id="navigation" class="site-navigation" role="navigation"> 
 
    <ul class="menu"> 
 
    <li class="menu-item"><a href="#">News</a></li> 
 
    <li class="menu-itemb"><a href="#">Snippets</a> 
 
     <ul class="droper"> 
 
     <li class="menu-item sub-menu"><a href="#">CSS</a></li> 
 
     <li class="menu-item sub-menu"><a href="#">HTML</a></li> 
 
     <li class="menu-item sub-menu"><a href="#">jQuery</a></li> 
 
     <li class="menu-item sub-menu"><a href="#">PHP</a></li> 
 
     <li class="menu-item sub-menu"><a href="#">WordPress</a></li> 
 
     </ul> 
 
    </li> 
 
    <li class="menu-item"><a href="#">Inspiration</a></li> 
 
    <li class="menu-item"><a href="#">Tools</a></li> 
 
    <li class="menu-item"><a href="#">Tutorials</a></li> 
 
    </ul> 
 
</nav>

ответ

1

Вы не хватает одного .stop() до slideUp. Без него, анимация будет запускаться и выполняться до конца при перемещении мыши между элементами ...

$(document).ready(function(){ 
 
    $(".menu-itemb").mouseover(function(){ 
 
    
 
    $(".droper").stop().slideDown("slow"); 
 
    }); 
 
    $(".menu-itemb").mouseout(function(){ 
 
    $(".droper").stop().slideUp("slow"); 
 
    }); 
 
});
body { 
 
    background: #1f1f1f; 
 
} 
 

 
.site-navigation { 
 
\t display: block; 
 
\t font-family: 'Titillium Web', sans-serif; 
 
\t font-size: 16px; 
 
\t font-weight: bold; 
 
\t margin: 40px; 
 
} 
 

 
.site-navigation ul { 
 
    background: #3498DB; 
 
\t list-style: none; 
 
\t margin: 0; 
 
\t padding-left: 0; 
 
} 
 

 
.site-navigation li { 
 
\t color: #fff; 
 
    background: #3498DB; 
 
\t display: block; 
 
\t float: left; 
 
\t margin: 0 2px 0 0; 
 
\t padding: 12px; 
 
\t position: relative; 
 
\t text-decoration: none; 
 
\t text-transform: uppercase; 
 
} 
 
    
 
.site-navigation li a { 
 
    color: #fff; 
 
    text-decoration: none; 
 
    display: block; 
 
} 
 

 
.site-navigation li:hover { 
 
\t @include transition(background, 0.2s); 
 
\t background: #52a6df; 
 
\t cursor: pointer; 
 
} 
 

 
.site-navigation ul li ul { 
 
\t background: #52a6df; 
 
\t display:none; 
 
\t float: left; 
 
    min-width: 150px; 
 
\t position: absolute; 
 
    transition: visibility 0.65s ease-in; 
 
    margin-top:12px; 
 
\t left: 0; 
 
\t z-index: 999; 
 
} 
 

 
.site-navigation ul li:hover > ul, 
 
.site-navigation ul li ul:hover { 
 
    visibility: visible; 
 
} 
 

 
.site-navigation ul li ul li { 
 
\t clear: both; 
 
\t padding: 5px 0 5px 18px; 
 
    width: 100%; 
 
} 
 

 
.site-navigation ul li ul li:hover { 
 
\t background: #74b7e4; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> 
 
<nav id="navigation" class="site-navigation" role="navigation"> 
 
    <ul class="menu"> 
 
    <li class="menu-item"><a href="#">News</a></li> 
 
    <li class="menu-itemb"><a href="#">Snippets</a> 
 
     <ul class="droper"> 
 
     <li class="menu-item sub-menu"><a href="#">CSS</a></li> 
 
     <li class="menu-item sub-menu"><a href="#">HTML</a></li> 
 
     <li class="menu-item sub-menu"><a href="#">jQuery</a></li> 
 
     <li class="menu-item sub-menu"><a href="#">PHP</a></li> 
 
     <li class="menu-item sub-menu"><a href="#">WordPress</a></li> 
 
     </ul> 
 
    </li> 
 
    <li class="menu-item"><a href="#">Inspiration</a></li> 
 
    <li class="menu-item"><a href="#">Tools</a></li> 
 
    <li class="menu-item"><a href="#">Tutorials</a></li> 
 
    </ul> 
 
</nav>

+0

Благодаря LcSalazar, но вы можете, пожалуйста, дайте мне знать, что именно 'стоп()' здесь делает? – Suffii

+1

Функция '.stop()' убивает любую анимацию, которая была выполнена в данный момент с помощью целевого объекта. Без него предыдущая анимация будет завершена до запуска другого. – LcSalazar

+0

Ваш код работал, но в тот момент, когда вы перемещаете мышь и наведите указатель мыши на дочерние элементы, она быстро запускает функцию '.mouseout(). Поскольку у вас не было '.stop()', было выполнено скольжение. – LcSalazar

1

Это должно исправить то, что ваши проблемы.

Fiddle

$(".menu-itemb").on('mouseenter', function() { 
$(".droper").stop().slideDown("200"); 
}); 
$(".menu-itemb").on('mouseleave', function() { 
$(".droper").stop().slideUp("200"); 
}); 
Смежные вопросы