• js+vue,前端关于页面滚动让头部菜单淡入淡出实现原理


    今天遇到个需求:我这里借用小米商城的详情页做个比喻吧。

    刚开始其商品详情页是这样的:

    滚动到一定高度时,是这样的:

    可以看到当滚动到轮播图底下的时候,详情页的菜单完全显现出来。

    以下上代码:

    HTML:

    1. <div class="detail-header">
    2. <div class="left operate" :style="{'background-color':iconStyle.BackgroundColor,'color':iconStyle.color}">
    3. <span class="iconfont icon-fanhui">span>
    4. div>
    5. <div class="active-box" :style="{'opacity':Opacity}">
    6. <div>商品div>
    7. <div>评价div>
    8. <div>评价div>
    9. <div>详情div>
    10. <div>推荐div>
    11. div>
    12. <div class="right operate" :style="{'background-color':iconStyle.BackgroundColor,'color':iconStyle.color}">
    13. <span class="iconfont icon-home">span>
    14. div>
    15. <div class="header-bg" :style="{'opacity':Opacity}">div>
    16. div>

    css:

    1. .detail-header{
    2. position: absolute;
    3. left: 0;
    4. right: 0;
    5. height: 1.173333rem;
    6. z-index: 999;
    7. .active-box{
    8. position: absolute;
    9. left: 50%;
    10. transform: translateX(-50%);
    11. white-space: nowrap;
    12. display: flex;
    13. align-items: center;
    14. justify-content: center;
    15. line-height: 1.173333rem;
    16. font-size: 0.426667rem;
    17. opacity:0;
    18. z-index:67;
    19. >div{
    20. padding: 0 0.4rem;
    21. }
    22. }
    23. .operate{
    24. position: absolute;
    25. width: 0.906667rem;
    26. height: 0.906667rem;
    27. line-height: 0.906667rem;
    28. border-radius: 50%;
    29. background-color: rgba(0,0,0,.3);
    30. color: #fff;
    31. text-align: center;
    32. margin: 0.133333rem;
    33. display: table;
    34. z-index: 58;
    35. .iconfont{
    36. display: table-cell;
    37. font-size: 0.4rem;
    38. vertical-align: middle;
    39. }
    40. }
    41. .left{
    42. left:0;
    43. }
    44. .right{
    45. right: 0;
    46. }
    47. .header-bg{
    48. background-color: #fff;
    49. height: 100%;
    50. opacity: 0;
    51. z-index: 66;
    52. }
    53. }

    js:

    1. data(){
    2. return{
    3. Opacity:0,
    4. iconStyle:{
    5. BackgroundColor:'rgba(0, 0, 0, 0.3)',
    6. color:'#fff'
    7. }
    8. }
    9. },
    10. ContentScroll(e){
    11. let top = (e.target.scrollTop / 120);
    12. this.Opacity = top >= 1?1:top;
    13. console.log(top)
    14. if(top >= 1){
    15. this.iconStyle.BackgroundColor = 'unset'
    16. this.iconStyle.color = '#333'
    17. }else{
    18. this.iconStyle.BackgroundColor = 'rgba(0, 0, 0, 0.3)'
    19. this.iconStyle.color = '#fff'
    20. }
    21. }

    在上面代码中可以看出,头部代码是绝对定位的,头部不要设置背景图,因为我么是通过设置opacity来控制元素的显示隐藏的,所以我们用元素来代替背景的作用。只要设置好图层z-index就不会发生:操作菜单和按钮被遮挡的情况。记住要设置定位哦!

    这里的e.target.scrollTop / 120 ;120是你轮播图的高度,根据自己的情况而定。

    注意:这里主要是记录实现原理,js代码没那么完整,大家复制的时候注意。还有就是做的没小米商城那么丝滑,大家可以自行优化以下。
  • 相关阅读:
    替代MySQL半同步复制,Meta技术团队推出MySQL Raft共识引擎
    查找已注册的 Spring Security 过滤器
    集合框架----源码解读Vector篇
    C++ 课堂实验 编写一个能判断数字大小的小程序
    CloudKit教程之如何从 CloudKit 获取图像资源到 SwiftUI 应用程序
    钉钉小程序入门3—钉钉扫码登录PC端网站
    Lambda表达式 ( Java 8新特性 )
    java项目-第162期ssm电影售票系统_ssm毕业设计_计算机毕业设计
    KVM之QEMU Q35仿真程序-尚文网络xUP楠哥
    猿创征文|『51单片机』串口通信
  • 原文地址:https://blog.csdn.net/qq_40128591/article/details/132679713