2013-05-23 2 views
0

Я уверен, что ответ прост, но; Я пытаюсь написать простой бит JQuery для системы меню ресторана на веб-сайте. Я хочу, чтобы элемент menu_list был видимым для slideUp до выбранного slidesDown. Я могу заставить это работать, задерживая slideDown, это здорово, если menu_list уже виден, но означает, что вы получаете задержку, если таковая отсутствует. Я пробовал отложить, но по какой-то причине второй menu_list просто появляется ниже текущей, вместо текущей, скользящей вверх. Я пробовал, если что-то еще, но это тоже не работает. Может ли кто-нибудь увидеть, что я делаю неправильно?SlideUp DIV того же класса перед SlideDown JQuery

Этот код работает, но с задержкой (по понятным причинам)

$('.s_menu, .m_menu').click(function(){ 
var menuid = event.target.id; 
var mlist = ('#') + (menuid) + ('_list'); 
var last = $('.menu_list').not(mlist); 

    $(last).slideUp(400); 
    $(mlist).delay(600).slideDown(400); 

    return(false); 
    }); 
}); 

Этот код дивы появится ниже друг друга без предыдущего скольжения вверх.

function first(){$(last).slideUp(400);} 
function next(){$(mlist).slideDown(400);} 

$.when(first).then(next); 
    return(false); 
    }); 
}); 

, как это делает

if ($(last).is(':hidden')) { 
    $(mlist).slideDown(400); 
    } else {  
    $(last).slideUp(400); 
    $(mlist).delay(600).slideDown(400); 
    } 
    return(false); 
    }); 
});  

HMTL является:

<div id="menu_nav"> 

       <ul class="menu_top"> 
        <li id="menu_starters" class="menu">STARTERS</li> 
        <li id="menu_mains" class="menu" >MAINS</li> 
        <li id="menu_noodles" class="menu">NOODLES &amp RICE</li> 
       </ul> 

       <ul id="start_nav" class="menu_sub"> 
        <li id="st_meat" class="s_menu">MEAT &amp FISH</li> 
        <li id="st_veg" class="s_menu">VEGETARIAN</li> 
        <li id="st_soups" class="s_menu">SOUPS</li> 
        <li id="st_salads" class="s_menu">SALADS</li> 
       </ul> 
       <ul id="mains_nav" class="menu_sub"> 
        <li id="ma_curries" class="m_menu">CURRIES</li> 
        <li id="ma_meat" class="m_menu">MEAT</li> 
        <li id="ma_seafood" class="m_menu">SEAFOOD</li> 
        <li id="ma_veg" class="m_menu">VEGETARIAN</li> 
       </ul> 
      </div> 
<article id="st_meat_list" class="st menu_list"> 
<ul> 
<!--series of list items here--> 
</ul> 
<article id="st_veg_list" class="st menu_list"> 
<ul> 
<!--series of list items here--> 
</ul> 
<article id="st_soups_list" class="st menu_list"> 
<ul> 
<!--series of list items here--> 
</ul> 

и так далее с изделий, содержащих каждый список

Fiddle Here

+1

Что делает ваш HTML выглядит? Кроме того, я не понимаю, хотите ли вы, чтобы там была задержка или нет. Кроме того, здесь будет великолепно [скрипка] (http://jsfiddle.net). – rgin

+1

Извините, я отредактировал html. Надеюсь, что это поможет. – JakeLabz

+0

Я также добавил скрипку – JakeLabz

ответ

0

Поскольку вы будете только га пока одно подменю не сползает все время, попробуйте скрыть() все подменю перед тем, как сползать вниз по целевому, и используйте обратный вызов hide() для перемещения по целевому меню. Может быть что-то вроде этого:

$('.s_menu, .m_menu').click(function(){ 
    var correspnding_list = $(selector_to_mlist); 
    var list = $('.common_class_of_lists'); 
    list.slideUp({ 
    complete: function(){ 
     corresponding_list.slideDown(); 
    } 
    }) 
}); 

Обновление: Пожалуйста, используйте slideToggle() вместо slideDown()

http://jsfiddle.net/XK6JX/

+0

Кажется, что просто запускают функции одновременно, что не то, что я хочу. Я хочу, чтобы существующее меню было развернуто, а затем соответствующее меню сдвигалось вниз. – JakeLabz

+0

Как-то slideDown как обратный вызов в slideUp дождался завершения слайд-зала. Использование slideToggle() вместо этого даст эффект от того, что хочет OP. – Edward

+0

Я боюсь, что slideToggle не дает мне эффекта, который я хочу, во-первых, после добавления дополнительных пунктов меню кажется, что он немного разозлился (когда я применил его к рабочей версии, он будет скользить вверх и вниз примерно 6 раз и затем оставайтесь!) [см. здесь] (http://jsfiddle.net/JakeLabz/29TyG/). Также это означает, что при повторном повторении одного и того же элемента меню элемент списка перемещается вверх и вниз снова, и я не хочу этого. – JakeLabz