《前端面试加分项目》系列 企业级Vue瀑布流

本文 GitHub github.com/ponkans/F2E 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习。文末有福利~~

前言

接水怪又来了,没有花里胡哨的文字,只有心中那个还未完成的梦想??
作为一个在互联网公司面一次拿一次 Offer 的面霸,打败了无数竞争对手,硬核的我带着硬核的文章,他来了!!~

【项目地址在文末哦??????】

介绍

延续接水怪的传统,每篇原创都会在公众号抽取一位小伙伴,送上前端经典书籍一本【文末抽取】

春招【实习&校招】正强势来袭,前端加分项目来了!!!

这篇文章主要介绍,企业级网站页面瀑布流布局的实现,主要包括:

  • 瀑布流是什么
  • 瀑布流的实现原理
  • 瀑布流的使用场景
  • 瀑布流的的实现有哪些问题&如何解决
  • 可扩展使用场景

瀑布流是什么

都2020了,接水怪居然还不知道瀑布流?
我错了,我该打!!!

瀑布流, 又称瀑布流式布局。是比较流行的一种网站页面布局,视觉表现为宽度相等高度不定的元素组成的参差不齐的多栏布局,随着页面向下滚动,新的元素附加到最短的一列而不断向下加载。

瀑布流的实现原理

寻找各列之中高度最小者,并将新的元素添加到该列上,然后继续寻找所有列的高度最小者,继续添加到高度最小列上,一直到所有元素均按要求排列完成为止。

有图有真相,你懂的

第一排元素的顶部会处于同一个高度,依次排列在顶端,第一排排满之后,后面的元素,也就是第5个元素应该如何排列?是图1的方式顺序排列吗? 然而这种排列方式是错误的,很容易出现其中一列过长或其中一列过短的情况。怎么解决这个问题呢,就是按照图2的方式将元素放在最短的一列进行排列。

瀑布流的使用场景【我们看下面**某国内知名企业的首页gif图】

瀑布流滑动的时候会不停的出现新的东西,吸引你不断向下探索,巧妙的利用视觉层级,视线的任意流动来缓解视觉的疲劳,采用这种方案可以延长用户停留视觉,提高用户粘度,适合那些随意浏览,不带目的性的使用场景,就像逛街一样,边走边看,所以比较适合图片、商品、资讯类的场景,很多电商相关的网站都使用了瀑布流进行承载。

上图效果是在基础瀑布流的基础上做了扩展改造, 在瀑布流顶部某一列或某几列插入其他非瀑布流内容。本文将介绍这种扩展瀑布流的四列实现场景,适用基础场景如下:

瀑布流的的实现有哪些问题&如何解决

  • 非瀑布流内容如何插入?
  • 如何寻找所有列的高度最小者?
  • 如何渲染瀑布流?

技术选型

我们采用Vue框架来实现瀑布流,其一些自带属性使我们的瀑布流实现更加简单。

  • 通过ref可以很方便的获取每列高度。通过比较算法算出高度最小列。
  • 拿到高度最小列之后,将下个要插入的元素数据放到最小列的数据列表(columnList*)中,通过操作数据完成元素渲染。
  • 利用Vue的具名插槽在瀑布流顶部插入其他非瀑布内容。
  • 通过watch监测元素渲染,判断是否继续进行渲染和请求更多元素数据。

非瀑布流内容如何插入

通过Vue的具名插槽(slot),将非瀑布流元素作为父组件的内容传递给瀑布流子组件。

  • 父组件通过HTML模板上的槽属性关联具名插槽,非瀑布流内容作为具名插槽的内容提供给子组件。
  • 具名插槽有:first-col、second-col、 third-col、 last-col、 merge-slot分别代表第一、二、三、四、合并列。
  • 子组件通过插槽名字判断将非瀑布流内容放在哪一列。如果插槽存在,则将其所携带的内容插入到置顶位置。
  • 因为合并列的特殊性,如果包含合并列,则将合并列绝对定位到顶部,合并列占的瀑布流对应的列进行下移,父组件传合并列相关的参数给子组件:merge(判断是否包含合并列), mergeHeight(合并列的高度),mergeColunms(合并的是哪2列)。

