【发布时间】:2013-12-14 08:56:34
【问题描述】:
我编写了少量代码来尝试复制 jQuery 的 .fadeIn() 和 .fadeOut() 函数,使用 CSS 过渡以在触摸设备上看起来更好。
理想情况下,我希望避免使用库,这样我就可以准确地编写我想要的内容,并作为学习练习。
fadeOut 运行良好。
fadeIn 的想法是使用 CSS3 过渡来调整元素的不透明度,之后该元素将被设置为 display:block;(使用 is-hidden 类)以确保它仍然不能被点击或覆盖下面的东西它。
fadeIn 不工作。我认为这是由于在删除 is-hiding 类的同时添加了 is-animating 类。由于没有发生转换,因此不会触发 transitionEnd 事件:
function fadeIn (elem, fn) {
var $elem = $(elem);
$elem.addClass('is-animating');
$elem.removeClass('is-hidden');
$elem.removeClass('is-hiding');
$elem.on(transitionEndEvent, function () {
$elem.removeClass('is-animating');
if (typeof fn === 'function') {
fn();
}
});
};
还有 CSS
.is-animating {
@include transition(all 2000ms);
}
.is-hiding {
// Will transition
@include opacity(0);
}
.is-hidden {
// Won't transition
display: none;
}
这是代码:CodePen link
更新:我发现了我所说的 hack,但效果很好:CSS3 replacement for jQuery.fadeIn and fadeOut
此修复后的工作代码:Fixed
没有setTimeout 的解决方案将非常有价值。
【问题讨论】:
标签: javascript jquery css css-transitions transition