js笔记 demo篇(一)之瀑布流布局,图片的懒加载预加载(下)

26 篇文章 0 订阅
20 篇文章 1 订阅

js笔记 demo篇(一)之瀑布流布局,图片的懒加载预加载


只能无奈的说不知道为啥一篇没写下,那么ok我们继续,懒加载与预加载结合起来就可以做一个简单的瀑布流布局,再图片没有加载过来之前loading图占位,没有滚动到指定高度不加载,当然就不能像上一篇中那么写了,因为正常来说加在图片是要分页的,我们要做的是加载一页后,到指定位置再加载下一页。
html结构

//获取滚动条距离
function getScrollOffset () {
        if (window.pageXOffset) {
            return {
                x: window.pageXOffset,
                y: window.pageYOffset
            }
        } else {
            return {
                x: document.documentElement.scrollLeft + document.body.scrollLeft,
                y: document.documentElement.scrollTop + document.body.scrollTop
            }
        }
    }
//获取窗口大小
    function getViewportOffset () {
        if (window.innerWidth) {
            return {
                width: window.innerWidth,
                height: window.innerHeight
            }
        }
        if (window.compatMode == 'CSS1Compat') {
            return {
                width: document.documentElement.clientWidth,
                height: document.documentElement.clientHight
            }
        } else if (window.compatMode == 'BackCompat') {
            return {
                width: document.body.clientWidth,
                height: document.body.clientHight
            }
        }
    }



    (function () {
        var oUl = document.getElementsByTagName('ul');
        var loading = document.getElementsByClassName('loading')[0];
        var lock = true;
        function creDom (arr) { //当滚动距离达到要求是,生成dom插入页面渲染
        arr.forEach(function (ele, i) {
            var oLi = document.createElement('li');
            var oImg = document.createElement('img');
            var title = document.createElement('p');
            var tempImg = document.createElement('img');
            title.innerText = ele.title;
            oImg.src = './timg.gif';
            tempImg.src = ele.src;
            oLi.appendChild(oImg);
            oLi.appendChild(title);
            var index = obtainMin('min');
            oUl[index].appendChild(oLi);
            tempImg.onload = function () {
                setTimeout(function () { // 这里模拟的请求效果嘻
                    oImg.src = tempImg.src;
                    obtainMin()
                }, Math.random()*2000);
            }
        });
    }
     function obtainMin (type) {
        var len = oUl.length;
        var hArr = [];
        for (var i = 0; i < len; i++) {
            hArr[i] = oUl[i].offsetHeight;
        }
        if (type === 'min') {
            var min = Math.min.apply(null, hArr);
            var index = hArr.indexOf(min);
            return index;
        }
        var max = Math.max.apply(null, hArr);
        window.onscroll = null;
        scorllEvent(max);
    }
    function init () {
        if (lock) {
            loading.style.display = 'block';
            lock = false;
            //如果在项目中使用这里应该是请求回来的数据
            creDom([{src: './0.png', title: '我是tlite'}, {src: './3.png', title: '我是tlite'}, {src: './2.png', title: '我是tlite'}, {src: './1.png', title: '我是tlite'}, {src: './0.png', title: '我是tlite'}, {src: './3.png', title: '我是tlite'}, {src: './2.png', title: '我是tlite'}, {src: './1.png', title: '我是tlite'}]);
        }
    }
   function scorllEvent (max) {
        window.onscroll = function () {
            var scrH = getScrollOffset().y + getViewportOffset().height;
            var maxH = max;
            if (maxH <= scrH) {
                init();
            }
        }
    }
    init();
    })();

嘻嘻,这个小demo有写的不好的地方来拍砖额。
gitHub地址,clone后直接本地方式打开即可
gitHub中有html和css的代码,效果还可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值