2014-02-10 59 views
0

我想製作一個mouseenter/mouseleave類手風琴菜單。jquery滑動/滑動嵌套列表上的瘋狂效果

如果你看看頁面,你會看到左側的菜單,嘗試在某個元素上進行鼠標懸停,然後嘗試在下面的某個元素上進行鼠標懸停,然後你會發生瘋狂的滑動/滑動的瘋狂效果。我在說什麼。

您可以在此視頻中看到此問題:http://quick.as/o34oiqpw。這裏有一個小提琴的例子:http://jsfiddle.net/pu2sH/2/

jQuery的是這樣的:

$('ul li').on('mouseenter', function(event) { 
     event.preventDefault(); 
     $('ul:first',this).slideDown(); 
    }).on('mouseleave',function(event){ 
     event.preventDefault(); 
     $('ul:first',this).slideUp(); 
    }); 

的HTML是一個簡單的UL李UL李UL裏。

我不知道如何'攻擊'這個問題。我已經想到了一些延遲,但我不知道如何實現它。

對此的任何意見將是非常有幫助的。

在此先感謝。

+0

讓我知道如果下面的代碼工作或不 – zgood

+0

我認爲這是比以前好,但沒有完全解決。另外,我必須創建一個函數來切換ani,並將該函數作爲回調函數傳遞給slideUp/slideDown。 – Chuy

+0

如果你將問題隔離到小提琴我可以幫你排除故障 – zgood

回答

0

我猜你想修改這個代碼:

$('.menu-lateral .acordeon li').on('mouseenter', function() { 
     $('.children:first',this).slideDown(); 
    }).on('mouseleave', function() { 
     $('.children:first',this).slideUp(); 
    }); 

要也許是這樣的:

var ani = false; 
    $(document).ready(function(){ 
     //other init code... 

     $('.menu-lateral .acordeon li').on('mouseenter', function() { 
       if (!ani){ 
        ani = true; 
        $('.children:first',this).slideDown(function(){ ani = false;}); 
       } 
     }).on('mouseleave', function() { 
       if (!ani){ 
        ani = true; 
        $('.children:first',this).slideUp(function(){ ani = false;}); 
       } 
      }); 
    });