react-sticky如何不吸到最顶部

402 阅读1分钟

本人菜鸡,看不懂文档。又没有一个正经的中文解释文档,也没找到相关的内容,摸索了大半天算是找到我需要的效果。 react-sticky git地址
先贴代码看效果
image.png

    <Sticky topOffset={-55}>
      {({ style, isSticky }: any) => (
        <DefaultTabBar
          {...prop}
          className={styles['site-custom-tab-bar']}
          style={{ ...style, top: isSticky ? 55 : 0 }}
        />
      )}
    </Sticky>

image.png 主要使用了isSticky用于判断当前是否是一个吸顶状态,然后设置样式内的top距上
然后设置topOffset表示距离顶部多少的时候进行吸顶。 此处用了-55表示距上55时就进行吸顶,刚才就和我设置的55高度匹配上,就不会出现到顶了再跳下来的情况。这里的55也是我蓝色框的高度。红色框则为本次设置吸顶的部分。

问题处理:吸顶抖动问题
问题原因:由于吸顶的时候,吸顶部分脱离了文档流,导致后面的内容顶上,但是内容不够,又脱离吸顶,就导致反复抖动。正常情况下是不会出现抖动的问题,源码当中有对吸顶后做一个padding-bottom的高度补偿,避免抖动。但是tabs的tabbar有一个margin-bottom,这个高度是不会有补偿的,如果刚好吸顶后顶上去的高度在这个范围内,就会导致抖动问题出现.
解决办法:如果是一般的吸顶内容,在设置吸顶的块外层添加一个同高度的div即可,让后面的数据不能顶上来。如果是tabs的tabPane, 可以先把tabbar的margin-bottom设置为0,再对tabPane设置一个margin-top