下面我将从简单到复杂,为你提供几个非常实用的动态效果代码示例,并附上详细解释,你可以直接复制这些代码,保存为 .html 文件,然后在浏览器中打开查看效果。

html网页制作动态效果代码
(图片来源网络,侵删)

示例 1:CSS 实现的平滑滚动和渐显动画

这是最基础也是最常用的动态效果,非常适合用于作品集、博客等网站,让页面加载和滚动时更平滑、更有层次感。

效果描述:

  • 当你滚动页面时,标题和卡片会平滑地淡入并滑入视野。
  • 点击导航栏的链接,页面会平滑滚动到对应部分,而不是瞬间跳转。

代码:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">CSS 动态效果示例</title>
    <style>
        /* --- 全局和基础样式 --- */
        body {
            font-family: 'Arial', sans-serif;
            margin: 0;
            padding: 0;
            background-color: #f4f4f4;
            color: #333;
        }
        /* --- 平滑滚动 --- */
        html {
            scroll-behavior: smooth; /* 一行代码实现平滑滚动! */
        }
        /* --- 导航栏 --- */
        nav {
            position: fixed; /* 固定在顶部 */
            top: 0;
            width: 100%;
            background-color: #333;
            z-index: 1000; /* 确保在最上层 */
        }
        nav ul {
            list-style: none;
            margin: 0;
            padding: 0;
            display: flex;
            justify-content: center;
        }
        nav a {
            display: block;
            color: white;
            text-decoration: none;
            padding: 20px 30px;
            transition: background-color 0.3s ease;
        }
        nav a:hover {
            background-color: #555;
        }
        /* --- 内容区域 --- */
        section {
            height: 100vh; /* 每个section占满一屏 */
            display: flex;
            justify-content: center;
            align-items: center;
            flex-direction: column;
        }
        #home { background-color: #ff9a9e; }
        #about { background-color: #a8edea; }
        #portfolio { background-color: #fed6e3; }
        /* --- 动画元素 --- */
        .fade-in {
            opacity: 0; /* 初始状态为透明 */
            transform: translateY(30px); /* 初始状态向下偏移 */
            transition: opacity 0.8s ease-out, transform 0.8s ease-out;
        }
        .fade-in.visible {
            opacity: 1; /* 变为不透明 */
            transform: translateY(0); /* 回到原位 */
        }
        /* 卡片样式 */
        .card {
            background: white;
            padding: 30px;
            border-radius: 8px;
            box-shadow: 0 4px 8px rgba(0,0,0,0.1);
            max-width: 400px;
            text-align: center;
            margin: 20px;
        }
    </style>
</head>
<body>
    <nav>
        <ul>
            <li><a href="#home">首页</a></li>
            <li><a href="#about">lt;/a></li>
            <li><a href="#portfolio">作品集</a></li>
        </ul>
    </nav>
    <section id="home">
        <h1 class="fade-in">欢迎来到我的网站</h1>
        <p class="fade-in">滚动页面查看动画效果</p>
    </section>
    <section id="about">
        <h2 class="fade-in">关于我</h2>
        <div class="card fade-in">
            <p>我是一名热爱创造美好用户体验的前端开发者。</p>
        </div>
    </section>
    <section id="portfolio">
        <h2 class="fade-in">我的作品</h2>
        <div class="card fade-in">
            <p>这是一个使用纯CSS实现的动态效果示例。</p>
        </div>
        <div class="card fade-in">
            <p>简单、优雅且高效。</p>
        </div>
    </section>
    <script>
        // --- JavaScript 控制滚动时的动画 ---
        // 获取所有带有 'fade-in' 类的元素
        const faders = document.querySelectorAll('.fade-in');
        // 创建一个观察器实例
        const appearOptions = {
            threshold: 0.1, // 当元素10%进入视口时触发
            rootMargin: "0px 0px -100px 0px" // 触发前100px就开始
        };
        const appearOnScroll = new IntersectionObserver(function(entries, appearOnScroll) {
            entries.forEach(entry => {
                // 如果元素在视口中
                if (!entry.isIntersecting) {
                    return;
                } else {
                    // 添加 'visible' 类来触发动画
                    entry.target.classList.add('visible');
                    // 动画完成后,停止观察该元素以优化性能
                    appearOnScroll.unobserve(entry.target);
                }
            });
        }, appearOptions);
        // 开始观察每个需要动画的元素
        faders.forEach(fader => {
            appearOnScroll.observe(fader);
        });
    </script>
