You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
对于瀑布流,因为我要实现响应式的,所以首先我需要拿到瀑布流组件的宽度,根据断点判断应该展示n列,因为我不想组件跟业务耦合,所以请求api都是放在外面,然后我将列数emit到父组件,父组件会watch列数。在watch的回调里会发送第一次请求,请求的pageSize我是设置为n*8,对于瀑布流要先拿到它的高度,开始我想让后端返回高宽比,后来我自己看华为云obs文档,发现可以通过api的方式获取图片信息。所以拿到数据后我请求api将高宽比添加进来。将数据传递给瀑布流组件,首先要声明一个n长度的数组记录每一列的高度,以及一个n长度的数组,里面的元素都是数组。遍历数据,从高度最低的列添加元素,添加之后更新高度数组.这样就完成了首屏的展示了.对于图片懒加载,是使用了vue的自定义指令以及web api intersectionobserve.简单来说就是在合适的时机给src赋值.然后是滚动时请求下一页,这里我自己想了一种办法,之前的intersectionobserve监听范围其实还包括视口的下300px,所以只要出现在这个位置可以认为可以请求下一页了.当然不可能每个子元素出现在这个位置都进行请求.我这边的判断逻辑是,只以第一列为准,它下面的最后一个元素触发了intersection的回调才请求下一页.最后是关于宽度改变怎么做到响应式.这里我使用到web api的resizeobserve,我会根据宽度更新应该展示多少列,然后再把元素重新分配到这些列中.然后对性能以及用户体验做了一些优化
78
+
说一下实现思路,因为后面优化会基于这个
79
+
80
+
首先对于瀑布流要先拿到它的高度,开始我想让后端返回高宽比,但是后端没时间弄,后来我自己看华为云obs文档,发现可以通过api的方式获取图片信息.对于图片懒加载,是使用了vue的自定义指令以及web api intersectionobserve.最后是关于响应式.这里我使用到web api的resizeobserve,我会根据宽度更新应该展示多少列,然后再把元素重新分配到这些列中
0 commit comments