Подтвердить что ты не робот

JQuery - Аккордеонный эффект на столе

У меня возникли трудности с реализацией эффекта аккордеона в трех разных таблицах с использованием jQuery, и я мог бы использовать некоторую помощь. Сейчас это работает o.k. Когда я нажимаю на строки заголовка, отображаются следующие строки, но мне нужен какой-то тип анимации. Я также хотел бы, чтобы первое полное шоу было полностью, но я новичок, и это выше моей головы.

Вот мой HTML.

<table class="research">
                <tbody>
                    <tr class="accordion">
                        <td colspan="3">This is the header</td>
                    </tr>
                    <tr>
                        <td>Research</td>
                        <td>Description</td>
                        <td>Partner</td>
                    </tr>
                    <tr>
                        <td>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</td>
                        <td>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</td>
                        <td>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</td>
                    </tr>
                </tbody>
            </table>

            <table class="research">
                <tbody>
                    <tr class="accordion">
                        <td colspan="3">This is the header</td>
                    </tr>
                    <tr>
                        <td>Research</td>
                        <td>Description</td>
                        <td>Partner</td>
                    </tr>
                    <tr>
                        <td>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</td>
                        <td>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</td>
                        <td>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</td>
                    </tr>
                </tbody>
            </table>

            <table class="research">
                <tbody>
                    <tr class="accordion">
                        <td colspan="3">This is the header</td>
                    </tr>
                    <tr>
                        <td>Research</td>
                        <td>Description</td>
                        <td>Partner</td>
                    </tr>
                    <tr>
                        <td>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</td>
                        <td>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</td>
                        <td>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</td>
                    </tr>
                </tbody>
            </table>

И вот мой jQuery:

$(function() {
  $(".research tr:not(.accordion)").hide();
  $(".research tr:first-child").show();
  $(".research tr.accordion").click(function(){
  $(this).nextAll("tr").toggle();
    });
  });
4b9b3361

Ответ 1

$(function() {
  $(".research tr:not(.accordion)").hide();
  $(".research tr:first-child").show();

  $(".research tr.accordion").click(function(){
      $(this).nextAll("tr").fadeToggle(500);
  }).eq(0).trigger('click');
});

.fadeToggle(500); анимирует отображение элементов, а не просто показывать/скрывать их.

.eq(0).trigger('click'); запускает щелчок по первому заголовку, чтобы содержимое отображалось при загрузке страницы.

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

Вот демо: http://jsfiddle.net/Xqk3m/

Update

Вы также можете немного оптимизировать свой код, кешируя селектор .research:

$(function() {
    var $research = $('.research');
    $research.find("tr").not('.accordion').hide();
    $research.find("tr").eq(0).show();

    $research.find(".accordion").click(function(){
        $(this).siblings().fadeToggle(500);
    }).eq(0).trigger('click');
});

В этом примере я также удалил все селектора строк в пользу выбора функций (например, использовал .not() вместо :not()). Функции для обхода DOM быстрее, чем установка селекторов в строке.

Вот демо: http://jsfiddle.net/Xqk3m/1/

Update

И последнее, но не менее важное: если вы хотите, чтобы это был аккордеон, где, когда вы открываете один раздел, остальные закрываются, вот решение:

$(function() {
    var $research = $('.research');
    $research.find("tr").not('.accordion').hide();
    $research.find("tr").eq(0).show();

    $research.find(".accordion").click(function(){
        $research.find('.accordion').not(this).siblings().fadeOut(500);
        $(this).siblings().fadeToggle(500);
    }).eq(0).trigger('click');
});

$research.find('.accordion').not(this).siblings().fadeOut(500); - важная часть, она выбирает все элементы .accordion, кроме тех, которые были нажаты, а затем находит братьев и сестер всех элементов .accordion, выбранных и скрывающих их.

Вот демо: http://jsfiddle.net/Xqk3m/2/

Ответ 2

я добавил эффект затухания. Проверьте это - http://jsfiddle.net/XE6AG/1/

    $(function() {
      $(".research tr:not(.accordion)").hide();
      $(".research tr:first-child").show();
      $(".research tr.accordion").click(function(){
      $(this).nextAll("tr").fadeToggle();
       });
    });

это быстрее - http://jsfiddle.net/XE6AG/2/

    //this is fast
    $(function() {
      $(".research tr:not(.accordion)").hide();
      $(".research tr:first-child").show();
      $(".research tr.accordion").click(function(){
      $(this).nextAll("tr").fadeToggle("fast");
       });
    });

этот действительно очень медленный - http://jsfiddle.net/XE6AG/3/

    //this is fast
    $(function() {
      $(".research tr:not(.accordion)").hide();
      $(".research tr:first-child").show();
      $(".research tr.accordion").click(function(){
      $(this).nextAll("tr").fadeToggle("fast");
       });
    });

вы также можете добавить к нему облегчение, например - http://jsfiddle.net/XE6AG/4/.