iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Vue怎么实现无限加载瀑布流
  • 474
分享到

Vue怎么实现无限加载瀑布流

2023-06-25 12:06:30 474人浏览 泡泡鱼
摘要

这篇文章主要介绍“Vue怎么实现无限加载瀑布流”,在日常操作中,相信很多人在Vue怎么实现无限加载瀑布流问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue怎么实现无限加载瀑布流”的疑惑有所帮助!接下来,请跟

这篇文章主要介绍“Vue怎么实现无限加载瀑布流”,在日常操作中,相信很多人在Vue怎么实现无限加载瀑布流问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue怎么实现无限加载瀑布流”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

具体内容如下

Vue怎么实现无限加载瀑布流

我做的这个瀑布流放在了一个嵌套页面里,就是类似管理后台的main content中,如果要改成全屏的也很方便,其实更容易些,因为会避开一些在元素上使用onScroll的坑。

通过这个瀑布流,可以掌握以下几个知识点:

在元素上监听scroll事件,相对直接在window上监听麻烦一点点;
2、image.onload事件;
3、promiseAll;
4、vue 的 transition-group

这里使用了mockjs来模拟图片数据,然后通过axiOS来调用图片数据,也可使用其他数据源。

通过计算图片高度,判断把图片加载到哪一列。
如果屏幕还有空余,那就继续加载。
无限滚动加载。
屏幕resize这块没有做,后期可以加上去。

直接贴代码,有问题欢迎切磋。

