页面滚动元素渐入效果解析与简单实现

看到阿里云某个页面使用了滚动时元素渐入的动画效果,想在主题里添加类似的动效,把页面源代码扔给了deepseek,并让它提供一个极简的实现模板。感觉自己成了一个可有可无的中间商。

实现原理分析

Intersection Observer API:现代浏览器提供的API,可以高效检测元素是否进入视口
CSS Transition/Animation:结合透明度(Opacity)和位移(Transform)实现平滑过渡
滚动触发:当元素进入视口时添加动画类

简单案例

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>滚动渐入效果</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            line-height: 1.6;
            margin: 0;
            padding: 0;
        }
        
        .container {
            max-width: 1200px;
            margin: 0 auto;
            padding: 20px;
        }
        
        .section {
            height: 100vh;
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            margin-bottom: 50px;
            opacity: 0;
            transform: translateY(50px);
            transition: opacity 0.6s ease-out, transform 0.6s ease-out;
        }
        
        .section.visible {
            opacity: 1;
            transform: translateY(0);
        }
        
        h2 {
            font-size: 2rem;
            margin-bottom: 20px;
        }
        
        p {
            font-size: 1.2rem;
            max-width: 800px;
            text-align: center;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="section">
            <h2>第一部分标题</h2>
            <p>这里是第一部分的内容,当滚动到这部分时会有渐入效果。</p>
        </div>
        
        <div class="section">
            <h2>第二部分标题</h2>
            <p>这里是第二部分的内容,同样会有滚动渐入效果。</p>
        </div>
        
        <div class="section">
            <h2>第三部分标题</h2>
            <p>这里是第三部分的内容,继续向下滚动查看效果。</p>
        </div>
        
        <div class="section">
            <h2>第四部分标题</h2>
            <p>这里是最后一部分的内容,滚动效果会在这里再次触发。</p>
        </div>
    </div>

    <script>
        // 使用Intersection Observer API检测元素是否进入视口
        const sections = document.querySelectorAll('.section');
        
        const observer = new IntersectionObserver((entries) => {
            entries.forEach(entry => {
                if (entry.isIntersecting) {
                    entry.target.classList.add('visible');
                    // 可选:动画完成后取消观察以提升性能
                    // observer.unobserve(entry.target);
                }
            });
        }, {
            threshold: 0.1 // 当元素10%进入视口时触发
        });
        
        // 观察所有section元素
        sections.forEach(section => {
            observer.observe(section);
        });
    </script>
</body>
</html>

关键点说明

CSS部分:

初始状态设置opacity: 0和transform: translateY(50px)使元素不可见且下移
添加transition属性实现平滑过渡效果
.visible类使元素变为可见并回到原位

JavaScript部分:

使用IntersectionObserver监听元素进入视口
当元素进入视口时添加.visible类触发动画
可调整threshold值控制触发时机

扩展建议:

可以添加不同的动画方向(左、右、上、下)
可以设置不同的延迟时间实现错落有致的动画效果
可以结合CSS动画(@keyframes)实现更复杂的动画

标签: javascript

移动端可扫我直达哦~

推荐阅读

thumbnail 2025-04-22

html利用js读取同文件夹内的json文件的内容

想实现一个字符笔画类的小应用,笔画信息准备放在一个json文件里,用同文件夹内的html读取json以作为数据来源。以下两种方式虽然都可以实现,但需求服务器环境,如果希望能在本地直接运行html文件,那还是直接把数据写在html文件里...

建站相关 javascript

thumbnail 2025-04-01

为什么javascript会产生跨域问题而php不会

起因是在本地调试出来一个免费api获取天气的小功能,结果放服务器上却显示因同源问题,访问被拒绝,于是乎只能全部推倒重来。有同源问题的数据利用php去请求,可前端请求数据的仍旧由前端来做,最终成了一个前后端接力的形式。JavaScrip...

建站相关 javascript

thumbnail 2025-01-08

html的a标签如何实现点击下载

实现一个本地资源的点击下载,只需要在a标签上添加一个download属性,网上很多教程都是针对这个属性给出的模板。但是download属性存在一个问题,就是要求下载资源是同源的。当在页面添加了一个第三方的链接,比如一个第三方的音频文件...

建站相关 javascript

thumbnail 2023-10-13

用jquery取代a链接的title说明文字

站点的标签页原来是类似下图左侧的,在标签后用括号的形式展示了文章数量,边栏本来就小,加了数字后感觉内容变长,也有点影响标签文字的识别,就想着改成下图右侧的形式。记录一下原来生成含数字标签的代码,方便以后修改时的查询:<?php ...

建站相关 javascript

thumbnail 2023-10-11

js正则表达式的匹配与替换操作

利用exec()可以提取到某一段字符串中的指定的值,比如有下面这样一行字符串:a='-aaaa-bbbb-cccc-';想要分别提取其中的连续的字符,即“aaaa”、“bbbb”、“cccc”,书写正则表达式如下,并利用exec()函...

建站相关 javascript

thumbnail 2023-10-09

双栏多栏主题图片的lazyload问题

想为全站添加lazyload效果,这样在图片加载成功后会得到一个渐变显示的效果,看起来酷酷的。使用jquery的lazyload老牌插件,先写的js效果,后添加的模块,左边栏的图片加载的好好的,等到右边栏输出缩略图时,就出现了问题。l...

建站相关 javascript

thumbnail 2023-09-27

php如何传递数据给前端的javascript

尝试写主题的时候遇到了需要利用后台的设置数据去改变前端javascript设置的需求,比如后台设置一个幻灯的轮播速度为“5000”毫秒,需要将这个数据传递给js插件“slidejs”。最初的做法是利用php直接输出一段标签,类似下面这...

建站相关 javascript

thumbnail 2023-05-28

利用js获取当前页面的域名与网络协议等信息

浏览器会在用户有历史搜索记录之后自动弹出一些关键词供用户选择。但弹出的窗口的位置往往距离输入框过近,弹窗样式也不是特别好看。所以准备参考360,记录用户的搜索关键词,以标签的形式放在弹出窗口中,当输入框获取到焦点时,弹出自定义的窗口,...

建站相关 javascript

thumbnail 2023-05-09

利用localStorage保存用户的浏览记录

尝试在页面上加载了一言,没事刷新页面就会看到一条新的记录。偶然刷到这样一句话:“大佬永远都觉得自己是萌新”,秉承这种态度的人,一方面可能是出自谦虚。另一方面,技术迭代日新月异,知识浩如烟海,能在某一方面保持拔尖的人,确实为数不多。说回...

建站相关 javascript