【发布时间】:2015-12-29 23:19:17
【问题描述】:
带有过渡模块的 Bootstrap 3 包括一些实用程序类,用于通过淡入淡出动画显示和隐藏元素。当您有一个具有淡入淡出类的元素时,它的不透明度为 0。然后,当您向其中添加“in”类时,它的动画将不透明度设置为 1。
这样做的问题是元素不是display:none,所以占用空间。
Bootstrap 还包括实用程序类“hide”,它为您执行display:none 部分。以下是使用这些实用程序类的 HTML 中完全隐藏元素的示例:
<div id="sample" class="hide fade">
Originally hidden and faded out, then shown and faded in
</div>
理论上您应该能够取消隐藏(转换为阻止)然后淡入,如下所示:
$('#sample').removeClass('hide').addClass('in');
但是,这不起作用。浏览器的内部时间有些问题。我不确定是什么。最终结果是显示了元素,但没有淡入淡出动画。或者至少在 Chrome 中;我承认我没有测试其他浏览器,因为无论如何这需要在 Chrome 中运行。
现在,我确实有一个解决方案。我将“in”的添加延迟了片刻。这会使其正常工作:
var $sample = $('#sample');
$sample.removeClass('hide');
setTimeout(function() {$sample.addClass('in')}, 100);
哎呀,我什至可以将它抽象为一个实用函数并完成它。但是我有一个过度好奇(和迂腐)的部分,想知道这个 hack 是否有必要,或者我是否遗漏了一些东西。有没有人认为这样做更好、更不乏味?
这是一个 jsfiddle(一些标记更改以同时允许两个测试用例):https://jsfiddle.net/pmd6ow7r/
【问题讨论】: