这里我为您提供两种主流的实现思路,并附上详细的代码和说明,您可以直接复制到 HBuilder 的 HTML 文件中使用。

hbuilder网页图片散开特效
(图片来源网络,侵删)

纯 CSS3 实现 (简单、轻量)

这种方法利用 CSS3 的 transformtransition 属性,通过添加/移除 CSS 类来触发动画,优点是代码量少,性能好,无需 JavaScript。

核心原理:

  1. 初始状态:所有图片重叠在一起(使用 position: absolutetop: 0; left: 0;)。
  2. 散开状态:为每张图片定义不同的 transform: translate() 值,让它们向四周移动。
  3. 触发动画:通过一个父容器(.gallery)的类(.gallery.scattered)来控制所有子图片是否应用散开状态的样式。
  4. 交互:用 JavaScript 监听点击事件,点击时添加 .scattered 类,再次点击时移除。

完整代码示例 (复制到 HBuilder 的 HTML 文件即可运行)

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">HBuilder 图片散开特效 (CSS3)</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        body {
            font-family: 'Arial', sans-serif;
            background-color: #f0f2f5;
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 100vh;
            padding: 20px;
        }
        .container {
            text-align: center;
        }
        h1 {
            margin-bottom: 30px;
            color: #333;
        }
        /* 图片画廊容器 */
        .gallery {
            position: relative;
            width: 300px;
            height: 300px;
            margin: 0 auto;
            cursor: pointer;
            border-radius: 10px;
            overflow: hidden;
            box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
        }
        /* 每张图片的公共样式 */
        .gallery img {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            object-fit: cover; /* 保证图片不变形 */
            border-radius: 10px;
            /* 关键:设置过渡效果,让变化平滑 */
            transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1);
        }
        /* 默认状态下,图片重叠 */
        .gallery img:nth-child(1) { z-index: 5; }
        .gallery img:nth-child(2) { z-index: 4; }
        .gallery img:nth-child(3) { z-index: 3; }
        .gallery img:nth-child(4) { z-index: 2; }
        .gallery img:nth-child(5) { z-index: 1; }
        /* 当添加 .scattered 类后,图片散开 */
        .gallery.scattered img:nth-child(1) {
            transform: translate(-150px, -150px) scale(0.8);
        }
        .gallery.scattered img:nth-child(2) {
            transform: translate(150px, -150px) scale(0.8);
        }
        .gallery.scattered img:nth-child(3) {
            transform: translate(-150px, 150px) scale(0.8);
        }
        .gallery.scattered img:nth-child(4) {
            transform: translate(150px, 150px) scale(0.8);
        }
        .gallery.scattered img:nth-child(5) {
            transform: translate(0, 0) scale(1.2); /* 中间的图片可以放大 */
        }
        /* 提示文字 */
        .hint {
            margin-top: 20px;
            color: #666;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>点击图片散开特效</h1>
        <div class="gallery" id="myGallery">
            <img src="https://picsum.photos/seed/pic1/300/300.jpg" alt="图片1">
            <img src="https://picsum.photos/seed/pic2/300/300.jpg" alt="图片2">
            <img src="https://picsum.photos/seed/pic3/300/300.jpg" alt="图片3">
            <img src="https://picsum.photos/seed/pic4/300/300.jpg" alt="图片4">
            <img src="https://picsum.photos/seed/pic5/300/300.jpg" alt="图片5">
        </div>
        <p class="hint">点击上方的图片查看效果</p>
    </div>
    <script>
        // 获取画廊元素
        const gallery = document.getElementById('myGallery');
        // 为画廊添加点击事件监听器
        gallery.addEventListener('click', function() {
            // 切换 .scattered 类
            this.classList.toggle('scattered');
        });
    </script>
</body>
</html>

JavaScript (GSAP) 实现 (灵活、强大)

GSAP (GreenSock Animation Platform) 是一个业界顶尖的 JavaScript 动画库,它能让动画控制变得极其简单和强大,这种方法可以实现更复杂的路径、缓动效果和交互。

核心原理:

  1. 引入 GSAP:通过 CDN 引入 GSAP 库。
  2. 创建时间线:使用 GSAP 的 gsap.timeline() 创建一个动画序列。
  3. 定义动画:分别定义图片从初始位置到散开位置的动画,并添加到时间线中。
  4. 控制播放:监听点击事件,通过 timeline.play()timeline.reverse() 来控制动画的正向和反向播放。

完整代码示例 (复制到 HBuilder 的 HTML 文件即可运行)

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">HBuilder 图片散开特效 (GSAP)</title>
    <!-- 1. 引入 GSAP 库 -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/gsap.min.js"></script>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        body {
            font-family: 'Arial', sans-serif;
            background-color: #2c3e50;
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 100vh;
            padding: 20px;
        }
        .container {
            text-align: center;
        }
        h1 {
            margin-bottom: 30px;
            color: #ecf0f1;
        }
        /* 图片画廊容器 */
        .gallery {
            position: relative;
            width: 300px;
            height: 300px;
            margin: 0 auto;
            cursor: pointer;
            border-radius: 10px;
            overflow: hidden;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
        }
        /* 每张图片的公共样式 */
        .gallery img {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            object-fit: cover;
            border-radius: 10px;
        }
        /* 提示文字 */
        .hint {
            margin-top: 20px;
            color: #bdc3c7;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>点击图片散开特效 (GSAP)</h1>
        <div class="gallery" id="gsapGallery">
            <img src="https://picsum.photos/seed/gsap1/300/300.jpg" alt="GSAP图片1">
            <img src="https://picsum.photos/seed/gsap2/300/300.jpg" alt="GSAP图片2">
            <img src="https://picsum.photos/seed/gsap3/300/300.jpg" alt="GSAP图片3">
            <img src="https://picsum.photos/seed/gsap4/300/300.jpg" alt="GSAP图片4">
            <img src="https://picsum.photos/seed/gsap5/300/300.jpg" alt="GSAP图片5">
        </div>
        <p class="hint">点击上方的图片查看效果</p>
    </div>
    <script>
        document.addEventListener('DOMContentLoaded', () => {
            // 获取画廊和所有图片
            const gallery = document.getElementById('gsapGallery');
            const images = gallery.querySelectorAll('img');
            // 2. 创建一个时间线,默认是暂停的
            const tl = gsap.timeline({ paused: true });
            // 3. 定义动画并添加到时间线
            // 第一张图片:左上
            tl.to(images[0], {
                x: -150,
                y: -150,
                scale: 0.8,
                duration: 0.8,
                ease: "power2.out"
            });
            // 第二张图片:右上
            tl.to(images[1], {
                x: 150,
                y: -150,
                scale: 0.8,
                duration: 0.8,
                ease: "power2.out"
            }, "-=0.6"); // 相对于前一个动画提前0.6秒开始
            // 第三张图片:左下
            tl.to(images[2], {
                x: -150,
                y: 150,
                scale: 0.8,
                duration: 0.8,
                ease: "power2.out"
            }, "-=0.6");
            // 第四张图片:右下
            tl.to(images[3], {
                x: 150,
                y: 150,
                scale: 0.8,
                duration: 0.8,
                ease: "power2.out"
            }, "-=0.6");
            // 第五张图片:中间放大
            tl.to(images[4], {
                scale: 1.2,
                duration: 0.8,
                ease: "power2.out"
            }, "-=0.6");
            // 4. 添加点击事件来控制动画
            let isScattered = false;
            gallery.addEventListener('click', () => {
                if (!isScattered) {
                    tl.play(); // 播放动画(散开)
                    isScattered = true;
                } else {
                    tl.reverse(); // 反向播放动画(收拢)
                    isScattered = false;
                }
            });
        });
    </script>
</body>
</html>

两种方法的对比与选择

特性 纯 CSS3 方法 GSAP 方法
实现难度 简单,只需 HTML/CSS/少量 JS 中等,需要理解 GSAP API
性能 非常高,由浏览器直接优化 非常高,GSAP 经过高度优化
灵活性 较低,动画路径和效果固定 极高,可创建任意复杂的动画路径、缓动效果
代码量 ,逻辑清晰 相对较多,但结构化好
适用场景 简单的展示效果,追求快速开发 复杂的交互、游戏、高级UI动效

如何选择?

  • 如果你的需求只是一个简单的图片散开/收拢效果,并且希望代码尽可能简洁,选择方法一(纯 CSS3) 完全足够,而且性能最好。
  • 如果你想让动画更炫酷,比如图片沿着曲线运动、有弹性效果、或者这个特效是更复杂交互的一部分,强烈推荐方法二(GSAP),它能让你用更少的代码实现更强大的效果。

在 HBuilder 中,你可以直接新建一个 HTML 文件,将上述任一代码粘贴进去,然后运行到浏览器或手机模拟器上预览效果。

hbuilder网页图片散开特效
(图片来源网络,侵删)
hbuilder网页图片散开特效
(图片来源网络,侵删)