找到
18
篇与
Feng
相关的结果
- 第 2 页
-
趣味web在线小游戏-贪吃蛇🐍 图片 web贪吃蛇小游戏介绍 一、项目概述 {iframe src="https://code.juejin.cn/pen/7529911569736532006" height="100vh"/} “贪吃蛇”是一个简单而有趣的项目。它基于 HTML、CSS 和 JavaScript 构建,运用了 Tailwind CSS 进行样式设计,为玩家提供了一个经典贪吃蛇游戏的现代版本。玩家通过控制蛇的移动方向,吃掉随机生成的食物,使蛇不断变长,同时要避免撞到墙壁或自己的身体。游戏还设有难度调整功能,增加了游戏的趣味性和挑战性。 二、项目结构与技术栈 1. HTML 结构 HTML 文件 snake-game.html 是整个项目的基础,它负责搭建游戏的页面结构。以下是部分关键 HTML 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>简约贪吃蛇</title> <script src="https://cdn.tailwindcss.com"></script> <link href="https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css" rel="stylesheet"> <!-- 其他头部信息 --> </head> <body class="bg-darker min-h-screen flex flex-col items-center justify-center p-4 font-game text-light overflow-x-hidden"> <!-- 背景装饰 --> <div class="fixed inset-0 -z-10 opacity-10"> <div class="absolute top-10 left-10 w-64 h-64 rounded-full bg-primary/30 blur-3xl"></div> <div class="absolute bottom-10 right-10 w-80 h-80 rounded-full bg-secondary/30 blur-3xl"></div> <div class="absolute top-1/2 left-1/4 w-40 h-40 rounded-full bg-accent/30 blur-3xl"></div> </div> <div class="w-full max-w-3xl flex flex-col items-center"> <header class="w-full text-center mb-8 relative"> <h1 class="text-[clamp(2.5rem,6vw,4rem)] font-bold text-primary mb-2 text-shadow text-glow tracking-tight"> <span class="inline-block transform hover:scale-105 transition-transform duration-300">简</span> <span class="inline-block transform hover:scale-105 transition-transform duration-300">约</span> <span class="inline-block transform hover:scale-105 transition-transform duration-300">贪</span> <span class="inline-block transform hover:scale-105 transition-transform duration-300">吃</span> <span class="inline-block transform hover:scale-105 transition-transform duration-300">蛇</span> </h1> <p class="text-light/70 text-[clamp(1rem,2vw,1.2rem)] max-w-2xl mx-auto"> 控制蛇移动,吃掉食物,避开墙壁和自己的身体,挑战最高分! </p> </header> <main class="w-full flex flex-col md:flex-row gap-8"> <div class="w-full md:w-2/3 relative"> <div class="game-gradient rounded-2xl shadow-2xl p-3 mb-6 relative overflow-hidden"> <canvas id="gameCanvas" class="w-full aspect-square rounded-xl bg-dark/70"></canvas> </div> <div class="flex justify-center gap-4 mt-4"> <button id="startBtn" class="bg-primary hover:bg-primary/90 text-white font-medium py-3 px-8 rounded-xl transition-all duration-300 transform hover:scale-105 active:scale-95 shadow-lg flex items-center justify-center button-pulse"> <i class="fa fa-play mr-2"></i> 开始游戏 </button> <button id="pauseBtn" class="bg-secondary hover:bg-secondary/90 text-white font-medium py-3 px-8 rounded-xl transition-all duration-300 transform hover:scale-105 active:scale-95 shadow-lg flex items-center justify-center" disabled> <i class="fa fa-pause mr-2"></i> 暂停游戏 </button> <button id="resetBtn" class="bg-gray-700 hover:bg-gray-600 text-white font-medium py-3 px-8 rounded-xl transition-all duration-300 transform hover:scale-105 active:scale-95 shadow-lg flex items-center justify-center"> <i class="fa fa-refresh mr-2"></i> 重置游戏 </button> </div> </div> <div class="w-full md:w-1/3 glass-effect rounded-2xl p-6 shadow-xl border border-white/10"> <div class="mb-6"> <h2 class="text-2xl font-bold text-primary mb-3 flex items-center"> <i class="fa fa-trophy mr-3 text-secondary"></i> 游戏数据 </h2> <div class="space-y-4"> <div class="bg-dark/50 rounded-xl p-4 flex justify-between items-center hover-lift"> <span class="text-light/80 flex items-center"> <i class="fa fa-star text-yellow-400 mr-2"></i> 当前得分: </span> <span id="score" class="text-3xl font-bold text-secondary">0</span> </div> <div class="bg-dark/50 rounded-xl p-4 flex justify-between items-center hover-lift"> <span class="text-light/80 flex items-center"> <i class="fa fa-crown text-yellow-500 mr-2"></i> 最高分: </span> <span id="highScore" class="text-3xl font-bold text-primary">0</span> </div> <div class="bg-dark/50 rounded-xl p-4 flex justify-between items-center hover-lift"> <span class="text-light/80 flex items-center"> <i class="fa fa-bolt text-accent mr-2"></i> 蛇长: </span> <span id="snakeLength" class="text-3xl font-bold text-accent">3</span> </div> </div> </div> <div class="mb-6"> <h2 class="text-2xl font-bold text-primary mb-3 flex items-center"> <i class="fa fa-info-circle mr-3 text-secondary"></i> 游戏说明 </h2> <ul class="text-light/80 space-y-3"> <li class="flex items-start"> <i class="fa fa-keyboard-o text-primary mt-1 mr-3"></i> <span>使用方向键或WASD控制蛇的移动</span> </li> <li class="flex items-start"> <i class="fa fa-apple text-primary mt-1 mr-3"></i> <span>吃到食物增加分数和蛇的长度</span> </li> <li class="flex items-start"> <i class="fa fa-ban text-primary mt-1 mr-3"></i> <span>撞到墙壁或自己的身体游戏结束</span> </li> <li class="flex items-start"> <i class="fa fa-pause text-primary mt-1 mr-3"></i> <span>游戏暂停时可以调整难度</span> </li> </ul> </div> <div> <h2 class="text-2xl font-bold text-primary mb-3 flex items-center"> <i class="fa fa-bolt mr-3 text-secondary"></i> 游戏难度 </h2> <div class="bg-dark/50 rounded-xl p-4 hover-lift"> <div class="flex items-center justify-between mb-3"> <span class="text-light/80">速度级别:</span> <div class="flex items-center"> <button id="speedDown" class="bg-gray-700 hover:bg-gray-600 text-white p-3 rounded-l-lg transition-all duration-300"> <i class="fa fa-minus"></i> </button> <span id="speedValue" class="bg-dark/80 px-6 py-3 text-lg font-medium">中等</span> <button id="speedUp" class="bg-gray-700 hover:bg-gray-600 text-white p-3 rounded-r-lg transition-all duration-300"> <i class="fa fa-plus"></i> </button> </div> </div> <div class="w-full bg-dark/70 rounded-full h-2.5"> <div id="speedBar" class="bg-gradient-to-r from-green-400 via-yellow-400 to-red-500 h-2.5 rounded-full" style="width: 50%"></div> </div> </div> </div> </div> </main> <footer class="w-full mt-10 text-center text-light/50 text-sm"> <p>© 2025 简约贪吃蛇 | 使用键盘或屏幕按钮控制 | 享受游戏乐趣</p> </footer> </div> <script> // JavaScript 代码 </script> </body> </html>这段代码创建了游戏的整体布局,包括标题、游戏画布、控制按钮、游戏数据显示区、游戏说明和难度调整区等。使用了 Tailwind CSS 类名进行样式设计,使页面具有响应式布局和美观的外观。 2. CSS 样式 通过 Tailwind CSS 和自定义样式,为游戏界面添加了丰富的视觉效果。例如,使用渐变背景、阴影、动画等: <style type="text/tailwindcss"> @layer utilities { .content-auto { content-visibility: auto; } .text-shadow { text-shadow: 0 2px 4px rgba(0,0,0,0.25); } .text-glow { text-shadow: 0 0 10px rgba(76, 175, 80, 0.5); } .game-gradient { background: linear-gradient(135deg, #2C3E50 0%, #1A202C 100%); } .button-pulse { animation: pulse 2s infinite; } @keyframes pulse { 0% { box-shadow: 0 0 0 0 rgba(76, 175, 80, 0.4); } 70% { box-shadow: 0 0 0 10px rgba(76, 175, 80, 0); } 100% { box-shadow: 0 0 0 0 rgba(76, 175, 80, 0); } } .food-pulse { animation: food-pulse 1.5s infinite; } @keyframes food-pulse { 0%, 100% { transform: scale(1); box-shadow: 0 0 10px rgba(255, 152, 0, 0.5); } 50% { transform: scale(1.05); box-shadow: 0 0 15px rgba(255, 152, 0, 0.7); } } .snake-head { border-radius: 4px; } .snake-body { border-radius: 3px; } .glass-effect { background: rgba(255, 255, 255, 0.05); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); } .hover-lift { transition: transform 0.3s ease, box-shadow 0.3s ease; } .hover-lift:hover { transform: translateY(-2px); box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2); } } </style>这些样式规则定义了游戏界面的各种效果,如按钮的脉冲动画、食物的缩放动画、玻璃效果等,增强了游戏的视觉吸引力。 3. JavaScript 逻辑 JavaScript 代码负责游戏的核心逻辑,包括蛇的移动、食物的生成、碰撞检测、游戏状态管理等。以下是部分关键 JavaScript 代码及其解释: 初始化游戏 function initGame() { // 清空蛇和食物 snake = []; food = {}; specialFood = null; // 设置蛇的初始位置和方向 const centerX = Math.floor((canvas.width / 2) / gridSize) * gridSize; const centerY = Math.floor((canvas.height / 2) / gridSize) * gridSize; snake = [ {x: centerX, y: centerY}, {x: centerX - gridSize, y: centerY}, {x: centerX - gridSize * 2, y: centerY} ]; direction = 'right'; nextDirection = 'right'; score = 0; scoreElement.textContent = score; updateSnakeLength(); // 生成第一个食物 generateFood(); // 绘制初始状态 draw(); }initGame 函数用于初始化游戏状态,包括清空蛇和食物数组,设置蛇的初始位置和方向,重置分数,生成第一个食物,并绘制游戏的初始状态。 移动蛇 function moveSnake() { // 更新方向 direction = nextDirection; // 获取蛇头位置 const head = {x: snake[0].x, y: snake[0].y}; // 根据方向移动蛇头 switch (direction) { case 'up': head.y -= gridSize; break; case 'down': head.y += gridSize; break; case 'left': head.x -= gridSize; break; case 'right': head.x += gridSize; break; } // 检查是否吃到普通食物 let ateFood = false; if (head.x === food.x && head.y === food.y) { // 增加分数 score += 10; scoreElement.textContent = score; // 更新最高分 if (score > highScore) { highScore = score; highScoreElement.textContent = highScore; localStorage.setItem('snakeHighScore', highScore); } // 生成新食物 generateFood(); ateFood = true; } // 检查是否吃到特殊食物 if (specialFood && head.x === specialFood.x && head.y === specialFood.y) { // 增加更多分数 score += 50; scoreElement.textContent = score; // 更新最高分 if (score > highScore) { highScore = score; highScoreElement.textContent = highScore; localStorage.setItem('snakeHighScore', highScore); } // 移除特殊食物 specialFood = null; if (specialFoodTimer) { clearTimeout(specialFoodTimer); specialFoodTimer = null; } ateFood = true; } if (!ateFood) { // 如果没吃到食物,移除尾部 snake.pop(); } else { // 吃到食物后更新蛇长度 updateSnakeLength(); } // 检查碰撞 if (checkCollision(head)) { gameOver(); return; } // 添加新头部 snake.unshift(head); // 绘制游戏 draw(); }moveSnake 函数是游戏的核心逻辑之一,它根据当前方向移动蛇头,检查蛇是否吃到食物(普通食物或特殊食物),如果吃到食物则增加分数、更新最高分、生成新食物并更新蛇的长度;如果没吃到食物则移除蛇的尾部。最后检查蛇是否发生碰撞,如果碰撞则游戏结束,否则添加新的蛇头并重新绘制游戏。 检查碰撞 function checkCollision(head) { // 检查是否碰到墙壁 if ( head.x < 0 || head.x >= canvas.width || head.y < 0 || head.y >= canvas.height ) { return true; } // 检查是否碰到自己 for (let i = 1; i < snake.length; i++) { if (head.x === snake[i].x && head.y === snake[i].y) { return true; } } return false; }checkCollision 函数用于检查蛇头是否碰到墙壁或自己的身体,如果碰到则返回 true,表示游戏结束。 三、游戏特色 1. 特殊食物机制 游戏中有 20% 的概率生成特殊食物,特殊食物会在 10 秒后消失。吃到特殊食物可以获得 50 分,比普通食物的 10 分更多,增加了游戏的趣味性和挑战性。 2. 难度调整功能 玩家可以通过点击“+”和“-”按钮来调整游戏速度,速度级别分为“很慢”、“慢”、“中等”、“快”、“很快”。游戏速度的调整会实时更新速度条的显示,并在游戏运行时动态更新游戏循环的间隔时间。 3. 本地存储最高分 游戏使用 localStorage 来保存玩家的最高分,即使关闭浏览器或刷新页面,最高分也不会丢失,激励玩家不断挑战自己的记录。 四、总结 “贪吃蛇”小游戏是一个简单而有趣的项目,它通过 HTML、CSS 和 JavaScript 实现了经典贪吃蛇游戏的核心功能,并添加了一些现代的视觉效果和特色机制。对于初学者来说,这个项目是一个很好的学习示例,可以帮助他们了解 HTML、CSS、JavaScript 的基本用法,以及如何使用 Canvas 元素进行图形绘制和动画实现。同时,项目的代码结构清晰,易于理解和扩展,开发者可以根据自己的需求添加更多的功能和特色,如不同的游戏模式、关卡设计等。
-
趣味web在线小游戏-扫雷💣 图片 扫雷游戏:一个基于 HTML、CSS 和 JavaScript 的网页小游戏 引言 扫雷游戏作为一款经典的单机游戏,以其简单易上手却又充满挑战的玩法深受玩家喜爱。今天要介绍的扫雷游戏是一个基于 HTML、CSS 和 JavaScript 构建的网页小游戏,它不仅保留了传统扫雷游戏的核心玩法,还添加了一些新的特性和交互效果,让玩家有更好的游戏体验。 {iframe src="https://code.juejin.cn/pen/7524327272602402816" height="90vh"/} 项目概述 这个扫雷游戏项目使用了 Tailwind CSS 进行样式设计,利用 Font Awesome 图标库添加了一些美观的图标。游戏界面简洁美观,响应式设计使得游戏在不同设备上都能有良好的显示效果。 主要特性 多种难度选择:提供初级、中级和高级三种难度,满足不同水平玩家的需求。玩家可以根据自己的喜好随时切换难度。 主题切换:支持黑暗模式和明亮模式的切换,让玩家可以根据自己的环境和喜好调整界面风格。 游戏统计:记录游戏次数、胜率和最佳时间,激励玩家不断挑战自我,提高游戏成绩。 动画效果:在游戏过程中添加了许多动画效果,如点击单元格、标记地雷、游戏结束等,增强了游戏的趣味性和交互性。 代码结构 HTML 部分 HTML 文件定义了游戏的整体结构,包括游戏标题、状态栏、难度选择、游戏区域、游戏统计和帮助模态框等。使用了 Tailwind CSS 的类名来快速构建界面,同时引入了 Font Awesome 图标库来显示图标。 CSS 部分 通过 Tailwind CSS 的配置文件,自定义了一些颜色、字体和阴影效果。同时,使用自定义工具类来控制单元格的大小、游戏容器的宽度等。 JavaScript 部分 JavaScript 代码实现了游戏的核心逻辑,包括游戏初始化、棋盘创建、地雷生成、单元格点击处理、游戏结束判断等。 主要函数 initGame():初始化游戏状态,重置计时器和统计信息,创建游戏板。 createBoard():根据游戏配置创建游戏板,为每个单元格添加点击事件。 handleCellClick():处理单元格的左键点击事件,第一次点击时生成地雷,揭示单元格,检查游戏是否结束。 handleRightClick():处理单元格的右键点击事件,标记或取消标记地雷,检查游戏是否结束。 generateMines():随机生成地雷,确保第一次点击的周围没有地雷。 calculateNeighbors():计算每个单元格周围的地雷数量。 revealCell():揭示单元格,如果周围没有地雷,则递归揭示周围的单元格。 gameOver():处理游戏结束的逻辑,更新游戏状态图标和统计信息。 交互体验 游戏的交互体验非常好,通过鼠标点击和右键点击来操作,同时支持键盘快捷键。按下空格键可以重置游戏,按下 H 键可以打开帮助模态框。 小结 这个扫雷游戏用 HTML、CSS 和 JavaScript 构建,以 Tailwind CSS 设计样式,借助 Font Awesome 图标库增添美观度。
-
Umami–免费网站统计源码 图片 Umami–免费自部署网站统计源码 Umami相关网站 - 官网:https://umami.is/ demo预览:https://eu.umami.is/share/LGazGOecbDtaIwDr/umami.is GitHub:https://github.com/umami-software/umami 安装文档:https://umami.is/docs 在当今数字化时代,网站数据对于运营者来说至关重要。它能帮助我们了解用户行为、优化网站性能、提升用户体验。而Umami这款免费自部署的网站统计源码,正为我们提供了一个高效、安全且灵活的解决方案。 图片 核心优势:免费与自部署的双重加持 Umami最显著的标签是免费开源与完全自部署。作为开源项目,它的代码完全公开透明,任何人都能查看、修改和二次开发,无需担心隐藏收费陷阱。而自部署特性则彻底打破了第三方统计工具的数据垄断——你可以将统计系统部署在自己的服务器上,数据从收集到存储全程由自己掌控。这对于处理敏感用户信息的企业、注重隐私保护的个人站长,或是有合规性要求的组织来说,是不可替代的优势。 图片 技术栈与部署:轻量化且适配性强 Umami基于Node.js和React开发,后端依赖PostgreSQL或MySQL数据库,整体架构轻量高效。其部署方式灵活多样,满足不同用户的技术环境: Docker部署:通过官方提供的Docker镜像,只需几条命令就能快速启动服务,适合新手用户。 VPS/云服务器部署:支持在AWS、阿里云、腾讯云等主流云平台,或自建VPS上手动安装,需具备基础的Linux命令操作能力。 静态部署扩展:配合Vercel、Netlify等平台,还能实现前端静态资源的快速分发,进一步降低服务器负载。 部署完成后,仅需在网站页面中嵌入一行简单的JavaScript代码,即可开始数据收集,整个过程无需复杂的技术配置。 图片 功能细节:简洁却不失深度 Umami的界面设计遵循“极简主义”,但功能覆盖了网站统计的核心需求,且数据呈现直观易懂: 核心数据看板:实时展示访问量(Visits)、独立访客(Unique Visitors)、页面浏览量(Pageviews)、平均访问时长等关键指标,支持按日、周、月、年筛选时间维度。 用户行为追踪:记录用户的来源渠道(搜索引擎、社交媒体、直接访问等)、使用的设备类型(手机、电脑、平板)、操作系统及浏览器版本,甚至能追踪用户在网站内的跳转路径。 页面性能分析:通过加载时间数据,帮助识别加载缓慢的页面,为优化网站性能提供依据。 多站点管理:一个Umami后台可同时监控多个网站,适合管理多域名或多项目的运营者,数据按站点分类清晰,便于对比分析。 所有数据均以图表(折线图、饼图、列表)形式呈现,无需专业数据分析知识也能快速理解。 图片 隐私与性能:兼顾合规与体验 隐私保护:Umami默认不收集用户IP地址(仅记录地理位置的大致区域),也不使用Cookie追踪,完全符合GDPR、CCPA等全球主流隐私法规,无需在网站添加烦人的Cookie同意弹窗。 性能友好:嵌入的跟踪代码体积仅几KB,加载速度极快,不会拖慢网站打开速度,相比Google Analytics等工具,对页面性能的影响几乎可以忽略不计。 图片 扩展性:满足个性化需求 作为开源项目,Umami支持通过代码定制实现功能扩展: 开发者可通过API接口将数据导出至Excel、CSV,或与BI工具(如Power BI、Tableau)对接,进行深度分析。 社区贡献了丰富的插件,如自定义事件追踪(可统计按钮点击、表单提交等交互行为)、多语言支持、数据备份自动化等,进一步提升工具的实用性。 与主流工具的对比 相比Google Analytics的复杂功能和数据隐私争议,Umami更轻量、更注重隐私;相比百度统计等国内工具的广告推送和数据共享,Umami完全去商业化;而与Matomo等同类开源工具相比,Umami的部署门槛更低,对服务器资源的占用更少。 如果你需要一个“够用、安全、可控”的网站统计工具,Umami无疑是性价比极高的选择。无论是个人博客、企业官网还是电商平台,都能通过它快速掌握网站运营动态,让数据驱动决策更简单。
-
彩虹屁猫猫Loading动画 图片 在网页设计的世界里,Loading 动画起着至关重要的作用。它不仅能够在页面加载时为用户提供反馈,减少等待的焦虑感,还能为网站增添独特的视觉魅力。代码演示 {iframe src="https://code.juejin.cn/pen/7523837884047048719" height="50vh"/} HTML 结构 HTML 部分负责搭建动画的基本结构,代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>彩虹屁猫猫 Loading 动画</title> <style> /* 这里是 CSS 样式代码 */ </style> </head> <body> <div id="animation-container"> <svg class="animation-rainbow-cat" viewbox="0 0 70 20"> <defs> <linearGradient id="rainbow-colors" x1="0.5" x2="0.5" y2="1"> <stop class="rainbow-color1" offset="0" /> <stop class="rainbow-color1" offset="0.167" /> <stop class="rainbow-color2" offset="0.167" /> <stop class="rainbow-color2" offset="0.335" /> <stop class="rainbow-color3" offset="0.335" /> <stop class="rainbow-color3" offset="0.5" /> <stop class="rainbow-color4" offset="0.5" /> <stop class="rainbow-color4" offset="0.669" /> <stop class="rainbow-color5" offset="0.669" /> <stop class="rainbow-color5" offset="0.833" /> <stop class="rainbow-color6" offset="0.833" /> <stop class="rainbow-color6" offset="1" /> </linearGradient> </defs> <g class="rainbow-cat"> <g class="rainbow"> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> </g> <g class="cat"> <g class="cat-tail" transform="translate(40, 5.5)"> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> </g> <g class="cat-legs" transform="translate(43, 5.5)"> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> </g> <g class="cat-bread" transform="translate(43, 5.5)"> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> </g> <g class="cat-head" transform="translate(43, 5.5)"> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> <rect /> </g> </g> </g> </svg> </div> </body> </html>在这个 HTML 代码中,可以看到以下几个关键部分: <svg> 元素:SVG(Scalable Vector Graphics)是一种用于描述二维矢量图形的 XML 标记语言。在这里,我们使用 <svg> 元素来创建动画的画布,并通过 viewbox 属性设置画布的可视区域。 <linearGradient> 元素:用于创建线性渐变,这里定义了彩虹的颜色渐变效果。 <g> 元素:用于将多个图形元素组合在一起,方便对它们进行统一的操作和样式设置。在这个动画中,我们使用 <g> 元素将彩虹、猫猫的尾巴、腿、面包和头部等部分分别组合起来。 CSS 样式和动画效果 CSS 部分负责为动画添加样式和实现动画效果,代码如下: body { background-color: black; height: 100vh; display: flex; justify-content: center; align-items: center; } svg { mask-image: linear-gradient(to left, #000000 70%, #ffffff00 84%); -webkit-mask-image: linear-gradient( to left, #000000 70%, #ffffff00 84% ); width: 400px; } /* 彩虹部分样式和动画 */ .animation-rainbow-cat .rainbow-color1 { stop-color: #fc0101; } .animation-rainbow-cat .rainbow-color2 { stop-color: #fe9900; } /* 其他彩虹颜色样式... */ .animation-rainbow-cat .rainbow-cat .rainbow rect { width: 5px; stroke: transparent; fill: url(#rainbow-colors); } .animation-rainbow-cat .rainbow-cat .rainbow rect:nth-of-type(1) { height: 7px; transform: translate(40px, 6px); animation: rainbow-boost-1 0.2s linear 0.2s infinite alternate; } @keyframes rainbow-boost-1 { to { transform: translate(40px, 7px); } } /* 其他彩虹矩形的动画... */ /* 猫猫各部分样式和动画 */ /* 猫猫面包部分 */ .animation-rainbow-cat .rainbow-cat .cat .cat-bread rect:nth-of-type(1) { width: 9px; height: 9px; fill: black; transform: translate(1px, 0px); } /* 其他猫猫面包矩形样式... */ /* 猫猫尾巴部分 */ .animation-rainbow-cat .rainbow-cat .cat .cat-tail rect:nth-of-type(1) { width: 0.5px; height: 1.5px; fill: black; transform: translate(2.5px, 5.5px); } /* 其他猫猫尾巴矩形样式和动画... */ /* 猫猫头部部分 */ .animation-rainbow-cat .rainbow-cat .cat .cat-head rect:nth-of-type(1) { width: 8px; height: 2.5px; fill: black; transform: translate(5px, 5px); } /* 其他猫猫头部矩形样式和动画... */ /* 猫猫腿部部分 */ .animation-rainbow-cat .rainbow-cat .cat .cat-legs rect:nth-of-type(1) { width: 2px; height: 1.5px; fill: black; transform: translate(0px, 7.5px); } /* 其他猫猫腿部矩形样式和动画... */ /* 整个猫猫的动画 */ .animation-rainbow-cat .rainbow-cat .cat { animation: cat-move 0.35s linear 0.2s infinite; } @keyframes cat-move { 50% { transform: translate(0px, 0px); } 50% { transform: translate(0.3px, -0.5px); } 100% { transform: translate(1px, 0px); } } .animation-rainbow-cat .rainbow-cat .cat .cat-head { animation: cat-head-move 0.35s cubic-bezier(0.95, -0.11, 0.56, 0.67) 0.2s infinite; } @keyframes cat-head-move { 0% { transform: translate(43.5px, 5px); } 50% { transform: translate(44px, 5.5px); } 100% { transform: translate(43px, 5.5px); } } /* 其他部分的动画... */在 CSS 代码中,可以看到以下几个重要的方面: 背景和布局:通过 body 元素的样式设置,将背景颜色设置为黑色,并使用 flexbox 布局将动画容器居中显示。 SVG 遮罩效果:使用 mask-image 和 -webkit-mask-image 属性为 SVG 元素添加遮罩效果,使动画看起来更加生动。 颜色设置:通过 stop-color 属性为彩虹的每个颜色段设置不同的颜色。 动画效果:使用 @keyframes 规则定义各种动画,如彩虹的上下移动、猫猫的整体移动、头部的摆动、腿部的运动等。通过 animation 属性将这些动画应用到相应的元素上。
-
3D电子数字时钟项目分享 图片 HTML与CSS打造的3D数字时钟 在网页开发的世界里,HTML 和 CSS 是构建网页基础与样式的强大工具。今天,我们要深入剖析一个由 HTML 和 CSS 实现的极具创意的项目,它包含了 3D 数字和方块动画效果,为网页增添了独特的视觉魅力。 代码演示 {iframe src="https://code.juejin.cn/pen/7523518587215020041" height="50vh"/} 项目概述 这个项目主要由一个包含多个数字容器和一个表面容器组成,表面容器内有众多方块元素。通过精心设计的 CSS 样式和动画,实现了 3D 效果和动态展示。整体项目的代码包含在 runoob - test.html 文件中,它充分展示了 HTML 和 CSS 在创建复杂视觉效果方面的能力。 HTML 结构分析 数字容器 <div class="container"> <div class="digit"></div> <div class="digit"></div> <div class="digit"></div> <div class="digit"></div> <div class="digit"></div> <div class="digit"></div>container 类的 div 元素是整个项目的容器,它采用绝对定位并居中显示。内部的多个 digit 类的 div 元素可能用于后续展示数字效果,不过目前代码中未对其进行详细的样式和内容设置。 表面容器与方块元素 <div class="surface"> <!-- 众多的方块元素,如 b1 - b94 --> <div class="block b1"> <div class="block-outer"> <div class="block-inner"> <div class="bottom"></div> <div class="front"></div> <div class="left"></div> <div class="right"></div> </div> </div> </div> <!-- 其他方块元素... --> </div>surface 类的 div 元素用于承载众多的方块元素。每个方块元素由 block 类的 div 包裹,内部又分为 block-outer 和 block-inner 两层。block-inner 包含了 bottom、front、left 和 right 四个面,用于构建 3D 方块的外观。 CSS 样式与动画效果 全局样式 * { box-sizing: border-box; margin: 0; padding: 0; } body { background: radial-gradient(circle at center, transparent, #000 95%), linear-gradient(#444 2px, transparent 0) 0 0/20px 20px, linear-gradient(90deg, #444 2px, #000 0) 0 0/20px 20px; height: 100vh; margin: 0; overflow: hidden; }全局样式设置了所有元素的盒模型为 border-box,并为 body 元素设置了独特的背景,包括径向渐变和线性渐变,营造出一种网格状的黑暗背景效果。同时,将 body 的高度设置为视口高度,并隐藏溢出部分。 3D 效果与容器样式 .container, .surface, .block, .block-outer, .block-inner { transform-style: preserve-3d; } .container { animation: bounce 2s cubic-bezier(0.4, 0.1, 0.6, 0.9) infinite; display: flex; margin: auto; overflow: hidden; top: 0; right: 0; bottom: 0; left: 0; width: 594px; height: 200px; perspective: 800px; }通过 transform-style: preserve-3d 属性,确保容器和内部元素能够正确呈现 3D 效果。container 元素使用了 bounce 动画,实现了上下弹跳的效果。同时,通过 perspective 属性设置了透视效果,增强了 3D 视觉感受。 表面容器样式 .surface { animation: tilt 2s -1.5s cubic-bezier(0.4, 0.1, 0.6, 0.9) infinite; display: block; width: 540px; height: 20px; margin: auto; transform: translateY(50px) rotateX(105deg) rotateZ(0deg); will-change: transform; }surface 元素使用了 tilt 动画,使其产生倾斜的动态效果。通过 transform 属性对其进行位置和角度的调整,让表面呈现出特定的 3D 姿态。 方块样式 .block-inner div { background-color: #74d447; } .block-inner > div { display: flex; flex-wrap: wrap; align-content: flex-start; position: absolute; width: 20px; height: 20px; }方块的内部元素使用绿色背景色,通过 position: absolute 进行绝对定位,并使用 flexbox 布局进行内部元素的排列。 动画效果 @keyframes bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-50px); } } @keyframes tilt { 0%, 100% { transform: translateY(50px) rotateX(105deg) rotateZ(0deg); } 50% { transform: translateY(50px) rotateX(105deg) rotateZ(10deg); } }bounce 动画使 container 元素在垂直方向上上下弹跳,tilt 动画使 surface 元素在一定角度内倾斜,为整个项目增添了生动的动态效果。
-
分享一下评论头像呼吸灯CSS 图片 这段代码我也是网上找的,方便记录,也为了分享所以解刨记录一下简单介绍 目标元素选择器 这段代码的开头部分,通过 CSS 选择器精准锁定了三类图像元素img.avatar-img.avatar-lg选择同时拥有avatar-img和avatar-lg两个类名的<img>元素。这种组合选择器能够精确匹配特定场景下的图像,比如网站用户头像中特定尺寸和样式的大头像。 img.avatar.lazyloaded针对同时具有avatar和lazyloaded类的图像。lazyloaded类通常用于实现图片的懒加载功能,该选择器确保懒加载完成后的头像元素也能应用相应样式。 img.avatar只要图像元素拥有avatar类,都会被选中。这是一个更宽泛的选择,作为前两个选择器的补充,覆盖了所有带有avatar类的图像。 通过这种细致的选择器组合,开发者可以灵活地控制不同条件下的图像样式,避免样式的误应用,提升代码的可控性和维护性。 基础样式设定 animation light 4s ease-in-out infinite这行代码应用了名为light的动画,动画时长为 4 秒,以ease-in-out的缓动函数运行,并且会无限循环播放。通过这个动画,图像将产生不断变化的发光效果。 transition0.5s设置了 0.5 秒的过渡效果。这意味着当图像的样式发生改变时(比如后续的悬停状态),样式变化不会瞬间完成,而是会在 0.5 秒内平滑过渡,让用户的视觉体验更加流畅自然。 悬停效果 接下来的代码块定义了图像在悬停状态下的样式变化: img.avatar-img.avatar-lg:hover, img.avatar.lazyloaded:hover, img.avatar:hover { transform: scale(1.15) rotate(720deg); /* 悬停时放大15%并旋转两周(720度) */ }hover伪类是 CSS 中用于检测鼠标指针是否悬停在元素上的重要特性。当用户将鼠标悬停在之前选中的图像上时,transform属性发挥作用,使图像放大 15% 并旋转 720 度(即两周)。结合之前设置的过渡效果,这个变化过程会显得非常平滑,给用户带来惊喜的交互体验,增强用户与网页之间的互动感。 动画关键帧 最后,@keyframes规则定义了名为light的动画关键帧,这是实现图像发光效果的核心部分: @keyframes light { 0% { box-shadow: 0 0 4px #f00; } /* 起始状态:红色小光晕 */ 25% { box-shadow: 0 0 16px #0f0; } /* 25%进度:绿色大光晕 */ 50% { box-shadow: 0 0 4px #00f; } /* 50%进度:蓝色小光晕 */ 75% { box-shadow: 0 0 16px #0f0; } /* 75%进度:绿色大光晕 */ 100% { box-shadow: 0 0 4px #f00; } /* 结束状态:回到红色小光晕 */ }@keyframes规则允许开发者定义动画在不同阶段的样式变化。在light动画中: 动画开始(0%)时,图像周围产生一个红色的小光晕(box-shadow: 0 0 4px #f00;)。 当动画进行到 25% 时,光晕变为绿色且尺寸变大(box-shadow: 0 0 16px #0f0;)。 50% 时,光晕切换为蓝色小光晕。 75% 时,再次出现绿色大光晕。 动画结束(100%)时,回到初始的红色小光晕状态。由于设置了infinite无限循环,这个过程会一直持续,使图像始终散发着光晕。 完整代码展示 /* 目标元素选择器组:指定样式仅应用于以下三类图像元素 */ img.avatar-img.avatar-lg, /* 同时拥有avatar-img和avatar-lg类的图像 */ img.avatar.lazyloaded, /* 同时拥有avatar和lazyloaded类的图像 */ img.avatar { /* 拥有avatar类的图像 */ /* 使图像呈现圆形效果 */ animation: light 4s ease-in-out infinite; /* 应用4秒循环的发光动画 */ transition: 0.5s; /* 设置0.5秒的过渡效果,用于平滑响应悬停动作 */ } /* 目标元素的悬停状态样式 */ img.avatar-img.avatar-lg:hover, img.avatar.lazyloaded:hover, img.avatar:hover { transform: scale(1.15) rotate(720deg); /* 悬停时放大15%并旋转两周(720度) */ } /** * 发光动画定义 * 实现图像周围的光晕效果,在红、绿、蓝之间循环变化 */ @keyframes light { 0% { box-shadow: 0 0 4px #f00; } /* 起始状态:红色小光晕 */ 25% { box-shadow: 0 0 16px #0f0; } /* 25%进度:绿色大光晕 */ 50% { box-shadow: 0 0 4px #00f; } /* 50%进度:蓝色小光晕 */ 75% { box-shadow: 0 0 16px #0f0; } /* 75%进度:绿色大光晕 */ 100% { box-shadow: 0 0 4px #f00; } /* 结束状态:回到红色小光晕 */ }
-
《豺狼的日子》:杀手世界中的人性挣扎与现实映射 图片 第一次看《豺狼的日子》时,就像被拽进了一个充满迷雾的迷宫。镜头下的故事,没有简单的正邪对立,而是把人性的复杂、社会的荒诞,一股脑儿摊开在观众面前,越琢磨越觉得后劲十足。 图片 双重身份下的人性撕 主角 “豺狼” 这个人物,仿佛是由两个极端拼凑而成。西装革履穿梭在欧洲街巷时,他是令人闻风丧胆的职业杀手,眼神冰冷得像淬了毒,每一次行动都精准到令人窒息。可当他回到家,抱起孩子、为妻子整理头发的瞬间,又成了最普通的丈夫与父亲。这两种身份在他身上碰撞、撕扯,把一个人的灵魂搅得支离破碎。杀手的冷酷与丈夫的温情,让人忍不住想,当黑暗与光明同时撕裂一个人,他究竟该如何自处? 图片 社会规则下的无奈反抗 豺狼的杀手生涯,乍一看是游走在法律边缘的疯狂,细品却满是无奈。他接任务、改武器、变换身份,像极了在职场拼命挣扎的我们。为了完成 “绩效” 熬夜加班,为了升职拼命考证,不过他的 “绩效” 是致命任务,“考证” 是改装武器。这种荒诞的相似,让人不寒而栗。 最让人共情的,是他遭遇 “甲方赖账” 的情节。好不容易完成任务,却被拖欠报酬,这不就是现实里打工人被拖欠工资的翻版?他愤怒地展开复仇,与其说是为了钱,不如说是对这个不讲规则的世界发出的呐喊。在庞大的社会机器面前,个体的反抗或许微不足道,但正是这种明知不可为而为之的挣扎,让我们看到了人性里最倔强的光芒。 图片 现实生活的荒诞镜像 这部剧的细节,简直像一面哈哈镜,把现实的荒诞扭曲得淋漓尽致。豺狼武器库里那把刻着 “Made in NATO” 的狙击枪,看似不经意的一笔,却撕开了军事利益集团的遮羞布。现实中,多少战争与冲突背后,藏着权力与金钱的肮脏交易?一把武器,无声地控诉着世界的残酷真相。 军情六处特工 Bianca 的办公桌,更是绝妙的讽刺。《高效能人士的七个习惯》旁边,摆着线人的死亡报告,这种反差荒诞得可笑。我们总在追求效率与成功,却常常在这个过程中丢掉了底线与人性。就像剧中人,一边读着心灵鸡汤,一边干着违背良知的事,这何尝不是现代社会的真实写照? 还有豺狼的家庭,看似温馨的表象下,全靠谎言支撑。当妻子发现真相,他的恐惧、挣扎,又有多少人能说自己从未经历过?在快节奏的现代生活里,我们戴着各种面具生活,用谎言维持着脆弱的人际关系,就像在钢丝上跳舞,生怕一个不小心就摔得粉身碎骨。 看完《豺狼的日子》,心里久久不能平静。它不只是一部关于杀手的电影,更像是一面镜子,照出了我们每个人的影子。在黑暗与光明交织的人性迷宫里,在规则与反抗的矛盾中,在真实与谎言的夹缝里,我们都在寻找属于自己的答案。这部剧没有给我们标准答案,却逼着我们直面内心的困惑与挣扎,或许,这就是它最迷人的地方。
-
朝生暮死里的惊鸿【蜉蝣】 图片 朝生暮死里的惊鸿【蜉蝣】 我是在溪水边的鹅卵石下醒来的。 那是种很奇特的感觉,像被无数根蛛丝轻轻托起,又像是被温热的泉水温柔地包裹着。意识刚一清醒,身体就开始不受控制地扭动。我感受到包裹着我的半透明外壳正在碎裂,细小的裂纹从腹部向背部蔓延,发出细微的 “咔咔” 声,仿佛是谁在小心翼翼地拆开一封古老的信件。 终于,在挣脱最后一丝束缚的瞬间,我看到了这个崭新的世界。阳光穿过水面,在溪底的鹅卵石上投下斑驳的光影,像撒了一地的碎金。水草在水流中轻轻摇曳,像是在跳一支欢迎的舞蹈。我试着挥动翅膀,却发现它们还很柔软,像两片沾了露水的薄纱,根本无法支撑我飞起来。 我顺着水流漂向岸边,在湿润的泥土上爬行。这是我第一次用自己的眼睛看这个世界,每一处都充满了新奇。我看到蚂蚁排着整齐的队伍搬运食物,它们的脚步匆忙而坚定;看到蜻蜓掠过水面,翅膀在阳光下闪烁着蓝紫色的光芒;看到岸边的蒲公英在微风中轻轻摇晃,绒毛上还挂着晶莹的露珠。 不知过了多久,我的翅膀渐渐变得坚硬起来。我试着振动翅膀,一次,两次,第三次,终于,我离开了地面,跌跌撞撞地飞了起来。风从耳边呼啸而过,带来泥土、青草和花朵的香气。我在空中盘旋,看到了更广阔的世界 —— 远处连绵起伏的山峦,山脚下蜿蜒流淌的溪流,还有溪边大片大片盛开的野花。 然而,我能感受到生命的沙漏正在飞速流逝。我的身体里有个声音在不停地催促着我,告诉我时间不多了。我开始寻找同伴,在花丛间,在溪流上方,我看到了许多和我一样的身影。我们默契地聚集在一起,在空中跳起了一支庞大的舞蹈。翅膀振动的声音交织在一起,像一首激昂的生命赞歌。 阳光为我们镀上一层金色的光辉,我们在光影中穿梭,时而上升,时而下降,时而旋转,时而俯冲。每一个动作都充满了力量与美感,仿佛要把这短暂的生命绽放成最耀眼的光芒。我看到周围的花朵在为我们绽放,听到溪流在为我们歌唱,连风都放慢了脚步,静静地欣赏着这场生命的盛宴。 随着夕阳渐渐西沉,我的力气也在一点点耗尽。我能感觉到翅膀越来越沉重,每一次振动都需要付出巨大的努力。但我不愿停下,我想在生命的最后时刻,将自己最美的姿态展现给这个世界。 终于,我的翅膀再也无法支撑我的身体,我缓缓地向地面坠落。在坠落的过程中,我看到天空被染成了绚丽的红色,像一幅绝美的画卷。我落在一朵盛开的野花上,感受着花瓣的柔软和温度。我用尽最后的力气,将身体蜷缩成一个小小的球,静静地等待着生命的终结。 在黑暗降临的那一刻,我突然明白了,虽然我的生命短暂,短到只有一天,但这一天,我看到了这个世界的美丽,感受到了生命的美好,也绽放出了属于自己的光芒。朝生暮死又如何?只要在这短暂的时光里,尽情地拥抱过生命,哪怕只有一瞬,亦可惊鸿。