代码示意

如何寻找所有列的高度最小者

每一列都定义一个ref,通过ref获取当前列的高度,如果该列上方有合并块,则高度要加上合并块的高度,然后比较4列高度取到最小高度,再通过最小高度算出其对应的列数。

代码实现

如何渲染瀑布流

瀑布流常用在无限下拉加载或者加载数据量很大,且包含很多图片元素的情景,所以通常不会一次性拿到所有数据,也不会一次性将拿到的数据全部渲染到页面上, 否则容易造成页面卡顿影响用户体验, 所以何时进行渲染、何时继续请求数据就很关键。

何时渲染

选择渲染的区域为滚动高度+可视区域高度的1.5倍,即可以防止用户滚动到底部的时候白屏,也可以防止渲染过多影响用户体验。如果: 最小列的高度 - 滚 动高度 < 可视区域高*1.5 则继续渲染元素,否则不再继续渲染。

何时请求数据

当已渲染的元素+可视区域可以展示的预估元素个数大于已请求到的个数的时候才去继续请求更多数据,防止请求浪费。 如果:已加载的元素个数 + 一屏可以展示的元素预估个数 > 所有请求拿到的元素个数 则触发下一次请求去获取更多数据。

瀑布流渲染核心思路

  • 监测滚动,判断是否符合渲染条件,如果符合条件则开始渲染。
  • 定义一个渲染索引renderIndex, 每渲染一个元素则renderIndex+1, 实时监测renderIndex的变化, 判断是否符合渲染和数据请求条件。
  • 拿到最小高度列索引后,将下一个元素插入到该列中,并触发renderIndex+1进行下一轮渲染判断。

代码实现

可扩展使用场景

为了灵活使用瀑布流,在设计的时候就做好了扩展准备,通过HTML模板代码可以看出来,具名插槽的内容可以放在任意列,并没有限制死,所以可以扩展使用到以下各个场景。

点关注 & 不迷路

最近春招【实习&校招】来势汹汹,很多小伙伴私信说没有面试过,很紧张,想在真正面试之前体验一下面试的整个流程,接水怪我将在近期跟读者(已有读者报名)进行模拟面试,并且会录制视频分享给大家(敬请期待):

  • 一面(重点会问基础相关)
  • 二面(项目,以及一些技术广度,软实力)
  • 三面(HR模拟面)

好了,硬核的文章开启了尾声,非常感谢各位兄弟姐妹能够看到这里,如果觉得文章还ok,求点赞?? 求关注?? 求分享??!
微信搜索公众号【接水怪】,回复瀑布流,获取项目源代码,参与抽奖(前端经典书籍,每篇原创都会进行抽取哦~~)~

原文地址:https://www.cnblogs.com/jieshuiguai/p/12393878.html

时间: 2024-10-05 03:09:56

《前端面试加分项目》系列 企业级Vue瀑布流的相关文章

web前端入门到实战:纯CSS瀑布流与JS瀑布流

瀑布流 又称瀑布流式布局,是比较流行的一种网站页面布局方式.即多行等宽元素排列,后面的元素依次添加到其后,等宽不等高,根据图片原比例缩放直至宽度达到我们的要求,依次按照规则放入指定位置. 为什么使用瀑布流 瀑布流布局在我们现在的前端页面中经常会用的到,它可以有效的降低页面的复杂度,节省很多的空间,对于整个页面不需要太多的操作,只需要下拉就可以浏览用户需要看到的数据:并且,在当前这个APP至上的时代,瀑布流可以提供很好的用户体验,通过结合下拉刷新,上拉加载进行数据的懒加载等操作,对于用户的体验感来

vue 瀑布流实现

<div class="myWrite" v-if="list.length==0"> - 这个福宝有点懒哦 - </div> <div v-else class="list"> <ul ref="waterfallsLeft" class="listCon waterfallsLeft" style="float:left;"> <

一种瀑布流效果的实现

