h5-吸顶效果的实现方法

前言

我们在开发过程中,经常遇到这种需求,搜索框或者菜单,初始位置不在顶部,当我们往上滑动页面的时候,它们会固定到顶部,往下滑动,又回到初始位置。那么这个功能,如果实现呢,下面将进行详细讲解.

效果:
这里写图片描述

一、通过监听scroll事件,实现吸顶功能

这是大家经常用的一种方法
吸顶效果的基本的开发思路,利用scroll事件进行监听scrollTop的值,当scrollTop达到一定的值得时候设置吸顶元素的position : fixed;属性
实现方法:
写入事件监听,监听滚动条。

js

mounted () {
   window.addEventListener('scroll', this.handleScroll);
},
destroyed(){
    window.removeEventListener('scroll', this.handleScroll);
},
methods: {
      handleScroll () {  
          this.$nextTick(() => {
              let scrollTop = document.documentElement.scrollTop || document.body.scrollTop;  
              let offsetTop = document.querySelector('#searchBar').offsetTop;
              if (scrollTop > offsetTop) {
                  this.searchBarFixed = true;
              } else {
                  this.searchBarFixed = false;
              }
          })
      }
}

css

.isFixed{
  position:fixed;
  top:0;
  left:0;
  width:100%;
  z-index:999;
}

在对应的标签中加入修改后的样式

<div id="searchBar" :class="searchBarFixed== true?'isFixed':''">

二、页面内用了vux的scroller组件,第一种方法就失效了,那么怎么做呢

我们在开发列表页的时候,大多数需要上拉刷新和下拉刷新的操作,常用到scroller组件,但是在组件内加菜单栏,进行吸顶,就需要监听scroller组件的滚动事件了

实现思路:
scroller内的组件滑动,是不能固定到顶部的,因为在scroller内的,都属于在滑动范围中,无法脱离这个框架,这时,我们可以在scroller外面加一个同样的菜单,先隐藏,当scroller内的菜单,滑动到达顶部时,隐藏组件内菜单,展示组件外菜单,就达到吸顶的效果了。

html

 <!--菜单-->
<div class="p-tab p-tab-pa" v-show="searchBarFixed">
    <tab custom-bar-width="110px" bar-active-color="#1196b6" :animate="true">
        <tab-item v-for="(item,index) in tabList" :selected="item.channelId == channelId || tabIndex==index" active-class="p-tab-selected" @on-item-click="onItemClick" >
            <img :src="item.channelImg">{{item.channelName}}
        </tab-item>
    </tab>
</div>
<scroller lock-x scrollbar-y use-pulldown use-pullup ref="scroller" @on-scroll="onScroll" @on-pullup-loading="onScrollUp" @on-pulldown-loading="pullDown" :pulldown-config="pulldown" :pullup-config="pullup">
<!--菜单-->
        <div id="searchBar" class="p-tab" v-show="!searchBarFixed">
            <tab custom-bar-width="110px" bar-active-color="#1196b6" :animate="true">
                <tab-item v-for="(item,index) in tabList" :selected="item.channelId == channelId || tabIndex==index" active-class="p-tab-selected" @on-item-click="onItemClick" >
                    <img :src="item.channelImg">{{item.channelName}}
                </tab-item>
            </tab>
        </div>
<scroller>

js

onScroll(position){
      let scrollTop = position.top; //组件滚动时监听的top值
      this.scrollTop = scrollTop;
      var offsetTop = document.querySelector('#searchBar').offsetTop; //菜单top值
      if (scrollTop > offsetTop) { //两个值做比较
          this.searchBarFixed = true;
      } else {
          this.searchBarFixed = false;
      }
  }          

less

.p-tab-pa{
  position:absolute;
  top:0;
  left:0;
  width:100%;
  height:64px;
  z-index:999;
}
.p-tab{

}
  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Jetpack Compose 是一种用于构建 Android UI 的现代工具包。要实现吸顶效果,可以使用 Jetpack Compose 的 ConstraintLayout 组件。 首先,在你的布局文件中引入 ConstraintLayout 组件。然后,在需要实现吸顶效果的视图组件前方放置一个占位符组件,作为吸顶效果的起点。 接下来,使用 ConstraintLayout 的 createModifier 函数来创建一个修饰符(Modifier),并将其应用到需要实现吸顶效果的视图组件上。在修饰符中,通过调用该组件的位置限制函数来设置视图组件的约束条件。 例如,使用 Modifier.offset() 函数将吸顶组件固定在布局的顶部: ```kotlin val modifier = Modifier.constrainAs(view) { top.linkTo(parent.top) } ``` 或者,使用 Modifier.padding() 函数来设置视图组件距离父布局顶部的间距: ```kotlin val modifier = Modifier.padding(top = offset) ``` 其中,offset 可以是一个动态的数值,用于实现吸顶效果的变化。你可以根据滚动位置来调整 offset 的值,实现吸顶视图随滚动而变化的效果。 最后,将该修饰符应用到你的视图组件上: ```kotlin Box( modifier = Modifier .fillMaxSize() .wrapContentSize() .offset { IntOffset(0, offset) } ) { // 吸顶视图组件 } ``` 这样,你就可以实现吸顶效果了。通过调整约束条件或距离顶部的间距,你可以自定义吸顶效果的具体表现。注意,吸顶效果通常与滚动视图组件(如 ListView 或 ScrollView)结合使用,以便根据滚动位置来动态调整吸顶视图的位置和显示状态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值