Angular 学习笔记 (Material table sticky 原理)

[亡魂溺海] 提交于 2019-12-05 00:34:35

sticky 就是一个东西会一直保持在可见范围

table 的 header 在 scroll 的时候一直贴在上方, column 一直贴在左右. 

这种体验以前是很难实现的。

需要监听 scroll 然后去定位. 

有了 sticky 我们就不需要去监听 scroll 了.

但是 sticky 也有不能满足的场景. 比如当有 2 个 element 需要被 sticky 的时候. 我们的 top value 就要计算了

比如有 a, b 两个 element 

当 2 个都要 sticky 的时候, top a = 0, top b = a height. 

b 依赖与 a 的高度. 这里的难点是我们需要 watch a 的高度, 

比较先进的方法是用 Resize Observer 

https://drafts.csswg.org/resize-observer/#resize-observer-interface

另一种方法是不使用 sticky,改用监听 scroll + transition 

transition 和定位有一个很大的区别就是, transition 在移动后, 原本的位置是保留着的,感觉就像灵魂出窍一样,躯壳依然占据着那个位置. 

定位则是整个跳脱了出来,原本的位置就被其它元素替代掉了. 

同样的例子. 

a, b 都 transition 后, 当 a 的高度变大时, 它的躯壳也跟着变大了,间接的推动了 b element

所以这时候 a 和 b 保持的距离就会时一致的. 用 sticky 的话,这里就会出现重叠的问题了。

 

总结 : 

1. 超过 1 个 element 要 sticky 的话, 就需要前一个的 parent (难度加一点)

2. 超过 1 个 element 同时 element 的 height 会改变 (难度再加)

解决之道,要监听多个 element 的 resize, 然后设置 top value.

 

refer: 

https://developers.google.com/web/updates/2016/10/resizeobserver

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!