2015-04-20 2 views
0

У меня есть ряд аккордеонов, что активировать с помощью следующего кода:Слушатели событий onclick()? - аккордеон

$(function() { 
     $(".specialreveal").hide(); 
     $('[href="#"]').attr('href', 'javascript:void(0)'); 
     $(document).on("click", "a.biobutton", function() { 

      var $currentSection = $(this).closest(".biowrapper").find(".specialreveal").toggle('slow').end(); 

      //If you want to hide all other `specialreveal` sections 
     $(".biowrapper").not($currentSection).find(".specialreveal").hide('fast').end(); 



     }); 

    }); 

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

$(".biowrapper").click(function() { 
     $('html,body').delay(1200).animate({scrollTop: $(this).offset().top}, 800); 

}); 

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

Я пробовал устанавливать задержку(), trigger() и такие, но я не могу понять, что это правильно.

Я хочу, чтобы у вас была возможность прокрутить вверх, ПОСЛЕ того, как предыдущий тег закрывается и открывается новый.

ответ

0

Проблема заключается в том, что offset().top рассчитывается немедленно, а затем сохраняется для последующего использования на animate.

Просто используйте таймер, чтобы задержать операцию вместо:

$(".biowrapper").click(function() { 
    setTimeout(function(){ 
     $('html,body').animate({scrollTop: $(this).offset().top}, 800); 
    }, 1200); 
}); 

В идеале вы бы вместо того, чтобы слушать на предыдущую операцию до конца через событие на самом аккордеоне

+0

Я пытался, но он по-прежнему портит его. Может быть, причина в том, что математика все еще накапливается сначала с открытыми двумя вкладками и только делает это задержка ...? – Deedub

+0

В приведенном примере выполняется расчет в обратном вызове (после 1200 миллисекунд). Лучше всего вы посмотрите на второй вариант (события на аккордеоне). –

0

Похоже, вы хотите, чтобы ваш прокрутка для запуска на событии activate

Запуск после активации панели (после завершения анимации)

$(".biowrapper").accordion({ 
    activate: function(evt, ui) { 
     $('html,body').animate({ 
      scrollTop: $(this).offset().top 
     }, 800); 
    } 
}); 
+0

xcept не используя jquery .accordion ..? будет ли все еще работать? – Deedub

+1

@Deedub, то почему вы отметили вопрос 'jquery' /' accordion'? Если какая-либо библиотека, которую вы используете, также имеет событие активизации, тогда я бы сказал, что нет ... – James

+0

Потому что это jquery, но просто не использует их функцию аккордеона, вместо этого используется toggle. – Deedub

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