</body>
</html>

代码解析:

  1. CSS:

    • scroll-behavior: smooth;: 在 html 标签上设置,让所有锚点链接的滚动都变得平滑。
    • .fade-in: 定义了元素的初始状态(透明、下移)和最终状态(不透明、原位)。transition 属性告诉浏览器,当 opacitytransform 属性变化时,用0.8秒的时间进行平滑过渡。
    • .fade-in.visible: 这是动画的终点,当这个类被添加到元素上时,opacitytransform 的值改变,触发 transition 动画。
  2. JavaScript:

    • 我们使用 Intersection Observer API,这是现代浏览器提供的高性能API,用于检测元素是否进入或离开视口。
    • 我们创建了一个观察器 appearOnScroll,并设置 threshold: 0.1,意味着当元素有10%进入浏览器窗口时,观察器就会触发。
    • faders.forEach(...) 遍历所有带有 fade-in 类的元素,并让观察器开始观察它们。
    • 当元素进入视口时,观察器的回调函数被执行,我们给该元素添加 visible 类,从而触发CSS动画。

示例 2:JavaScript 实现的打字机效果

这个效果非常适合用在首页的欢迎语或标题上,能吸引用户的注意力。

html网页制作动态效果代码
(图片来源网络,侵删)

效果描述:

  • 一行文字会像打字机一样,一个字符一个字符地出现。
  • 打字完成后,光标会闪烁。

代码:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">打字机效果</title>
    <style>
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            background-color: #282c34;
            color: white;
            font-family: 'Courier New', Courier, monospace;
        }
        h1 {
            font-size: 3rem;
        }
        .cursor {
            display: inline-block;
            width: 3px;
            height: 1em;
            background-color: white;
            animation: blink 1s infinite;
        }
        @keyframes blink {
            0%, 50% { opacity: 1; }
            51%, 100% { opacity: 0; }
        }
    </style>
</head>
<body>
    <h1 id="typewriter"></h1>
    <span class="cursor">&nbsp;</span> <!-- 光标 -->
    <script>
        document.addEventListener('DOMContentLoaded', () => {
            const text = "你好,世界!";
            const element = document.getElementById('typewriter');
            let index = 0;
            function typeWriter() {
                if (index < text.length) {
                    element.innerHTML += text.charAt(index);
                    index++;
                    // 调整速度,单位是毫秒
                    setTimeout(typeWriter, 150); 
                }
            }
            typeWriter();
        });
    </script>
</body>
</html>

代码解析:

  1. HTML: 只需要一个 <h1> 元素来显示文字,和一个 <span> 元素作为闪烁的光标。
  2. CSS:
    • .cursor: 定义了一个很窄的白色竖条作为光标。
    • @keyframes blink: 定义了一个名为 blink 的动画,让光标的透明度在1和0之间切换,infinite 表示无限循环。
    • animation: blink 1s infinite;: 将 blink 动画应用到光标上,每次循环1秒。
  3. JavaScript:
    • document.addEventListener('DOMContentLoaded', ...): 确保在HTML文档完全加载和解析后才执行脚本。
    • typeWriter 函数是核心逻辑。
    • if (index < text.length): 检查是否还有字符需要打印。
    • element.innerHTML += text.charAt(index);: 每次循环,将目标字符串的下一个字符追加到 h1 的内容中。
    • index++: 增加索引,以便下一次循环获取下一个字符。
    • setTimeout(typeWriter, 150);: 在150毫秒后再次调用 typeWriter 函数,形成循环,通过调整这个时间值,可以控制打字的速度。

