heikaimu / vue3-waterfall-plugin

vue3 瀑布流插件,支持 PC 和移动端,支持 animate 的所有动画效果,支持图片懒加载
https://vue3-waterfall.netlify.app/
461 stars 34 forks source link

瀑布组件外加了 div overflow-y: 'auto' 后总是重新计算显示 #72

Closed gimjin closed 3 months ago

gimjin commented 3 months ago

issue

heikaimu commented 3 months ago

因为我这里监听的是容器的宽度,你的滚动条出现会导致宽度变化。本来应该只是一次重新计算,但是你这个运气好,高度刚好卡到一屏。但是我看你这个是移动端用。移动端的滚动条不会占用区域。或者你把滚动条的样式修改下。改成1px宽。

gimjin commented 3 months ago

有滚动条高度变小不需要滚动条,隐藏滚动条高度变大需要滚动条。 滚动条样式需求上不允许改,跟随系统样式。 overflow-y: scroll; 一直占着位置又显得拥挤。

ㄟ( ▔, ▔ )ㄏ 实在想不出来合理的解决方案啊~

heikaimu commented 3 months ago

用滚动条插件呗,better-scroll啥的。

gimjin commented 3 months ago

滚动条的样式不是我能决定的,用浏览器自带的适配不同浏览器保持用户体验一致也是很好的。 滚动条在不同操作系统中是不通的,这个问题是个概率问题,不过可以100%复现,我想应该在组件层面解决问题。

我找我的同事集思广益搞出来了思路,如下:

  1. 每个操作系统自带的滚动条宽度可能不太一样,比如 mac windows
  2. 基于滚动条宽度和组件自身的宽高,计算出高度阈值
  3. 用这个阈值补充高度或者在自适应过程中预判来避免死循环
heikaimu commented 3 months ago

我在example里面写了一个配合bs来实现滚动的列子。你看一下。

gimjin commented 3 months ago

用修改滚动条样式或第三方包的方式不是根本上解决问题啊。 哎~ 好吧,告辞。

heikaimu commented 3 months ago

用滚动条插件目前是最好的解决办法。就像你用element,人家的table滚动条也是自己写的,不会用原生的。