分類
標籤
.env AI AI 平台 Arm Astro BigQuery btop Certbot Chrome CICD Cookie Coolify CORS CSS cURL DataTables defineExpose DevOps Dify Fetch API Gamania GitLab Google Calendar Google Cloud Summit Google Tag Manager GSAP HTML iCal inject JavaScript Laravel Less LINE Llama 3 Masonry Meta Nginx Nginx UI No-code O(log n) Ollama OpenSSL Oracle PHP Pinia Pixel provide Proxyman Raycast requestAnimationFrame script setup Server Session Sitemap Socialite SSL UI元件 Valet Vertex AI Vite Vue 2 Vue 3 Vue3 Vuex Webpack Yahoo Calendar Zeabur 二分搜尋 使用者體驗 元件溝通 前端開發 動畫效果 峰值體驗 廣告 性能優化 打包 拖曳功能 推薦系統 搜尋 效率工具 時間複雜度 演算法 瀑布流排版 父子元件 版面配置 狀態管理 環境變數 程式碼複製按鈕 系統監控 網站地圖 網頁開發 自動化部署 自架伺服器 螢幕刷新率 語言模型 資訊檢索 跨域請求 轉化率 開發工具 開發環境 陣列 電子商務
313 字
2 分鐘
使用 HTML、CSS 和 JavaScript 實現鑽石噴灑效果
鑽石噴灑效果實現
主要是使用 GSAP 來實現動畫效果,並且管理 DOM 元素,減少 DOM 操作的頻率。
基礎架構
- HTML 結構
<!DOCTYPE html>
<html>
<head>
<title>鑽石噴灑效果</title>
</head>
<body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.5/gsap.min.js"></script>
</body>
</html>
- CSS 樣式
.diamond {
width: 60px;
height: 60px;
position: absolute;
will-change: transform, opacity;
background-image: url('diamond.png');
background-size: cover;
filter: drop-shadow(0 2px 4px rgba(0,0,0,0.2));
}
核心實現
- 管理目標物件
const DIAMOND_COUNT = 10;
const DIAMOND_POOL_SIZE = 30;
function createDiamondPool() {
for (let i = 0; i < DIAMOND_POOL_SIZE; i++) {
const diamond = document.createElement("div");
diamond.classList.add("diamond");
diamond.style.display = 'none';
document.body.appendChild(diamond);
diamondPool.push(diamond);
}
}
- 動畫控制
function animateDiamond(diamond, clickX, clickY) {
const [endX, endY] = getRandomPointInCircle(clickX, clickY, 100);
// 噴射動畫
gsap.to(diamond, {
duration: 0.4,
x: endX - 30,
y: endY - 30,
scale: 0.8 + Math.random() * 0.4,
rotation: (Math.random() - 0.5) * 60,
ease: "power2.out",
onComplete: handleFallAnimation
});
}
function handleFallAnimation(diamond) {
gsap.to(diamond, {
duration: 0.6,
y: window.innerHeight + 50,
opacity: 0,
ease: "power1.in",
onComplete: () => returnDiamond(diamond)
});
}
效能優化
- 使用對象池減少 DOM 操作
- 應用
will-change
優化動畫性能 - 實現點擊節流控制
const CLICK_THRESHOLD = 100;
let lastClickTime = 0;
document.addEventListener("click", (event) => {
if (Date.now() - lastClickTime < CLICK_THRESHOLD) return;
lastClickTime = Date.now();
createDiamonds(event.clientX, event.clientY);
});
範例
使用 HTML、CSS 和 JavaScript 實現鑽石噴灑效果
https://laplusda.com/posts/diamond-spray-effect/