改变.CSS() 当 .滑动切换()
Change .CSS() when .SlideToggle()
>我用jQuery做了一个手风琴,现在遇到了问题,当内容向上滑动时,图标应该变回来。对于其他手风琴,它工作正常,但实际上我不知道如何为活动手风琴实现它(如果你再次点击手风琴,你之前打开了)。图标随transform:rotate(90deg)
旋转。
$(document).ready(function(){
$(".preview").click(function(){
$(this).next(".accordion-invisible").slideToggle(200);
$(".accordion .accordion-invisible").not($(this).next()).slideUp(200);
$('span').css({
transform: 'rotate(0deg)',
bottom: '0px'
});
$(this).find("span").css({
transform: 'rotate(90deg)'
});
$(this).parents(".accordion").find("span").css({
transform: 'rotate(90deg)',
bottom: '10px'
});
});
});
我把我的整个代码放进了CodePen:你可以在这里找到它 有人知道吗?
重写一下click
绑定中的逻辑。
您可以将帮助程序class
(假设.active
)添加到当前活动的手风琴中。如果单击的元素具有类.active
您将知道将其关闭。否则检查另一个slide
是否.active
,关闭该并打开单击的那个。
$(document).ready(function(){
$(".preview").click(function(){
var $this = $( this );
if ($this.hasClass("active")) {
// the "clicked" element is already opened
// --> we just need to close it
$this.removeClass("active");
$this.parents(".accordion").find("span").css({transform:"rotate(0deg)", bottom:"0px"});
$this.next(".accordion-invisible").slideUp(200);
} else {
// the "clicked" element is not showing
var $currentActive = $(".preview.active");
if ($currentActive.length) {
// another element is opened
// we need to close it first
$currentActive.parents(".accordion").find("span").css({transform:"rotate(0deg)", bottom:"0px"});
$currentActive.next(".accordion-invisible").slideUp(200);
$currentActive.removeClass("active");
}
$this.next(".accordion-invisible").slideDown(200);
$this.parents(".accordion").find("span").css({transform:"rotate(90deg)", bottom:"10px"});
$this.addClass("active");
}
});
});
这是一支笔
在slideToggle
中创建一个回调函数,并在slideToggle
完成后在该函数中执行所需的操作。
$(document).ready(function(){
$(".preview").click(function(){
$(this).next(".accordion-invisible").slideToggle(200);
//PUT CALL FUNCTION IN FOLLOWING LINE
$(".accordion .accordion-invisible").not($(this).next()).slideUp(200,function(){
$('span').css({
transform: 'rotate(0deg)',
bottom: '0px'
});
$(this).find("span").css({
transform: 'rotate(90deg)'
});
$(this).parents(".accordion").find("span").css({
transform: 'rotate(90deg)',
bottom: '10px'
});
});
});
});
为了切换这样的手风琴,我使用 jQuery toggle() 函数。你不需要向上滑动和向下滑动,切换就足够了。这是代码,也适用于箭头。
$(document).ready(function(){
$(".preview").click(function() {
var acc = $(this).next(".accordion-invisible");
acc.toggle(200, function() {
if (acc.is(':visible')) {
acc.parent().find('.fa').css({
transform:'rotate(90deg)'
});
} else {
acc.parent().find('.fa').css({
transform: 'rotate(0deg)'
});
}
});
});
})
如果手风琴可见,则旋转箭头 90 度,否则旋转 0 度。检查代码笔以获取工作示例:http://codepen.io/LevelZwo/pen/jWXKOX?editors=0010
jquery SlideToggle 函数有一个回调作为第二个参数
$('foo').slideToggle( 200 , function() {
//do something with span rotation ...
})
也许,您需要尝试为此使用类和CSS过渡。例如,为当前幻灯片设置活动类。然后使用嵌套选择器进行跨度;
(.active span {transform: rotate(90deg)})
你可以(并且可能应该)用更少的代码来做到这一点。 下面是一个使用纯 CSS 进行过渡的示例;JavaScript 仅用于打开和关闭类名:
$(document).ready(function() {
$('.preview').click(function() {
$(this).closest('.accordion').toggleClass('active');
})
});
.preview {
cursor: pointer /* always indicate when something is clickable */
}
.accordion-invisible,
.accordion span.fa {
transition: all 1s; /* add browser prefixes as necessary */
}
.accordion-invisible {
max-height: 0px;
overflow: hidden;
}
.accordion.active .accordion-invisible {
max-height: 500px; /* pick something reasonable for your content */
}
.accordion.active span.fa {
transform: rotate(90deg);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
<div class="accordion">
<h2><span class="fa fa-chevron-right"></span>Hallöchen Popöchen</h2>
<p class="preview">Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p>
<div class="accordion-invisible">
<p>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, 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.</p>
<p>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, 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.</p>
</div>
</div>
<div class="accordion">
<h2><span class="fa fa-chevron-right"></span>Blindtext</h2>
<p class="preview">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.</p>
<div class="accordion-invisible">
<p>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, 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.</p>
<p>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, 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.</p>
</div>
</div>
- CSS或JS-当输入被聚焦时,改变输入的背景颜色
- 纯JavaScript中的Onclick滑块 - 事件不会改变CSS值
- HTML 按钮到大/CSS 不改变大小
- JavaScript 如果不是改变 CSS 的青春期
- CSS在IMG周围添加一个胖“框架”,而不改变IMG的位置
- JavaScript:任何改变CSS伪:before和:after的机会或替代方案
- JavaScript 可以改变@page CSS 的值吗?
- 为什么使用 grunt-contrib-cssmin 会改变我的 css,而它应该只缩小它
- AngularJS:重置angular.元素CSS改变
- 麻烦的CSS改变滑块上的开始位置
- 如何在不影响其他模态的情况下用CSS改变模态的宽度?
- 可以'不要用CSS改变表格中文本的颜色
- CSS改变样式/动画样式使用类或javascript
- Jquery/Javascript在CSS改变后只运行一次自定义函数
- jQuery/CSS -改变CSS类悬停的元素相同的href
- 拖,CSS改变后,Drop脚本开始崩溃
- 使用jQuery/javascript/css改变flash视频对象的属性
- 用CSS改变DOM元素顺序(鳄鱼)
- 如何动态地添加一个类到li项目,并使用javascript和css改变它的背景颜色
- 下拉选择器使用JS和CSS改变DIV的颜色