最近一个项目使用到了瀑布流效果,在这里总结一下.使用jquery框架. 最终效果: 思路: 使用五个并列的div:     首次加载n条数据:     之后由scroll触发ajax数据加载:     加载每条数据时,判断5个div的高度,把数据加载到高度最短的div里. 数据加载代码: $(document).bind('scroll',(function(){     //离底部100px时触发加载     var closeToBottom = ($(window).scrollTop()

前端框架及项目面试-聚焦Vue、React、Webpack

第1章 课程导学介绍课程制作的背景和课程主要内容. 第2章 课程介绍先出几道面试真题,引导思考.带着问题来继续学习,效果更好. 第3章 Vue 使用Vue 是前端面试必考内容,首先要保证自己要会使用 Vue .本章讲解 Vue 基本使用.组件使用.高级特性和 Vuex Vue-router ,这些部分的知识点和面试题. 第4章 Vue 原理要保证自己的面试竞争力,必须掌握 Vue 原理,前端高级面试或者大厂面试中常考.本章讲解虚拟DOM,diff 算法,响应式,模板编译,组件渲染等 Vue 原理

从零开始系列之vue全家桶(4)带新手小白一起搭建第一个个人网站项目

未经允许,严禁转载,全文由blackchaos提供. 在安装好了前面大部分需要的插件,我们开始进行第一个个人项目.结合vue+vuex+vue-cli+vue-router+webpack使用. 1.我们先写用vue-router来单页面切换路由.先进入src文件夹.在components文件夹下创建五个文件分别是Home.vue,About.vue,Contact.vue,MyHeader.vue,Myfooter.vue. 将router里的index.js打开.修改代码为: import

2020年前端面试复习必读文章【超百篇文章/赠复习导图】

前言 之前写过一篇 一年半经验如何准备阿里巴巴前端面试,给大家分享了一个面试复习导图,有很多朋友说希望能够针对每个 case 提供一个参考答案. 写答案就算了,一是「精力有限」,二是我觉得大家还是需要自己「理解总结会比较好」. 给大家整理了一下每个 case 一些还算不错的文章吧(还包括一些躺在我收藏夹里的好文章),大家可以自己看文章总结一下答案,这样也会理解更深刻. 「并不是所有文章都需要看」,希望是一个抛砖引玉的作用,大家也可以锻炼一下自己寻找有效资料的能力 ~ ( 文章排序不分前后,随机排

web前端面试经历分享

十天前,我还在纠结这个暑假到底是呆在实验室研究技术好还是找一份实习见识世面好,而现在我已经接到offer准备工作了.这几天真是累得够呛,一方面需要拼命准备期末考试,另一方面,需要往公司里面跑接受面试.欣慰的是,我不仅顺利通过了公司的面试,还认识了好几个厉害的师兄,自己的人生规划也稍有改变. 开始的纠结是有原因的,主要是考虑到了一下几个方面: 第一,作为一个大二的学生有必要这么着急跑出去找实习么? 第二,去找实习主要目的应该是赚钱还是学习技术? 第三,难得有那么两个月的时间,就这样去工作了会不会浪

百度web前端面试2015.10.18

邮件里通知的周日下午两点参加百度校招面试,我13:10分就到了,前台先让我拿了个面试资格单(上面是我的信息),然后在web前端面试入口排队,面试在百度食堂举行的,等了大概1个小时,放我去面试.都是一对一面试,人很多. 下面是面试过程:没让我自我介绍,有的会让先自我介绍,简单看了下我的简历开始问我是不是自学的,(计算机专业不开设这个专业,都是自学加项目经验)为什么选择前端开发,你怎么看前端开发这个岗位的.说那这样我就从简单到难的问你,由浅入深就知道你的水平了,面试官都很年轻,人都不错. 1:说一下

Web前端面试指导(五):掌握面试技巧,让面试变得轻松

5.1 面试形式 1)        一般而言,小公司做笔试题:大公司面谈项目经验:做地图的一定考算法 2)        面试官喜欢什么样的人 ü  技术好.自信.谦虚.善于沟通.表达. ü  喜欢追究原理 5.2 面试内容 1.2.1简历上的项目 ü  介绍下你的项目吧? 1)        第一步:介绍你项目是干嘛的 2)        第二步:介绍下你负责的是哪块 3)        第三步:介绍下里面都有什么功能,你是怎么实现的,怎么分层的? 1.2.2非技术=处事方法+表达+态度+忠