在其他元素slideUp JQuery

时间:2018-03-24 07:56:15

标签: jquery

尝试让“元素”在“打开部分”slideUp()之后滚动到顶部。如果在$ this元素上方已经打开了一个部分,则由于先前打开的元素的slideUp(),滚动动画会滚过顶部。试图纠正这个。 .slideUp()。finish()和.slideUp()。stop(true,true)工作,但是slideUp()是立即的,看起来很麻烦。想法?

HTML

<div class='sectionContainer' data-section='1'>
    <div class='sectionTitle'>
    </div>
    <div class='section'>           
    </div>
</div>
<div class='sectionContainer' data-section='2'>
    <div class='sectionTitle'>
    </div>
    <div class='section'>
    </div>
</div>
<div class='sectionContainer' data-section='3'>
    <div class='sectionTitle'>
    </div>
    <div class='section'>
    </div>
</div>

Jquery的

$(document).ready(function() {
    $('.sectionTitle').click(function(i) {
        i.preventDefault();
        var section = $(this).attr('data-section');
        $('.section').not(section).slideUp('slow');
        $('html,body').animate({scrollTop: $(this).offset().top});
        $(section).slideDown('slow');               
    });    
});

1 个答案:

答案 0 :(得分:0)

$('.sectionTitle').click(function() {
    if (!$(this).parent().hasClass('active')) {
        $('.active .section').slideUp('slow');
        $('.sectionContainer').removeClass('active');
        $(this).parent().addClass('active');
        $(this).parent().children('.section').slideDown('slow', function() {
            $('html, body').animate({
                scrollTop: $(this).parent().offset().top - 69});
        });
    } else {
        $(this).parent().removeClass('active');
        $(this).parent().children('.section').slideUp('slow');
    }
});