2009-07-23 2 views
1

Я знаю, что это просто для некоторых из вас, поэтому, пожалуйста, помогите мне! У меня есть 3 панели (div), которые я хочу сдвинуть один за другим, нажав кнопку. Раздвинуть одну панель легко, но как сместить несколько разделов по порядку? Спасибо.jQuery: раздвижные панели один за другим

+0

Нам действительно нужно увидеть какой-то код, который даст вам рабочий пример. – Sneakyness

ответ

1

Даже если мне очень нравится Kane's solution, вы можете найти его немного трудно понять, если вы не знаете, «анонимные функции» и особенности arguments.callee из JavaScript языка ,

После работы также:

$('#slideDiv').click(
    function(e) 
    { 
     e.preventDefault(); 
     var i = -1; 
     var divList = $(".slide"); 
     var animationCallback = function() 
      { 
       if(++i < divList.length) 
        $(divList[i]).slideUp('slow', animationCallback); 
        //Replace 'slideUp' with any other animation of your choice. Make sure to pass 'animationCallback' as the last parameter. 
        //e.g. you can do 
        //$(divList[i]).animate({ left : '300px'}, 100, 'linear', animationCallback); 
      }; 

     animationCallback(); 
    } 
); 

Demo Page →

EDIT:

Обновлено демонстрационной страницы. Добавлен комментарий о том, как использовать другую анимацию.

+0

Вы, ребята, потрясающие. 30 минут и посмотрите, что уже сделано! Anyhoo, вы правы, я не понимаю анонимных функций и т. Д. Однако, глядя на ваш код, я думаю, что длина списка определяет, когда начать анимацию следующего div? Что делать, если я хотел бы сдвинуть divs по горизонтали, справа налево? – lnvrt

+0

Длина списка определяет, нужно ли повторять очередную анимацию. Например. выше код будет работать, если вы добавите 4-й div с классом «слайд». Он будет анимировать 4-й дивизион, после того, как третий закончит анимацию. И если вам нужна другая анимация, замените метод «slideUp» соответствующим методом. Позвольте мне изменить код, чтобы показать вам, как это сделать. – SolutionYogi

+0

Я добавил немного CSS к http://jsbin.com/adaca/edit // делает это немного яснее ... – lnvrt

8

Дайте 3 div классу «.slide_panel», это будет проходить через них и выполнять анимацию на них.

$("#button").click(function() 
{ 
    var i = -1; 
    var arr = $(".slide_panel"); 
    (function(){ 
    if(arr[++i]) 
    $(arr[i]).animate({ left: "300px" }, 100, "linear", arguments.callee) 
    })(); 
}); 

Demo Page →

Code

+0

+100, Отличное использование arguments.callee! Вот рабочая демонстрационная страница. http://jsbin.com/utebe Я думал, что это может помочь автору понять, как должны быть структурированы DIV. – SolutionYogi

+0

Я отредактировал ваше сообщение, чтобы добавить ссылку на демонстрационную страницу, надеюсь, вы не против. – SolutionYogi

+0

Я бы только написал условие if немного по-другому. if (++ i SolutionYogi

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