其他分享
首页 > 其他分享> > P177-解决吸顶效果-TabControl的offsetTop获取分析

P177-解决吸顶效果-TabControl的offsetTop获取分析

作者:互联网

首先把Home.vue原来的原生Js吸顶效果的样式删除

tabControl的吸顶效果

#### 9.1. 获取到tabControl的offsetTop

* 必须知道滚动到多少时, 开始有吸顶效果, 这个时候就需要获取tabControl的offsetTop
* 但是, 如果直接在mounted中获取tabControl的offsetTop, 那么值是不正确.
* 如何获取正确的值了?
  * 监听HomeSwiper中img的加载完成.
  * 加载完成后, 发出事件, 在Home.vue中, 获取正确的值.
  * 补充:
    * 为了不让HomeSwiper多次发出事件,
    * 可以使用isLoad的变量进行状态的记录.
  * 注意: 这里不进行多次调用和debounce的区别

 

1.在data()里定义  tabOffsetTop: 0初始值  ,用于保存offsetTop值

2.

 这种在mouted里打印的结果不对

 在mounted里面打印这个垂直距离结果是错误的,因为轮播图里面的图片可能还没有加载完成,影响了最终的正确结果。所以我们要去监听轮播图的图片的加载的完成,然后去获取offsetTop

首先@load监听图片加载完成-----HomeSwiper

将加载完成事件发出到父组件

 父组件监听到子组件发出的事件

 获取了此时的offsetTop

 

 但是这样的话,轮播图有几张就获取了几次offsetTop,重复获取没必要,所以下面来改进

用这种开关的效果,保证了只向父组件发送一次事件----HomeSwiper

 #### 9.2. 监听滚动, 动态的改变tabControl的样式

* 问题:动态的改变tabControl的样式时, 会出现两个问题:
  * 问题一: 下面的商品内容, 会突然上移
  * 问题二: tabControl虽然设置了fixed, 但是也随着Better-Scroll一起滚出去了.
* 其他方案来解决停留问题.
  * 在最上面, 多复制了一份PlaceHolderTabControl组件对象, 利用它来实现停留效果.
  * 当用户滚动到一定位置时, PlaceHolderTabControl显示出来.
  * 当用户滚动没有达到一定位置时, PlaceHolderTabControl隐藏起来.

1.先设置一个变量 isTabFixed默认是false

 2. 根据这个属性决定 如果滚动距离超过tabOffsetTop,就为true

 3.根据  isTabfixed是否为true,决定要不要加 position:fixed 吸顶效果

 

 但是这样tabControl会闪现一下,并不能长久停留

所以把上面第三步删掉

 再复制一个tab-control,一般的时候让其隐藏,当滚动到tabOffsetTop距离时让其显示

 

这个也要改成tabControl2

 

 

标签:滚动,P177,获取,offsetTop,TabControl,吸顶,tabControl,加载
来源: https://blog.csdn.net/m0_51414342/article/details/122195256