使用元素的属性做动画效果

如何使用JS和CSS3进行动画处理,例如淡入淡出,滑动或仅切换显示和隐藏。


JavaScript中的动画并不难实现。 例如,两个函数的行为类似于jQuery的$.fadeIn()$.fadeOut()


// fade an element from the current state to full opacity in "duration" ms
function fadeOut(el, duration) {
    var s = el.style, step = 25/(duration || 300);
    s.opacity = s.opacity || 1;
    (function fade() { (s.opacity -= step) < 0 ? s.display = "none" : setTimeout(fade, 25); })();
}

// fade out an element from the current state to full transparency in "duration" ms
// display is the display style the element is assigned after the animation is done
function fadeIn(el, duration, display) {
    var s = el.style, step = 25/(duration || 300);
    s.opacity = s.opacity || 0;
    s.display = display || "block";
    (function fade() { (s.opacity = parseFloat(s.opacity)+step) > 1 ? s.opacity = 1 : setTimeout(fade, 25); })();
}
      

这些函数运行良好,您可以使用它们为JavaScript中的任何数值设置动画。 例如,使用元素的高度上下滑动它。 对于跳动,缓动和倒带等高级动画,最好使用经过质量高的的插件,如 TinyAnimations、Velocity 或 GSAP。

但是,将JavaScript用于没有特殊效果的相当简单的动画可能不是最佳选择。 对于诸如淡入淡出,滑动,定位或只是隐藏之类的事情,创建具有CSS3过渡的类并根据需要将这些类添加/删除到元素通常更容易(更快)。

这是一个在CSS3过渡的帮助下幻灯片切换元素的工作演示:

在此示例中,我们利用了plainJS类的助手hasClass(),addClass()removeClass()。 完成任务的基本JavaScript仅包含一个很小的代码片段:


function toggle(el) {
    hasClass(el, 'is_hidden') ? removeClass(el, 'is_hidden') : addClass(el, 'is_hidden');
}
      

CSS3动画可以在IE 10及以下版本的现代浏览器中运行。通过隐藏/显示该元素,IE 9及以下版本可正常降级。 它不是jQuery animate()函数的简单替代,但是经过少量的代卖,就可以用非常简单的方法完成惊人的任务。