gpt4 book ai didi

jquery - 导航 dom 来调整自定义 jQuery Accordion

转载 作者:行者123 更新时间:2023-12-01 01:23:01 24 4
gpt4 key购买 nike

我的 Accordion 工作正常,当你拉下 Accordion 时,它工作得非常好,但当你拉回来时,它有点小故障。

我希望这样当您单击 header 时,它将打开该 header 中的内容并将页面顶部锚定到 header 顶部。我知道我需要用伪代码做什么,但不确定如何处理代码。

这是我的 HTML:

<html>
<head>
<meta>
<title></title>
<link rel="stylesheet" href="made-insider.css">
</head>
<body>
<div class="accordion">
<div id="one" class="masthead"></div>
<div class="insider-info"></div>

<div id="two" class="masthead"></div>
<div class="insider-info"></div>

<div id="three" class="masthead"></div>
<div class="insider-info"></div>

<div id="four" class="masthead"></div>
<div class="insider-info"></div>
</div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="made-insider.js"></script>
</body>
</html>

这是我的 jQuery:

$(function() {

//Checking the position of panels
var allPanels = $('.insider-info').hide();

//working accordion code -- needs to be smoother
$('.accordion > .masthead').click(function(event) {

if ($(this).hasClass('active')) {
$(this).removeClass('active')
.next(allPanels).slideUp(400);
} else {
var topPos = $(this).position();
$('.active').removeClass('active')
.next(allPanels).slideUp(400);
//if the previous accordion is open
$('body').animate({ scrollTop: topPos.top - 200}, 600);
//if the previous accordion is not open
//$('body').animate({ scrollTop: topPos.top}, 600);
$(this).addClass('active')
.next(allPanels).slideDown(400);
}
});

});

我尝试过类似的事情

if ($(this).prev('.masthead').hasClass('.active')){
behavior
},


if ($(this).prev().prev().hasClass('.active'){
behavior
}

if ($(this).eq() < $('div.active').eq()){
behavior
}

但它们都不起作用。有什么建议吗??

最佳答案

问题在于,在您从当前拥有类 .active 的任何元素中删除类 .active 后,代码中需要知道 .active 索引的位置就会运行。

解决方案:移动这段代码

$('.active').removeClass('active')
.next(allPanels).slideUp(400);

到事件处理程序的末尾,就在将类 .active 添加到新的事件元素之前。

那么你要寻找的条件是

if ($('.active').length && $('.active').index() < $(this).index()) {
// the previously active accordion is above the new one (we're moving down)
}

所以,总的来说,您的代码将如下所示:

$('.accordion > .masthead').click(function (event) {

if ($(this).hasClass('active')) {
$(this).removeClass('active')
.next(allPanels).slideUp(400);
} else {
var topPos = $(this).position();

// the previously active accordion is above the new one
if ($('.active').length && $('.active').index() < $(this).index()) {
$('body').animate({
scrollTop: topPos.top - 200
}, 600);
} else { // the previously active accordion is below the new one, or there was no previous accordion
$('body').animate({
scrollTop: topPos.top
}, 600);
}

$('.active').removeClass('active')
.next(allPanels).slideUp(400);
$(this).addClass('active')
.next(allPanels).slideDown(400);
}
});

JSFiddle Here

关于jquery - 导航 dom 来调整自定义 jQuery Accordion ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30245616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com