js实现css的animation效果

使用需求:

实现css的animation的帧动画效果,使用css做在ios手机上面会一闪一闪的,
岁就用到了js的写法,之前在网上看了好多种方法,大多数都是把图片地址放
到一个数组里面,然后通过循环来改变图片的地址的方式,这种方式可以看到
页面会一直请求图片,造成死循环

我的解决方案 :

let imgUrl = './jpg/';
let index = [1,24];
let maxLength = index[1] - indexLength[0] + 1;
//loading
let eleDiv = document.getElementById("box");
let eleLoading = document.getElementById("loading");
const store = {
			length:0
		}
//图片序列预加载
        //帧动画分享开始
        var urlRoot = './jpg/';
        var indexRange = [1, 24];
        var maxLength = indexRange[1] - indexRange[0] + 1;
        // loading
        var eleContainer = document.getElementById('container');
        var eleLoading = document.getElementById('loading');
        // 存储预加载的DOM对象和长度信息
        var store = {
            length: 0
        };
        // 图片序列预加载
        for (var start = indexRange[0]; start <= indexRange[1]; start++) {
            (function(index) {
                var img = new Image();
                img.onload = function() {
                    store.length++;
                    // 存储预加载的图片对象
                    store[index] = this;
                    play();
                };
                img.onerror = function() {
                    store.length++;
                    play();
                };
                img.src = urlRoot + 'anim' + index + '.jpg';
            })(start);
        }

        var play = function() {
            var percent = Math.round(100 * store.length / maxLength);
            if (percent == 100) {
                var index = indexRange[0];
                eleContainer.innerHTML = '';
                var step = function() {
                    if (store[index - 1]) {
                        eleContainer.removeChild(store[index - 1]);
                    }
                    eleContainer.appendChild(store[index]);
                    index++;
                    if (index <= indexRange[1]) {
                        setTimeout(step, 190);
                    } else {
                        index = indexRange[0];
                        step();
                    }
                };
                setTimeout(step, 50);
            }
        };

html代码

            <div id="container" class="container anima">
             <span id="loading" class="loading"> </span>
            </div>

css样式

.anima {
    width: 100%;
    height: 100%;
}
.loading {
    position: absolute;
    width: 7.5rem;
    height: 6.67rem;
    background-size: 100% 100%;
    background-repeat: no-repeat;
    background-position: center;
}

.loading>img {
    width: 100%;
    height: 100%;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值