• 在vue中通过backdrop-filter实现渐变的高斯模糊


    一、需求分析

    当用户向上滚动屏幕后,我们希望上方的图片可以有渐变的模糊效果
    也就是说 我们需要:
    1、监听页面的滚动
    2、计算模糊度关于滚动距离的函数
    3、设置DOM元素的高斯模糊

    二、关于backdrop-filter

    这个CSS属性的作用是:对元素后面的所有内容应用过滤效果

    <template>
      <div class="bg-image"  ref="bgImage">
          <div class="filter" ref="filter"></div>
      </div>
    </template>
    

    注意:元素本身或其背景需要设置一定的透明度

    <style scoped lang="stylus">
    .filter
      background: rgba(7, 17, 27, 0.4)
    </style>
    

    关于backdrop-filter属性的更多取值可以参考MDN官方文档

    三、具体实现过程

    当用户开始滚动屏幕时,会触发scroll事件
    通过已经封装好的better-scroll组件,传入参数pos
    将pos.y赋值给this.scrollY

    methods: {
        scroll(pos) {
          this.scrollY = pos.y
        }
    }
    

    通过watch监听scrollY的变化
    初始化变量 blur=0
    设置变量percent 为 scroolY与图片绝对高度(ImageHeight)的比值
    使得blur从0开始,随着|scrollY|变大而变大,直到20px

    watch:{
      scrollY(newY) {
        let blur = 0
        const percent = Math.abs(newY/ this.ImageHeight)
    
        if (newY<=0) {
          blur =  Math.min(20 * percent, 20)
        }
    
        this.$refs.filter.style['backdrop-filter'] = `blur(${blur}px)`
        this.$refs.filter.style['webkitBackdrop-filter'] = `blur(${blur}px)`
      }
    }
    

    最终效果如下:
    gif6.gif

  • 相关阅读:
    模板引擎
    MongoDB基础操作
    node异步编程
    关于bootstrap table 的可编辑列表的实例
    weblogic 补丁步骤
    BIZ中model.getSql源码分析
    windows切换 jdk的坑!!!
    Oracle 给予访问其他用户包的权限
    关于解决Tomcat服务器Connection reset by peer 导致的宕机
    查找多余逗号的正则表达式
  • 原文地址:https://www.cnblogs.com/baebae996/p/13781938.html
Copyright © 2020-2023  润新知