示例 3:鼠标悬停的 3D 卡片翻转效果

这是一个非常酷炫的交互效果,能让你的卡片或图片在鼠标悬停时翻转,显示背面的内容。

效果描述:

  • 卡片默认显示正面。
  • 当鼠标移到卡片上时,卡片会沿Y轴翻转180度,显示背面的内容。
  • 鼠标移开时,卡片会翻转回来。

代码:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">3D 翻转卡片</title>
    <style>
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            background: linear-gradient(135deg, #6e8efb, #a777e3);
            perspective: 1000px; /* 为3D变换设置视角距离 */
        }
        .card-container {
            width: 300px;
            height: 400px;
            position: relative;
            transform-style: preserve-3d; /* 保持3D变换,让子元素也能进行3D变换 */
            transition: transform 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275); /* 平滑的翻转过渡 */
        }
        .card-container:hover {
            transform: rotateY(180deg); /* 悬停时,沿Y轴旋转180度 */
        }
        .card {
            position: absolute;
            width: 100%;
            height: 100%;
            backface-visibility: hidden; /* 隐藏元素的背面 */
            border-radius: 15px;
            box-shadow: 0 10px 30px rgba(0,0,0,0.3);
            display: flex;
            justify-content: center;
            align-items: center;
            font-size: 2rem;
            color: white;
            text-align: center;
            padding: 20px;
        }
        .card-front {
            background-image: linear-gradient(to right, #ff7e5f, #feb47b);
        }
        .card-back {
            background-image: linear-gradient(to right, #4facfe, #00f2fe);
            transform: rotateY(180deg); /* 初始状态下,背面已经旋转180度,所以是正对我们的 */
        }
    </style>
</head>
<body>
    <div class="card-container">
        <div class="card card-front">
            <h2>正面内容</h2>
            <p>将鼠标悬停在此卡片上</p>
        </div>
        <div class="card card-back">
            <h2>背面内容</h2>
            <p>这里可以放更多信息</p>
        </div>
    </div>
</body>
</html>

代码解析:

  1. CSS (3D变换的关键):
    • perspective: 1000px;: 在父元素上设置,它定义了观察者与 z=0 平面的距离,值越小,3D效果越强烈(透视感越强)。
    • transform-style: preserve-3d;: 在父元素(.card-container)上设置,这是实现3D翻转的核心,它告诉浏览器这个元素的子元素应该在3D空间中进行变换。
    • .card-container:hover { transform: rotateY(180deg); }: 当鼠标悬停时,让整个容器翻转180度。
    • backface-visibility: hidden;: 在两个卡片上设置,这非常重要!它防止了翻转过程中,卡片的背面(现在变成了正面)在翻转到一半时显示出来,造成视觉上的混乱。
    • .card-back { transform: rotateY(180deg); }: 在初始状态下,就将背面旋转180度,这样,当容器整体再旋转180度时,背面就正好旋转了360度(即0度),正面朝向我们。

总结与建议

动效类型 主要技术 难度 适用场景
滚动动画 CSS transition + JavaScript Intersection Observer 中等 页面加载、滚动时的元素渐入、滑入
打字机效果 JavaScript setTimeout / setInterval 简单 、Slogan、动态文本展示
3D翻转 CSS transform (rotateY, preserve-3d, perspective) 中等 卡片式设计、产品展示、个人简介

学习建议

  1. 从模仿开始:先复制上面的代码,理解每一部分的作用。
  2. 修改参数:尝试修改动画时间、颜色、文字、旋转角度等,看看效果如何变化。
  3. 组合使用:将多个效果组合在一起,比如一个带有打字机效果的标题,在滚动时再渐显。
  4. 学习更多API:除了 Intersection Observer,还可以学习 requestAnimationFrame (用于制作高性能动画) 和 CSS 的 @keyframes (用于制作更复杂的序列动画)。

希望这些例子能帮助你开始制作精彩的动态网页!

html网页制作动态效果代码
(图片来源网络,侵删)