IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> java前端总结14 -> 正文阅读

[JavaScript知识库]java前端总结14

?尝试理解了一下

var falls = {
    //每列当前的高度
    topArry: [],
    //每列当前距离浏览器的左边距
    leftArry: [],
    //每次加载的图片
    imgArray: [],
    //每次加载的第一张图片相对于所有图片(包括已加载图片)的索引
    num: 0,
    //加载图片数
    dataNum: 0,
    //图片列数
    cols: 0,
}

//初始化函数
$(function () {
    start();
});

function start(){
    init();
    run();
    window.onscroll = function () {
        var minHeight = getMinHeight();
        if (checkWillLoad()) {
            run();
        }
    }
}

//使用JSON数据模拟从后台获取图片数据
function getData() {
    return $.getJSON("json/falls.json", function (data) {    //此处返回一个jquery的promise对象
        if (data.success) {
            var row = data.row,
                html = "",
                len = row.length;
            falls.dataNum += len;

            //将获取到的数据通过字符串连接的方式添加到 html 内容中
            for (var i = 0; i < len; i++) {
                html += "<div class='img-box'><img src='" + row[i].src + "'/></div>";
            }
            $("#container").append(html);
        }
    });
}

//初始化函数(主要初始化:列数,每列左偏移,每列高度置为0)
function init() {
    getData().then(function () {
        var $boxs = $("#container .img-box");
        falls.cols = Math.floor($("#container").width() / $boxs.eq(0).width());
        for (var i = 0; i < falls.cols; i++) {
            var left = $boxs.eq(i).offset().left;
            falls.leftArry.push(left);
            falls.topArry[i] = 0;
        }
    });
}

//主要运行函数
function run() {
    getData().then(function () {
        //修改每张图片的位置
        reset();
    });
}

//获取所有列中的最小高度列
function getMinHeight() {
    var minHeight = Math.min.apply(null, falls.topArry);
    return minHeight;
}

//reset用于对图片进行重新定位
function reset() {
    var $boxs = $("#container .img-box");
    falls.imgArray = [];
    $boxs.each(function (i) {
        if (i >= falls.num) {      //这里我们只需要拿到新的没有定位过的图片,不用重新定位所有的,提升性能
            falls.imgArray.push(this);
        }
    });
    falls.num += falls.dataNum;
    var img = falls.imgArray;
    for (var i = 0, len = img.length; i < len; i++) {
        var minHeight = getMinHeight(),
            index = 0;
        //为了取到高度最小列的角标
        for (var x = 0; x < falls.cols; x++) {
            if (minHeight == falls.topArry[x]) {
                index = x;
                break;
            }
        }
        //重新定位
        $(img[i]).css({
            "position": "absolute",
            "top": minHeight,
            "left": falls.leftArry[index]
        });
        //更新最短列
        falls.topArry[index] += $(img[i]).height();
    }
    falls.dataNum = 0;
    //可确保不同的显示器屏幕能初始化时便将图片布满屏幕
    if (getMinHeight() < window.screen.height) {
        setTimeout(function () {      //确保浏览器已经重排完毕,否则会出现一些图片叠加在一起
            run();
        }, 1)
    }
}

//判断是否加载图片的条件:最后一张图片顶部相对于页面的位置<=文档高度+滚动条的垂直位置
function checkWillLoad(){
    var lastBox = $("#container .img-box").last();
    var topOffset = $(lastBox).offset().top;
    var screenHeight = $(window).height();
    var scrollTop = $(window).scrollTop();
    return topOffset <= screenHeight + scrollTop;
}

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-29 22:59:45  更:2022-01-29 23:01:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:29:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码