<template>  <div class="waterfall wf-wrap" ref="waterfall" @scroll="onScroll">    <ul>      <transition-group name="list" tag="li">        <li          v-for="(item,index) in waterfallList"          :key="index"          class="wf-item"          :        >          <img :src="item.src" />        </li>      </transition-group>    </ul>  </div></template><script>import { getList } from "@/api/demo";export default {  name: "Waterfall",  data() {    return {      waterfallList: [],      waterfallCol: 5,      colWidth: 236,      marginRight: 10,      marginBottom: 10,      colHeights: [],      listQuery: {        page: 1,        limit: 5,        sort: "+id"      },      loading: false,      show: true    };  },  mounted() {    this.init();  },  methods: {    init() {      // 初始化时,每栏高度都为0      this.colHeights = new Array(this.waterfallCol);      for (let i = 0; i < this.colHeights.length; i++) {        this.colHeights[i] = 0;      }      this.colWidth =        (this.$refs.waterfall.clientWidth -          (this.waterfallCol - 1) * this.marginRight) /        this.waterfallCol;      this.loadImgs();    },    loadImgs() {      this.loading = true;      // 从api获取数据      getList(this.listQuery).then(res => {        let images = res.data.items;        let promiseAll = [],          imgs = [],          total = images.length;        for (let i = 0; i < total; i++) {          promiseAll[i] = new Promise(resolve => {            imgs[i] = new Image();            imgs[i].src = images[i].image_uri;            imgs[i].onload = () => {              let imgData = {};              imgData.height = (imgs[i].height * this.colWidth) / imgs[i].width;              imgData.width = this.colWidth;              imgData.src = images[i].image_uri;              this.waterfallList.push(imgData);              this.rankImgs(imgData);              resolve(imgs[i]);            };          });        }        Promise.all(promiseAll).then(() => {          this.loading = false;          this.loadMore();        });      });    },    loadMore() {      if (        this.$refs.waterfall.clientHeight + this.$refs.waterfall.scrollTop >          this.filterMin().minHeight &&        this.loading == false      ) {        this.loading = true;        setTimeout(() => {          this.loadImgs();        }, 200);      }    },    rankImgs(imgData) {      let min = this.filterMin();      imgData.top = min.minHeight;      imgData.left = min.minIndex * (this.colWidth + this.marginRight);      this.colHeights[min.minIndex] += imgData.height + this.marginBottom;    },    filterMin() {      let minHeight = Math.min.apply(null, this.colHeights);      return {        minHeight: minHeight,        minIndex: this.colHeights.indexOf(minHeight)      };    },    onScroll() {      this.loadMore();    }  }};</script><style lang="sCSS" scoped>ul li {  list-style: none;}.wf-wrap {  position: relative;  width: 100%;  height: 100%;  overflow: scroll;}.wf-item {  position: absolute;}.wf-item img {  width: 100%;  height: 100%;}.list-enter-active,.list-leave-active {  transition: all 1s;}.list-enter, .list-leave-to {  opacity: 0;  transfORM: translateY(30px);}</style>

到此,关于“Vue怎么实现无限加载瀑布流”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Vue怎么实现无限加载瀑布流

本文链接: https://www.lsjlt.com/news/304837.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++ 生态系统中流行库和框架的贡献指南
    作为 c++++ 开发人员,通过遵循以下步骤即可为流行库和框架做出贡献:选择一个项目并熟悉其代码库。在 issue 跟踪器中寻找适合初学者的问题。创建一个新分支,实现修复并添加测试。提交...
    99+
    2024-05-15
    框架 c++ 流行库 git
  • C++ 生态系统中流行库和框架的社区支持情况
    c++++生态系统中流行库和框架的社区支持情况:boost:活跃的社区提供广泛的文档、教程和讨论区,确保持续的维护和更新。qt:庞大的社区提供丰富的文档、示例和论坛,积极参与开发和维护。...
    99+
    2024-05-15
    生态系统 社区支持 c++ overflow 标准库
  • c++中if elseif使用规则
    c++ 中 if-else if 语句的使用规则为:语法:if (条件1) { // 执行代码块 1} else if (条件 2) { // 执行代码块 2}// ...else ...
    99+
    2024-05-15
    c++
  • c++中的继承怎么写
    继承是一种允许类从现有类派生并访问其成员的强大机制。在 c++ 中,继承类型包括:单继承:一个子类从一个基类继承。多继承:一个子类从多个基类继承。层次继承:多个子类从同一个基类继承。多层...
    99+
    2024-05-15
    c++
  • c++中如何使用类和对象掌握目标
    在 c++ 中创建类和对象:使用 class 关键字定义类,包含数据成员和方法。使用对象名称和类名称创建对象。访问权限包括:公有、受保护和私有。数据成员是类的变量,每个对象拥有自己的副本...
    99+
    2024-05-15
    c++
  • c++中优先级是什么意思
    c++ 中的优先级规则:优先级高的操作符先执行,相同优先级的从左到右执行,括号可改变执行顺序。操作符优先级表包含从最高到最低的优先级列表,其中赋值运算符具有最低优先级。通过了解优先级,可...
    99+
    2024-05-15
    c++
  • c++中a+是什么意思
    c++ 中的 a+ 运算符表示自增运算符,用于将变量递增 1 并将结果存储在同一变量中。语法为 a++,用法包括循环和计数器。它可与后置递增运算符 ++a 交换使用,后者在表达式求值后递...
    99+
    2024-05-15
    c++
  • c++中a.b什么意思
    c++kquote>“a.b”表示对象“a”的成员“b”,用于访问对象成员,可用“对象名.成员名”的语法。它还可以用于访问嵌套成员,如“对象名.嵌套成员名.成员名”的语法。 c++...
    99+
    2024-05-15
    c++
  • C++ 并发编程库的优缺点
    c++++ 提供了多种并发编程库,满足不同场景下的需求。线程库 (std::thread) 易于使用但开销大;异步库 (std::async) 可异步执行任务,但 api 复杂;协程库 ...
    99+
    2024-05-15
    c++ 并发编程
  • 如何在 Golang 中备份数据库?
    在 golang 中备份数据库对于保护数据至关重要。可以使用标准库中的 database/sql 包,或第三方包如 github.com/go-sql-driver/mysql。具体步骤...
    99+
    2024-05-15
    golang 数据库备份 mysql git 标准库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作