html图片加载显示同意背景,监听CSS背景图片加载进度

今天在开发中发现背景图片很大,需要控制加载进度,如果是img可以很好的监听到,但是在css中我们该如何操作呢

首先是提取CSS背景图的地址,然后通过js监听加载进度

加载图片

这是监控图片加载是否完成的核心部分,最后返回一个promise

export const loadImage = url => new Promise((resolve, reject) => {

let image = new Image()

image.onload = () => {

resolve(url)

image = undefined

}

image.onerror = () => reject(url)

image.src = url

})

批量加载图片

根据传入进来的url加载,可以是一个数组,也可以是一个字符串,最后返回一个promise

export const loaderUrls = (params) => {

let urls = []

switch (Object.prototype.toString.call(params)) {

case '[object String]':

urls = [params]

break

case '[object Array]':

urls = [...params]

break

default:

urls = []

}

const promiseAll = urls.map(url => loadImage(url))

return Promise.all(promiseAll)

}

提取图片地址

在css中的图片要使用特殊的方法提取,提取出来的地址是 url(http://xxxxx)所以要截取字符串

export const cssUrl = (ele) => {

const urlPre = window.getComputedStyle(ele).backgroundImage

return urlPre.substring(5, urlPre.length - 2)

}

批量提取图片地址并批量加载图片

在元素中批量提取图片地址,也可以是单个元素(仅支持div标签),并调用批量加载图片方法

export const eleLoaderImages = (eles) => {

let urls = []

switch (Object.prototype.toString.call(eles)) {

case '[object HTMLDivElement]':

urls = cssUrl(eles)

break

case '[object Array]':

urls = eles.map(ele => cssUrl(ele))

break

default:

urls = []

}

return loaderUrls(urls)

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值