当前位置: 首页 > news >正文

CSS 安卓应用卸载碎片化动画效果

在这里插入图片描述
在这里插入图片描述

这个碎片化动画包含以下特点:

  1. 碎片效果:将应用图标分解为16个碎片(4x4网格),每个碎片都有独立的动画
  2. 爆炸动画:碎片会向四周散开,同时旋转并逐渐消失
  3. 随机效果:每个碎片有随机的动画延迟和旋转角度,使效果更自然
  4. 交互功能:点击"卸载应用"按钮触发动画

关键实现技术:

  1. 使用CSS变量(–tx, --ty, --r)控制每个碎片的运动轨迹
  2. 通过JavaScript动态生成碎片元素并设置不同的动画参数
  3. transform属性实现位移、缩放和旋转的组合动画

你可以通过以下方式自定义效果:

  1. 修改@keyframes explode中的参数调整碎片运动距离和速度
  2. 增加或减少碎片数量(修改循环次数和网格布局)
  3. 调整碎片的初始大小和形状(修改.fragment的样式)
  4. 更改动画持续时间(目前是1.2秒)
  5. 如果需要更复杂的碎片效果,可以考虑使用CSS的clip-path属性创建不规则碎片形状。
<!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 {display: flex;justify-content: center;align-items: center;height: 100vh;background-color: #f5f5f5;font-family: 'Roboto', sans-serif;}.phone {position: relative;width: 300px;height: 600px;background-color: #fff;border-radius: 30px;box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);overflow: hidden;padding: 20px;box-sizing: border-box;}.app-icon {position: absolute;width: 60px;height: 60px;background: linear-gradient(135deg, #4285F4, #34A853);border-radius: 15px;top: 50%;left: 50%;transform: translate(-50%, -50%);box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);display: flex;justify-content: center;align-items: center;color: white;font-weight: bold;}.fragments-container {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);width: 60px;height: 60px;pointer-events: none;}.fragment {position: absolute;width: 15px;height: 15px;background: linear-gradient(135deg, #4285F4, #34A853);/* background: linear-gradient(270deg, #8fff85, #39a0ff); *//* background: linear-gradient(270deg, #ffed46, #ff7ec7); */border-radius: 3px;opacity: 0;animation: explode 1.2s ease-out forwards;}@keyframes explode {0% {transform: translate(0, 0) scale(1) rotate(0deg);opacity: 1;}100% {transform:translate(calc(var(--tx) * 50px - 25px),calc(var(--ty) * 50px - 25px)) scale(0.5) rotate(calc(var(--r) * 360deg));opacity: 0;}}.status-bar {height: 24px;display: flex;justify-content: space-between;padding: 0 10px;font-size: 12px;color: #333;}.home-indicator {position: absolute;bottom: 10px;left: 50%;transform: translateX(-50%);width: 100px;height: 5px;background-color: #ccc;border-radius: 3px;}button {position: absolute;bottom: 50px;left: 50%;transform: translateX(-50%);padding: 10px 20px;background-color: #4285F4;color: white;border: none;border-radius: 5px;cursor: pointer;}</style>
</head><body><div class="phone"><div class="status-bar"><span>12:30</span><span>📶 100%</span></div><div class="app-icon" id="appIcon">App</div><div class="fragments-container" id="fragments"></div><div class="home-indicator"></div><button id="uninstallBtn">卸载应用</button></div><script>document.getElementById('uninstallBtn').addEventListener('click', function () {const appIcon = document.getElementById('appIcon');const fragmentsContainer = document.getElementById('fragments');// 隐藏原始图标appIcon.style.display = 'none';// 创建16个碎片(4x4网格)for (let i = 0; i < 16; i++) {const fragment = document.createElement('div');fragment.classList.add('fragment');// 计算碎片位置const x = i % 4;const y = Math.floor(i / 4);// 设置CSS变量控制动画方向const tx = (x - 1.5) * 0.8;const ty = (y - 1.5) * 0.8;const rotation = Math.random();fragment.style.setProperty('--tx', tx);fragment.style.setProperty('--ty', ty);fragment.style.setProperty('--r', rotation);console.log(tx, 'tx')// 设置碎片初始位置fragment.style.left = `${x * 15}px`;fragment.style.top = `${y * 15}px`;// 随机延迟(0-0.3s)fragment.style.animationDelay = `${Math.random() * 0.3}s`;fragmentsContainer.appendChild(fragment);}// 动画结束后移除碎片setTimeout(() => {fragmentsContainer.innerHTML = '';appIcon.style.display = 'flex';}, 1200);});</script>
</body></html>
http://www.dtcms.com/a/315324.html

相关文章:

  • pyqt5-tools/pyqt6-tools 安装失败,解决办法
  • 【秋招笔试】2025.08.03虾皮秋招笔试-第三题
  • 7.2 I/O接口 (答案见原书 P305)
  • 大模型部署、nvidia-smi、token数
  • Java项目:基于SSM框架实现的商铺租赁管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告+任务书+远程部署】
  • pytorch 学习笔记3-利用框架内网络训练糖尿病数据集
  • Linux 使用 firewalld :开放端口与常用操作指南
  • Endpoint(端点)详解
  • ROS2机器人编程新书推荐-2025-精通ROS 2机器人编程:使用ROS 2进行复杂机器人的设计、构建、仿真与原型开发(第四版)
  • 16_OpenCV_漫水填充(floodFill)
  • 【web应用】若依框架:基础篇18-二次开发-菜品管理
  • VGMP(VRRP Group Management Protocol)VRRP组管理协议
  • 知识蒸馏 - 基于KL散度的知识蒸馏 HelloWorld 示例 KL散度公式变化
  • Demo-LangGraph构建Agent
  • Assistant API——构建基于大语言模型的智能体应用
  • 通义万相国际版wan2.2开源第6天:主题运动
  • 二值图针对内部轮廓腐蚀膨胀
  • 李宏毅深度学习教程 第10-11章 自监督学习self-supervised learning+自编码器
  • FFmpeg02:常用命令实战
  • 【LeetCode 热题 100】215. 数组中的第K个最大元素——(解法一)快速选择
  • CentOS卸载、安装MySQL8(yum操作)
  • 肾上腺疾病AI诊疗一体化系统应用方向探析
  • 智能图书馆管理系统开发实战系列(七):CMake构建系统与持续集成
  • 【Node.js从 0 到 1:入门实战与项目驱动】1.2 Node.js 的核心优势(非阻塞 I/O、事件驱动、单线程模型)
  • 比起登天,孙宇晨更需要安稳着陆
  • 飞算 JavaAI:为软件安全上锁的智能守护者
  • Antlr学习笔记 02、使用antlr4实现简易版计算器
  • 【Z字形变换】
  • 离线Docker项目移植全攻略
  • 明远智睿T113-i核心板:工业设备制造领域成本控制的破局者