CSS 背景图加载完成后的过渡动画

直接给背景图设置动画效果会出现图片因加载过慢而显示效果不佳的情况,可以通过 JavaScript 来获取图片的加载状态。
下面来实现一个背景图片透明度渐变的效果。

首先来设置要添加背景动画的元素样式

main#background {
    width: 100%;
    height: 100%;
    opacity: 0;
    background-size: cover;
    animation-delay: 0s;
    animation-duration: 1s;
    animation-fill-mode: forwards;
    animation-timing-function: ease;
}
  1. 通过 opacity: 0; 来设置背景图片加载完成之前元素的状态为不可见,这样就能够避免加载过程时的图片卡顿
  2. 通过 animation-fill-mode: forwards; 来设置元素停留在动画完成后的样式,即透明度为 1,元素状态为可见

下面来定义动画

@keyframes fadein {
    0% { opacity: 0; }
    100% { opacity: 1; }
}
  1. 动画效果为透明度从 0 到 1

接下来通过 js 来获取图片的加载状况

var background = new Image();
background.src = 'https://static.pexels.com/photos/57772/pexels-photo-57772.jpeg';
background.onload = function () {
    console.log('Background load complete!');
    var loadbackground = document.getElementById('background');
    loadbackground.style.backgroundImage = 'url(' + background.src + ')';
    loadbackground.style.animationName = 'fadein';
}
  1. 首先来创建一个图片对象
  2. 通过 src 属性来设置图片的链接地址
  3. 为图片对象添加 onload 回调函数,图片加载完成将调用此函数,所以我们将在此函数中实现元素的过渡动画
  4. 获取到将要设置背景图片的元素
  5. 通过 style 属性来设置该元素的背景图片及动画名

通过以上设置我们便能够实现背景图片的过渡效果了!

完整代码:

https://github.com/saynot/y-n-o/blob/master/css-javascript/background-loaded-animation.html


本文结束,感谢阅读!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,715评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,226评论 4 61
  • 昨晚又在公司加班到到3点,于是就睡在公司了,朋友给我分享了一篇和菜头的文章,看完很有感触,一直把菜头叔视为人生偶像...
    知鱼君阅读 3,077评论 0 0
  • 原始的爱斯基摩人将捕获的鱼,先埋在地下直到稍微腐烂再吃。因为所有有生命的组织都含有一种东西----酵素,而酵素先行...
    小白老郑阅读 4,117评论 0 2
  • 一、直播现状简介 1.技术实现层面: 技术相对都比较成熟,设备也都支持硬编码。IOS还提供现成的 Video To...
    stlndm阅读 61,635评论 220 869