Пользовательский аккордеон jQuery — прокрутите вверх активной панели

У меня проблема с пользовательским аккордеоном jQuery. Я не могу использовать аккордеон в пользовательском интерфейсе jQuery, поэтому я застрял в пользовательском решении.

Я создал скрипт здесь: https://jsfiddle.net/1x11ceev/9/

Мой jQuery:

var allPanels = $('#accordion > .acc-item > .container > .content-text').hide();

$('#accordion > .acc-item').click(function() {

    if ($(this).hasClass('active')) {
        allPanels.slideUp();
        allPanels.parent().parent().removeClass('active');
    }else{
    allPanels.slideUp();
    allPanels.parent().parent().removeClass('active');
    $(this).addClass('active');
    $(this).children().children('.content-text').slideDown();
       return false;
    }
    $('html, body').animate({scrollTop: $(this).offset().top + 100 }, 'slow');

});`

Мне нужно, чтобы активная панель скользила вверх (со смещением, так как у меня фиксированный заголовок). Я пытался использовать ScrollTop, но безрезультатно. Текущее поведение: если я расширяю первый раздел, затем прокручиваю вниз до второго раздела и расширяю его, первый раздел сворачивается, поэтому высота документа уменьшается, а затем второй раздел вытягивается из области просмотра.

Мои навыки jQuery ограничены. Любая помощь приветствуется.

Спасибо.


person user684511    schedule 14.05.2015    source источник
comment
Когда вы говорите «скользить вверх», вы имеете в виду, что хотите, чтобы вторая секция перемещалась в верхнюю часть аккордеона, например, при нажатии? то же самое относится к третьему разделу?   -  person glend    schedule 14.05.2015


Ответы (1)


Попробуй это.

Что вам нужно сделать, так это переместить прокрутку только после завершения анимации активного слайда. slideDown принимает функцию как полный обратный вызов. Поэтому я переместил ваш код прокрутки в эту функцию.

И чтобы иметь некоторый запас сверху, 100 должно быть минусом, а не добавлено к scrollTop.

var allPanels = $('#accordion > .acc-item > .container > .content-text').hide();
    
  	$('#accordion > .acc-item').click(function() {

  		if ($(this).hasClass('active')) {
  			allPanels.slideUp();
  			allPanels.parent().parent().removeClass('active');
  		}else{
    	allPanels.slideUp();
    	allPanels.parent().parent().removeClass('active');
    	$(this).addClass('active');
    	$(this).children().children('.content-text').slideDown(
            function(){
                debugger;
                $('html, body').animate({scrollTop: $(this).offset().top - 100 }, 'slow');
            }
        );
           return false;
    	}
        

	});
.acc-item { padding:45px 0 50px;}

#icecream { background:#ccc;}
#shakes { background: #ddd;}
#floats { background: #bbb;}
.acc-item .content-text{}
.acc-item h3 { margin:0}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="fillerText">
    <p>At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, At accusam aliquyam diam diam dolore dolores duo eirmod eos erat, et nonumy sed tempor et et invidunt justo labore Stet clita ea et gubergren, kasd magna no rebum. sanctus sea sed takimata ut vero voluptua. est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.</p>
</div>

<div id="accordion">

    <div id="icecream" class="home-section acc-item">
	    <div class="container clear">
            <h3>FIRST SECTION</h3>
            <div class="content-text">
                <p>Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</p>
                <p>Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</p>
                <p>Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</p>
                <p>Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</p>
            </div>
		</div><!--.container-->
	</div><!--#icecream-->

    <div id="shakes" class="home-section acc-item">
		<div class="container clear">
            <h3>SECOND SECTION</h3>
            <div class="content-text">
                <p>Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</p>
            </div>
        </div><!--.container-->
    </div><!--#shakes-->

	<div id="floats" class="home-section acc-item">
		<div class="container clear">
             <h3>THIRD SECTION</h3>
            <div class="content-text">
                <p>Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</p>
                <p>Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</p>
                <p>Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</p>
            </div>
		</div><!--.container-->
	</div><!--#floats-->			
</div><!--#accordion-->

<div class="fillerText">
    <p>At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, At accusam aliquyam diam diam dolore dolores duo eirmod eos erat, et nonumy sed tempor et et invidunt justo labore Stet clita ea et gubergren, kasd magna no rebum. sanctus sea sed takimata ut vero voluptua. est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.</p><p>At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, At accusam aliquyam diam diam dolore dolores duo eirmod eos erat, et nonumy sed tempor et et invidunt justo labore Stet clita ea et gubergren, kasd magna no rebum. sanctus sea sed takimata ut vero voluptua. est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.</p>
</div>

person Puneet    schedule 14.05.2015
comment
Спасибо. Вы очень ясно показали, где я был неправ в своем кодировании. - person Parapluie; 01.02.2019