是否有一种方法来动画显示:none显示:块使用CSS,使隐藏的div滑动而不是突然出现,或者我应该去这个不同的方式?
$(document).ready(function() {
$('#box').click(function() {
$(this).find(".hidden").toggleClass('open');
});
});
#box {
height:auto;
background:#000;
color:#fff;
cursor:pointer;
}
.hidden {
height:200px;
display:none;
}
.hidden.open {
display:block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="box">
Initial Content
<div class="hidden">
This is hidden content
</div>
</div>
和JSFiddle
是的,有一个方法:http://jsfiddle.net/6C42Q/12/
通过使用CSS3过渡,并操纵高度,而不是显示属性:
.hidden {
height: 0px;
-webkit-transition: height 0.5s linear;
-moz-transition: height 0.5s linear;
-ms-transition: height 0.5s linear;
-o-transition: height 0.5s linear;
transition: height 0.5s linear;
}
.hidden.open {
height: 200px;
-webkit-transition: height 0.5s linear;
-moz-transition: height 0.5s linear;
-ms-transition: height 0.5s linear;
-o-transition: height 0.5s linear;
transition: height 0.5s linear;
}
更多在这里:滑动div点击纯CSS?
既然您已经在使用jQuery,那么最简单的事情就是使用slideDown()。http://api.jquery.com/slidedown/
还有slideToggle()
那么你就不需要手动做所有浏览器特定的转换css。
我喜欢CSS过渡的想法,但它仍然非常跳跃。有时max-height必须设置为一个非常高的数字,因为动态内容会使过渡毫无用处,因为它非常跳跃。所以,我回到了jQuery,但它有自己的缺点。内联元素是跳跃的
我发现这个对我有用:
$(this).find('.p').stop().css('display','block').hide().slideDown();
停止符停止之前的所有转换。css确保它被视为块元素,即使它不是。hide会隐藏该元素,但jquery会将其记住为块元素。最后,slideDown通过滑动来显示元素
$("#yourdiv").animate({height: 'toggle'})
;
Toggle会打开/关闭你的div,动画会让它从下面出现。在这种情况下,您不需要特定的CSS来"隐藏"它。
我们可以用visibility: hidden
to visibility: visible
来代替display: none
to display: block
的属性。
请看下面的例子:
function toggleSlide () {
const div = document.querySelector('div')
if (div.classList.contains('open')) {
div.classList.remove('open')
} else {
div.classList.add('open')
}
}
div {
visibility: hidden;
transition: visibility .5s, max-height .5s;
max-height: 0;
overflow: hidden;
/* additional style */
background: grey;
color: white;
padding: 0px 12px;
margin-bottom: 8px;
}
div.open {
visibility: visible;
/* Set max-height to something bigger than the box could ever be */
max-height: 100px;
}
<div>
<p>First paragraph</p>
<p>Second paragraph</p>
</div>
<button
onclick="toggleSlide()"
>
toggle slide
</button>
我在我的React站点中为导航头做了这个解决方案。
这是一个常规的可见css类
.article-header {
position: fixed;
top: 0;
transition: top 0.2s ease-in-out;
}
这是附加到div上的类(在我的例子中是滚动时)
.hidden {
top: -50px !important;
transition: top 0.5s ease-in-out;
}
也可以使用
$('#youDiv').slideDown('fast');
或者你可以告诉活动的div向上然后被调用的div向下
$('.yourclick').click(function(e) {
var gett = $(this).(ID);
$('.youractiveDiv').slideUp('fast', function(){
$('.'+gett).slideDown(300);
});
});
差不多。