zoukankan      html  css  js  c++  java
  • vue项目中的渐隐渐现效果

    一、背景需求

    在页面中,我们希望实现以下功能:
    进入页面时,顶部左侧显示返回按钮
    当页面向下滚动一定距离时,在可视区域顶部固定“Header”一栏
    效果如下:

    gif

    二、实现思路

    1、静态布局

    在页面加载完成后、开始滚动前:
    将返回按钮所在的div 设置绝对定位,用标志位showAbs设置v-show

    // template
    <router-link
        tag="div"
        to="/"
        class="header-abs"
        v-show="showAbs">
        <div class="iconfont header-abs-back">&#xe624;</div>
    </router-link>
    

    将"Header"栏所在的div 设置固定定位,用标志位showFixed设置v-show

    // template
    <div
        class="header-fixed"
        v-show="showFixed"
        :style="opacityStyle">
        景点详情
        <router-link to="/">
          <div class="iconfont header-fixed-back">&#xe624;</div>
        </router-link>
    </div>
    

    2、监听滚动事件

    在当前组件中,添加mounted的生命周期钩子函数
    当页面开始滚动,触发handleScroll函数

    mounted () {
        window.addEventListener('scroll', this.handleScroll)
    }
    

    在离开当前页面后,解除对这个全局事件的绑定

    destroyed () {
        window.removeEventListener('scroll', this.handleScroll)
    }
    

    3、设置透明度的变化

    在template模板中,我们给顶部栏绑定了 opacityStyle 对应的样式
    当页面滚动距离在指定区间内,就让透明度随着滚动距离而变化
    当顶部栏完全显示(opacity=1)后,不再变化

    data () {
        return {
          showAbs: true,
          opacityStyle: {
            // 设置初始状态是透明的
            opacity: 0
          }
        }
      },
    methods: {
        handleScroll () {
          const top = document.documentElement.scrollTop || document.body.scrollTop || window.pageYOffset
          if (top > 60) {
            let opacity = top / 140
            if (opacity >= 1) {
              opacity = 1
            }
            this.opacityStyle = { opacity }
            this.showAbs = false
          } else {
            this.showAbs = true
          }
        }
      }
  • 相关阅读:
    20180404
    20180323
    20180315
    mongodb
    linux 集群 读写分离 session入库 负载均衡 配置
    linux 搭建配置 lnmp搭建
    有语义标签
    CSS标签属性
    使用QQ登录商城
    ajax 跨域
  • 原文地址:https://www.cnblogs.com/baebae996/p/13358843.html
Copyright © 2011-2022 走看看