美文网首页
css animation背景图切换在iOS下的bug

css animation背景图切换在iOS下的bug

作者: 躺在家里干活 | 来源:发表于2019-08-29 09:46 被阅读0次

    animation切换背景图在iOS的休眠转态重新唤醒时造成背景图为空

    1. 首先遇到的问题

    有个项目需要用css animation 来切换背景图,简单来说就是这样:

    @keyframes toggle-bg{
        from{
             background-image: url(img/bg1.png);
        }
        to{
             background-image: url(img/bg2.png);
        }
    }
    

    正常情况下就是两张背景图在不断的切换,但是在iOS中只要此页面休眠(界面跳出去重新跳回来不刷新页面或者屏幕休眠)后重新唤醒时页面的背景图全部消失。但是在安卓机中完全没有这样的现象。


    image

    2.解决方法

    此问题的解决方法其实很简单,不能用css的animation那咱就直接用js定时器改变背景图来搞定它,但是我不太喜欢直接在js中改变背景图,所以我通过切换类名方法改变背景图,具体如下:

    /*css*/
    .lottery{
            background-image: url(../../img/market/dragon/bg1.png);
    }
    .lottery.light{
        background-image: url(../../img/market/dragon/bg2.png);
    }
    /*js*/
    setInterval(function(){
        $('.lottery').toggleClass('light');
     },500)
    
    

    然鹅你以为这样就结束了??你错了。。。。
    如果你的页面内容很少加载很快,那么恭喜你,你的工作已经结束了,但是真正的项目中内容稍多,所以加载稍慢,于是会出现下面的情况:


    image

    原因是bg2还没有加载到就执行了定时器

    3.解决图片没加载就执行定时器问题

    这个就更简单了,用$(function(){})只是页面加载完毕,外链的内容不一定全部加载完毕。所以需要用到img.onload=function(){} 代码如下:

    var img=new Image();
    img.src='xxxxxx.png'
    img.onload=function(){
        setInterval(function(){
            $('.lottery').toggleClass('light');
        },500)
    }
    

    之前用了window.onload方法去实现此功能,电脑端完好但是手机端还是会存在图片没有加载到的问题,因此放弃了window.onload方法。不过注意一个细节,window.onload方法在页面中只能用一次,所以千万不要写多个window.onload方法。$(function(){})没有要求,可以写多个都不影响。
    至此,完美的解决了。


    image

    我的个人博客,有空来坐坐

    相关文章

      网友评论

          本文标题:css animation背景图切换在iOS下的bug

          本文链接:https://www.haomeiwen.com/subject/fgpbectx.html