2016-11-24 32 views
0

当我正在做我自己的插件(自我实践)Accordion.js可切换的手风琴 - 效果基本show等活性手风琴单击当前一个

每一个手风琴具有相同的类和我通过jQuery初始化他们都: 我手风琴切换/的slideToggle本身,当点击多次,我只是想,只要我点击另一个手风琴,它会效果基本show你点击前面的手风琴和的slideToggle的另一个当你多次

继承人我的代码吗

(function($) { 
 
$.fn.accordion = function() { 
 
var accordion = this; 
 

 
accordion.find('.title').click(function() { 
 
$(this).parent('.accordion').find('.content').slideToggle(200); 
 
$(this).toggleClass('active'); 
 
}); 
 
return this; 
 
}; 
 
    $('.accordion').accordion(); 
 
})(jQuery);
.accordion { 
 
width:100%; 
 
border:1px solid #ddd; 
 
border-radius:6px; 
 
margin:5px 0px; 
 
} 
 
.accordion > .title { 
 
padding:10px; 
 
font-weight:bold; 
 
} 
 
.accordion > .title + .content { 
 
padding:0px 10px 10px 10px; 
 
display:none; 
 
} 
 
.accordion > .title > .icon { 
 
position:relative; 
 
right:-84%; 
 
-webkit-transform:rotate(90deg); 
 
color:#666; 
 
transition:all 200ms linear; 
 
} 
 
.accordion > .title.active > .icon { 
 
-webkit-transform:none; 
 
color:#666; 
 
transition: all 200ms linear; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<div class="accordion"> 
 
<div class="title">Open 
 
<i class="dropdown icon"></i> </div> 
 
<div class="content"> 
 
<h1> Accordion 1</h1> 
 
</div> 
 
</div> 
 
<div class="accordion"> 
 
<div class="title">Open 
 
<i class="dropdown icon"></i> </div> 
 
<div class="content"> 
 
<h1> Accordion 2</h1> 
 
</div> 
 
</div> 
 
<div class="accordion"> 
 
<div class="title">Open 
 
<i class="dropdown icon"></i> </div> 
 
<div class="content"> 
 
<h1> Accordion 3</h1> 
 
</div> 
 
</div> 
 
<div class="accordion"> 
 
<div class="title">Open 
 
<i class="dropdown icon"></i> </div> 
 
<div class="content"> 
 
<h1> Accordion 4</h1> 
 
</div> 
 
</div>
点击它

回答

1

这里是你所需要的。这里的方法是我已经将活动类添加到内容div,然后在切换窗格时将其删除。并且滑动除了用户点击的窗格(即具有活动类的窗格)以外没有活动类的所有窗格。希望能帮助到你。

$.fn.accordion = function() { 
 
var accordion = this; 
 
accordion.find('.title').click(function() { 
 
$(document).find('.title').removeClass('active'); 
 
$(document).find('.content').removeClass('active'); 
 
$(this).parent('.accordion').find('.content').slideToggle(200).toggleClass('active'); 
 
$(this).toggleClass('active'); 
 
$('.content:not(".active")').slideUp(200); 
 
}); 
 
return this; 
 
}; 
 

 
$('.accordion').accordion();
.accordion { 
 
width:100%; 
 
border:1px solid #ddd; 
 
border-radius:6px; 
 
margin:5px 0px; 
 
} 
 
.accordion > .title { 
 
padding:10px; 
 
font-weight:bold; 
 
} 
 
.accordion > .title + .content { 
 
padding:0px 10px 10px 10px; 
 
display:none; 
 
} 
 
.accordion > .title > .icon { 
 
position:relative; 
 
right:-84%; 
 
-webkit-transform:rotate(90deg); 
 
color:#666; 
 
transition:all 200ms linear; 
 
} 
 
.accordion > .title.active > .icon { 
 
-webkit-transform:none; 
 
color:#666; 
 
transition: all 200ms linear; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<div class="accordion"> 
 
<div class="title">Open 
 
<i class="dropdown icon"></i> </div> 
 
<div class="content"> 
 
<h1> Accordion 1</h1> 
 
</div> 
 
</div> 
 
<div class="accordion"> 
 
<div class="title">Open 
 
<i class="dropdown icon"></i> </div> 
 
<div class="content"> 
 
<h1> Accordion 2</h1> 
 
</div> 
 
</div> 
 
<div class="accordion"> 
 
<div class="title">Open 
 
<i class="dropdown icon"></i> </div> 
 
<div class="content"> 
 
<h1> Accordion 3</h1> 
 
</div> 
 
</div> 
 
<div class="accordion"> 
 
<div class="title">Open 
 
<i class="dropdown icon"></i> </div> 
 
<div class="content"> 
 
<h1> Accordion 4</h1> 
 
</div> 
 
</div>

Fiddle Demo

+0

最后有人做得很完美,非常感谢你兄弟:) – Jeffson

+0

@Jeffson欢迎您。总是乐于帮助:)如果这有助于您将其标记为答案。 – Manish

+0

哦对不起,我忘了在它上面留下一个标记hehehe – Jeffson

0

试试这个简单的解决方案

//inside your function body after var accordion = this; 
var trigger = accordion.find('.title'); 

trigger.on("click",function() { 
    if ($(this).hasClass('active')) { 
     $(this).removeClass('active').next('.content').slideUp(200); 
    } else { 
     accordion.find('.content').slideUp(200); 
     trigger.removeClass('active'); 
     $(this).addClass('active').next('.content').slideDown(200); 
    } 
}); 
+0

不正是我找谁 – Jeffson

+0

你这是什么意思?如果你不想连续关闭/折叠beahaviour当单击相同的手风琴标题,然后将所有内容都包含在点击函数中,如果构造:if(!$(this).hasClass('active')){ - do code}。否则,我建议考虑更准确地描述你的情况 – RysQ

+0

我只想要一个手风琴,当点击时自己滑动,当点击另一个时自动关闭,无论如何,活动的类只影响'.title'类的孩子,而不是手风琴本身 – Jeffson

0

您还可以使用each功能fiddle

JS:

$.fn.accordion = function() { 
var accordion = this; 

accordion.find('.title').click(function() { 

$(document).find('div.accordion').each(function(){ 
$(this).find('.content').slideUp(200); 
}); 
$(this).parent('.accordion').find('.content').slideToggle(200); 
$(this).toggleClass('active'); 
}); 
return this; 
}; 

$('.accordion').accordion(); 
+0

。 – Manish

+0

我认为这可能有帮助! [小提琴](https://jsfiddle.net/h621g3x8/#&togetherjs=iKN6xSwiAo) – RonyLoud

+0

vispan:几乎接近我的预期,但是,它不滑滑动自己点击多次 – Jeffson