js笔记之图片懒加载

最近负责的项目渐渐的由业务型转向营销型,营销内容越来越多,图片也就多了起来。图片一多起来问题就来了,一上来几十张图片加载起来半天都过去了,咋办?凉拌--懒加载

什么是懒加载

懒加载也叫延迟加载,本质上就是按需加载。只有当图片dom即将或者已经进入用户视线范围内的时候才去加载对应的dom图片。

懒加载的处理流程

首先,所有的图片标签加入懒加载队列lazyQueue,添加监听事件,同时对mousemove、wheel事件添加监听处理。
其次,所有img标签会首先加载同一张图片(减少http请求),这个图片一般是带有logo的默认图,或者是一张1px*1px的。
再次,首屏dom由于在视线范围之内,开始加载对应的真实图片,加载成功后将图片加入缓存成功队列cacheQueue,并从监听队列lazyQueue里面移除出去。
最后,

流程图

st=>start: Start
e=>end
op=>operation: My Operation
cond=>condition: Yes or No?

st->op->cond
cond(yes)->e
cond(no)->op

以及时序图:

Alice->Bob: Hello Bob, how are you?
Note right of Bob: Bob thinks
Bob-->Alice: I am good thanks!

vue方案

这里我们采用的方案是自定义指令-lazy

if (isVueNext) {
Vue.directive('lazy', {
    bind: addListener,
    update: addListener,
    componentUpdated: lazyLoadHandler,
    unbind: componentWillUnmount
})
} else {
    Vue.directive('lazy', {
        bind: lazyLoadHandler,
        update(newValue, oldValue) {
            addListener(this.el, {
                modifiers: this.modifiers,
                arg: this.arg,
                value: newValue,
                oldValue: oldValue
            })
        },
        unbind() {
            componentWillUnmount(this.el)
        }
    })
}

猜你喜欢

转载自www.cnblogs.com/heioray/p/9623297.html