css+js实现滚动渐变

news2024/10/12 7:15:31

业务要求:
在页面中有一个

希望在滚动的过程中给这个div加一个rgba(247, 248, 252,1)背景色,要求在滚动1px的时候白色透明度为0,滚动到banner高度的时候透明度为1并且过程是丝滑的

为了实现这一效果,可以采用CSS的linear-gradient结合JavaScript来动态调整背景颜色的透明度。下面是如何实现这一功能的具体步骤:

  1. CSS样式定义
    首先,在CSS中定义一个类,用于设置content 的背景颜色和过渡效果。
.content {
  position: relative;
  background: transparent;
  transition: background 0.3s ease-in-out; // 如果效果很平滑不需要加
  margin: 0 -12px; // 如果区域自带padding的话可以用
  padding: 0 12px;// 如果区域自带padding的话可以用
}

  1. JavaScript处理滚动事件
    然后,在JavaScript中监听窗口的滚动事件,并根据滚动距离动态改变背景颜色的透明度。
import { useEffect, useRef, useState, useMemo } from 'react';
import BannerArea from './components/BannerArea';
import styles from './index.module.less';

export default function AppList() {
  const [bannerList, setBannerList] = useState([]);
  const layoutRef = useRef<HTMLDivElement>(null);
  const bannerAreaRef = useRef<HTMLDivElement>(null);
  const [scrollTop, setScrollTop] = useState(0);
  const [bannerHeight, setBannerHeight] = useState(0);

  // 计算 bannerArea 的高度
  useEffect(() => {
    if (bannerList.length > 0 && bannerAreaRef.current) {
      setBannerHeight(bannerAreaRef.current.clientHeight);
    }
  }, [bannerList]);

  // 监听滚动事件
  useEffect(() => {
    const handleScroll = () => {
      if (layoutRef.current) {
        setScrollTop(layoutRef.current.scrollTop);
      }
    };

    if (layoutRef.current) {
      layoutRef.current.addEventListener('scroll', handleScroll);
    }

    return () => {
      if (layoutRef.current) {
        layoutRef.current.removeEventListener('scroll', handleScroll);
      }
    };
  }, []);

  // 根据滚动距离计算背景透明度
  const opacity = useMemo(() => {
    const newOpacity = Math.min(1, scrollTop / bannerHeight);
    return newOpacity;
  }, [scrollTop, bannerHeight]);

  return (
        <div
          className={styles.content}
          style={{ background: `rgba(247, 248, 252, ${opacity})` }}
        >
          {/* Banner区域 */}
          <div ref={bannerAreaRef}>
            {bannerList?.length ? <BannerArea bannerList={bannerList} /> : null}
          </div>
        </div>
    </Layout>
  );
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2207380.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二叉树改良版——AVL树

为什么说是“改良”&#xff0c;其实标题的二叉树指的是搜索二叉树&#xff0c;它虽然可以缩短查找的效率&#xff0c;但如果数据已经有序或接近有序的话二叉树就会退化成单支树&#xff0c;这样查找元素的话反而会效率低下。因此&#xff0c;为了解决这个问题&#xff0c;AVL树…

zynq 添加lwip库

在自己的项目属性中. 就是在上一行的下面加了一行配置. 多了个 -llwip4 -Wl,--start-group,-lxil,-llwip4,-lgcc,-lc,--end-group

第十四届单片机嵌入式蓝桥杯

一、CubeMx配置 &#xff08;1&#xff09;LED配置 &#xff08;1&#xff09;LED灯里面用到了SN74HC573ADWR锁存器&#xff0c;这个锁存器有一个LE引脚,这个是我们芯片的锁存引脚&#xff08;使能引脚&#xff09;&#xff0c;由PD2这个端口来控制的 &#xff08;2&#xff…

Qt初识_通过代码创建hello world

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 Qt初识_通过代码创建hello world 收录于专栏【Qt开发】 本专栏旨在分享学习Qt的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1.通过按…

魔珐出席INSIGHT金融洞察力峰会,共探AI内容生成新范式

2024年9月27日&#xff0c;2024INSIGHT金融洞察力在北京举行&#xff0c;来自银行、保险、期货、证券、基金等行业的业界翘楚&#xff0c;共商行业热点议题&#xff0c;为金融行业增进互信、扩大合作搭建闭门平台&#xff0c;贡献价值与力量。 魔珐科技AIGC业务负责人杜子航&a…

XUbuntu安装OpenSSH远程连接服务器

目录 打开终端。更新你的包索引安装OpenSSH服务器。在终端中输入以下命令&#xff1a;安装完成后&#xff0c;OpenSSH服务器会自动启动。查看主机 IP测试连接打开 cmd 终端SSH 连接虚拟机确认连接输入连接密码发现问题修改用户&#xff0c;尝试连接 打开终端。 更新你的包索引 …

候机时间计算(数学小题目,练习时间字符串“解析”)

时间字符串的简单处理&#xff0c;可自行解析也可以调库。 (笔记模板由python脚本于2024年10月10日 18:06:42创建&#xff0c;本篇笔记适合有基本编程逻辑的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“…

MinIO 学习订阅服务

MinIO 的入门非常简单 — 只需几个简单的命令和一个 100 MB 的小二进制文件&#xff0c;您就可以立即启动并运行一个功能性开发环境。但是&#xff0c;为了在生产规模上利用 MinIO 的全部功能&#xff0c;我们鼓励专业人士更多地了解 MinIO 的广泛功能。我们推出了 MinIO 学习订…

Spring Boot课程问答:技术难题专家解答

摘要 随着信息互联网信息的飞速发展&#xff0c;无纸化作业变成了一种趋势&#xff0c;针对这个问题开发一个专门适应师生交流形式的网站。本文介绍了课程答疑系统的开发全过程。通过分析企业对于课程答疑系统的需求&#xff0c;创建了一个计算机管理课程答疑系统的方案。文章介…

企业远控私有化部署解决方案-内信互联

内信互联&#xff08;DoLink&#xff09;&#xff0c;是点量软件新推出的企业私有化远程控制系统解决方案。很多朋友对这个产品还不是很了解&#xff0c;今天点量小编就对其基础功能做一些详细说明&#xff0c;如果您想快速拥有自己的企业私有远程控制系统&#xff0c;欢迎联系…

xavier 在tensorflow pytorch中的应用,正太分布和均匀分布的计算公式不一样

Xavier初始化&#xff0c;也被称为Glorot初始化&#xff0c;是一种用于深度神经网络的权重初始化方法。这种方法是由Xavier Glorot和Yoshua Bengio在2010年的论文《Understanding the difficulty of training deep feedforward neural networks》中提出的。Xavier初始化的主要目…

bpmn-js 元素与布局渲染

BPMN-JS 是基于 BPMN 2.0来定义元素关联关系,并通过Diagram-js库来实现web可视化的显示和编辑工作。Diagram-js 也是由BPMN.IO组织开发的一个专门用于业务流程建模符号(BPMN)的可视化开源 JavaScript 库。 元素(Elements) BPMN 2.0(Business Process Model and Notation…

Windows docker 部署MiGPT+ 本地Ollama

1. 下载 MiGPT https://github.com/idootop/mi-gpt https://github.com/idootop/mi-gpt/releases/tag/v4.2.0 2. 运行 Ollama qwen模型 3.配置Mi GPT .env .migpt.js 运行docker 运行 需要上网 docker run -d --env-file D:\LLM\mi-gpt-4.2.0\.env -v D:\LLM\mi-gpt-4.2.0…

【读书笔记·VLSI电路设计方法解密】问题12:制造MOSFET晶体管的主要工艺步骤是什么

VLSI芯片是在半导体材料上制造的,这种材料的导电性介于绝缘体和导体之间。通过一种称为掺杂的工艺引入杂质,可以改变半导体的电气特性。能够在半导体材料的细小且定义明确的区域内控制导电性,促使了半导体器件的发展。结合更简单的无源元件(电阻、电容和电感),这些器件被…

3D汽车动画:技术、应用与行业影响

3D汽车动画&#xff0c;凭借其逼真的可视化效果和动态功能&#xff0c;已成为汽车行业展示创新和技术实力的重要工具。它不仅能够细致地呈现产品功能&#xff0c;还能模拟复杂的驾驶场景&#xff0c;帮助客户全面了解汽车的性能和设计。3D汽车动画的应用不仅加强了汽车设计展示…

给定任意非空有向图 G,输出 G 中所有 K 顶点的算法,并返回 K 顶点的个数。

已知优先图 G 采用邻接矩阵存储是&#xff0c;其定义如下 typedef struct { // 图的定义 int numVertices, numEdges; // 图中实际的顶点数和边数 char VerticesList[MAXV]; // 顶点表&#xff0c;MAXV为已定义常量 int Edge[MAXV]…

QD1-P9 HTML 超链接标签(a)上篇

本节学习&#xff1a;HTML 超链接标签&#xff0c;也就是 a 标签。 在前端开发中&#xff0c;<a>​ 标签是超链接&#xff08;anchor&#xff09;标签&#xff0c;用于创建指向其他网页、文件、位置等的链接。 本节视频 www.bilibili.com/video/BV1n64y1U7oj?p9 简单示…

laravel DCAT 中如何修改面包屑导航栏内容

dcat中修改面包屑 一、背景二、找到设置的方法三、修改面包屑 一、背景 DCAT的页面还是非常干净的&#xff0c;当设置语言格式为zh_CN以后&#xff0c;发现面包屑导航还有英文&#xff0c;如下图所示&#xff1a; 二、找到设置的方法 根据dcat文档介绍&#xff0c;页面分为…

IPv 4

IP协议 网络层主要由IP&#xff08;网际协议&#xff09;和ICMP&#xff08;控制报文协议&#xff09;构成&#xff0c;对应OSI中的网络层&#xff0c;网络层以实现逻辑层面点对点通信为目的。目前应用最广泛的IP协议为IPv4 基本概念给出 主机&#xff1a;配有IP地址但不具有路…

Visual Studio Code基础:使用debugpy调试python程序

相关阅读 VS codehttps://blog.csdn.net/weixin_45791458/category_12658212.html?spm1001.2014.3001.5482 一、安装调试器插件 在VS code中可以很轻松地调试Python程序&#xff0c;首先需要安装Python调试器插件&#xff0c;如图1所示。 图1 安装调试器插件 Python Debugge…