<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>16个不重复随机颜色</title><style>* {margin: 0;padding: 0;box-sizing: border-box;font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;}body {background: linear-gradient(135deg, #1a2a6c, #b21f1f, #fdbb2d);color: #fff;min-height: 100vh;padding: 20px;display: flex;flex-direction: column;align-items: center;}.container {max-width: 1200px;width: 100%;text-align: center;}h1 {margin: 20px 0;font-size: 2.8rem;text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);}.description {margin-bottom: 30px;font-size: 1.2rem;max-width: 800px;line-height: 1.6;}.colors-container {display: grid;grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));gap: 20px;width: 100%;margin-bottom: 40px;}.color-box {height: 150px;border-radius: 10px;display: flex;flex-direction: column;justify-content: center;align-items: center;box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3);transition: transform 0.3s ease, box-shadow 0.3s ease;overflow: hidden;cursor: pointer;}.color-box:hover {transform: translateY(-5px);box-shadow: 0 12px 20px rgba(0, 0, 0, 0.4);}.color-value {background-color: rgba(0, 0, 0, 0.5);padding: 8px 15px;border-radius: 20px;font-weight: bold;margin-top: 10px;backdrop-filter: blur(5px);}.controls {margin: 20px 0;display: flex;flex-wrap: wrap;gap: 15px;justify-content: center;align-items: center;}button {padding: 12px 25px;background: #2c3e50;color: white;border: none;border-radius: 30px;cursor: pointer;font-size: 1rem;font-weight: bold;transition: all 0.3s ease;box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);}button:hover {background: #3498db;transform: translateY(-3px);box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);}.excluded-colors {margin-top: 30px;background: rgba(0, 0, 0, 0.2);padding: 20px;border-radius: 15px;max-width: 800px;}.excluded-colors h2 {margin-bottom: 15px;}.excluded-list {display: flex;flex-wrap: wrap;gap: 10px;justify-content: center;}.excluded-color {width: 50px;height: 50px;border-radius: 8px;display: flex;justify-content: center;align-items: center;font-size: 0.8rem;font-weight: bold;box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);}.notification {position: fixed;top: 20px;left: 50%;transform: translateX(-50%);background: rgba(0, 0, 0, 0.8);color: white;padding: 15px 25px;border-radius: 30px;z-index: 1000;opacity: 0;transition: opacity 0.3s ease;}.show {opacity: 1;}@media (max-width: 768px) {.colors-container {grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));}h1 {font-size: 2rem;}}</style>
</head>
<body><div class="container"><h1>16个不重复随机颜色生成器</h1><p class="description">点击下方按钮生成16个独特的随机颜色,已排除您提供的颜色。点击颜色框可以复制色值到剪贴板。</p><div class="controls"><button id="generate-btn">生成新颜色</button><button id="copy-all-btn">复制所有色值</button></div><div class="colors-container" id="colors-container"><!-- 颜色框将通过JavaScript动态生成 --></div><div class="excluded-colors"><h2>已排除的颜色</h2><div class="excluded-list"><div class="excluded-color" style="background-color: #FFEA3B;">#FFEA3B</div><div class="excluded-color" style="background-color: #1569FF;">#1569FF</div><div class="excluded-color" style="background-color: #6462CC;">#6462CC</div><div class="excluded-color" style="background-color: #23B3FF;">#23B3FF</div><div class="excluded-color" style="background-color: #14FFF1;">#14FFF1</div><div class="excluded-color" style="background-color: #01B064;">#01B064</div></div></div></div><div class="notification" id="notification">颜色已复制到剪贴板</div><script>document.addEventListener('DOMContentLoaded', function() {const colorsContainer = document.getElementById('colors-container');const generateBtn = document.getElementById('generate-btn');const copyAllBtn = document.getElementById('copy-all-btn');const notification = document.getElementById('notification');// 需要排除的颜色列表const excludedColors = ['#FFEA3B', '#1569FF', '#6462CC', '#23B3FF', '#14FFF1', '#01B064'];// 生成随机颜色function generateRandomColor() {const letters = '0123456789ABCDEF';let color = '#';for (let i = 0; i < 6; i++) {color += letters[Math.floor(Math.random() * 16)];}return color;}// 生成16个不重复且不在排除列表中的颜色function generateUniqueColors() {const colors = new Set();while (colors.size < 16) {const color = generateRandomColor();if (!excludedColors.includes(color.toUpperCase()) && !colors.has(color)) {colors.add(color);}}return Array.from(colors);}// 显示颜色function displayColors() {colorsContainer.innerHTML = '';const colors = generateUniqueColors();colors.forEach(color => {const colorBox = document.createElement('div');colorBox.className = 'color-box';colorBox.style.backgroundColor = color;const colorValue = document.createElement('div');colorValue.className = 'color-value';colorValue.textContent = color;colorBox.appendChild(colorValue);colorsContainer.appendChild(colorBox);// 添加点击复制功能colorBox.addEventListener('click', () => {copyToClipboard(color);showNotification(`已复制: ${color}`);});});}// 复制到剪贴板function copyToClipboard(text) {const textarea = document.createElement('textarea');textarea.value = text;document.body.appendChild(textarea);textarea.select();document.execCommand('copy');document.body.removeChild(textarea);}// 显示通知function showNotification(message) {notification.textContent = message;notification.classList.add('show');setTimeout(() => {notification.classList.remove('show');}, 2000);}// 复制所有颜色function copyAllColors() {const colorBoxes = document.querySelectorAll('.color-value');const allColors = Array.from(colorBoxes).map(box => box.textContent).join('\n');copyToClipboard(allColors);showNotification('所有颜色值已复制到剪贴板');}// 初始化displayColors();// 事件监听generateBtn.addEventListener('click', displayColors);copyAllBtn.addEventListener('click', copyAllColors);});</script>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96654.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96654.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/96654.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis 缓存穿透、击穿、雪崩:防御与解决方案大全

&#x1f6e1;️ Redis 缓存穿透、击穿、雪崩&#xff1a;防御与解决方案大全 文章目录&#x1f6e1;️ Redis 缓存穿透、击穿、雪崩&#xff1a;防御与解决方案大全&#x1f9e0; 一、缓存穿透&#xff1a;防御不存在数据的攻击&#x1f4a1; 问题本质与危害&#x1f6e1;️ 解…

量子计算机的发展对传统密码学的打击

量子计算机的发展对传统密码学的核心威胁&#xff0c;源于其能高效解决传统计算机“计算不可行”的数学问题——而这些问题正是当前主流密码算法保障安全的基石。这种影响并非“全面摧毁”&#xff0c;而是针对传统密码学的不同分支&#xff08;非对称密码、对称密码、哈希函数…

《var, let, const:现代JS声明指南》

文章目录JavaScript 中 var、let、const 的差异1. 作用域&#xff08;Scope&#xff09;2. 变量提升&#xff08;Hoisting&#xff09;3. 重复声明4. 变量值是否可变对比表5. 示例代码总结JavaScript 中 var、let、const 的差异 1. 作用域&#xff08;Scope&#xff09; var 函…

在 Docker 中安装 MySQL 教程

拉取 MySQL 镜像docker pull mysql:8.0创建并启动 MySQL 容器docker run -d \--name mysql8 \-p 3306:3306 \-e MYSQL_ROOT_PASSWORD123456 \-v mysql_data:/var/lib/mysql \mysql:8.0命令说明&#xff1a;-d&#xff1a;后台运行容器 --name mysql8&#xff1a;给容器起个名字…

C#线程理解

目录 一.线程类 1.基础线程类&#xff08;Thread&#xff09; 2.线程池类&#xff08;Threadpool&#xff09; 3.任务并行库&#xff08;Task&#xff09; 4.并行循环&#xff08;Parallel&#xff09; 二.线程池(threadPool)和Thread/Task之间的联系 1.ThreadPool和Thr…

Java入门级教程16——JUC的安全并发包机制

目录 1.JUC的安全并发包机制 1.1 包含 1.2 Barrier(栅栏)机制——CyclicBarrier&#xff08;循环屏障&#xff09; 1.2.1 定义 1.2.2 特性 1.2.1 模拟包车 1.2.2 模拟学生到齐上课 1.2.3 计算任务总耗时 1.3 CountDownLatch(闭锁)机制 1.3.1 定义 1.3.2 特性 1.3.3…

【网络通信】全面解析MAC地址:网络设备的唯一标识

【网络通信】全面解析MAC地址&#xff1a;网络设备的唯一标识 文章目录【网络通信】全面解析MAC地址&#xff1a;网络设备的唯一标识前言一、MAC 地址的定义&#xff1a;设备的 “网络身份证”​二、MAC 地址的格式与组成&#xff1a;48 位的 “数字编码”​三、MAC 地址的工作…

Perforce Klocwork 2025.2版本更新:默认启用现代分析引擎、支持 MISRA C:2025 新规、CI构建性能提升等

Perforce Klocwork 现已更新至2025.2版本&#xff01;该版本增强了对 C/C的分析能力&#xff0c;提升了现代 C 分析的准确性&#xff0c;并改进了对源文件编码的支持。该版本还为 MISRA C:2025 标准引入了新的分类体系&#xff0c;并增强了 Visual Studio Code 插件的可用性。 …

机器人驭风而行:低空经济如何开启智能新纪元【科普类】

新晋码农一枚&#xff0c;小编会定期整理一些写的比较好的代码和知识点&#xff0c;作为自己的学习笔记&#xff0c;试着做一下批注和补充&#xff0c;转载或者参考他人文献会标明出处&#xff0c;非商用&#xff0c;如有侵权会删改&#xff01;欢迎大家斧正和讨论&#xff01;…

Java学习笔记四(继承)

1 继承继承的实现&#xff1a;public class 子类 extends 父类 {… }注释&#xff1a;子类可直接使用&#xff0c;父类&#xff08;保护&#xff0c;公开&#xff09;的属性和方法优点&#xff1a;减少重复代码&#xff0c;缺点&#xff1a;只能单继承// 父类 public class Tes…

NAT技术:SNAT与DNAT区别详解

1. 什么是NAT&#xff1f; 定义&#xff1a;NAT 是一种网络技术&#xff0c;用于在私有网络&#xff08;如家庭或企业局域网&#xff09; 与 公共网络&#xff08;如互联网&#xff09; 之间转换IP地址。它允许使用私有IP地址的设备通过一个&#xff08;或多个&#xff09;公共…

java语言中,list<String>转成字符串,逗号分割;List<Integer>转字符串,逗号分割

java语言中&#xff0c;list<String 转成字符串&#xff0c;逗号分割 在 Java 中&#xff0c;将 List<String> 转成逗号分割的字符串有多种方法&#xff1a; 使用 String.join 方法 String.join 是 Java 8 引入的一个静态方法&#xff0c;它可以方便地将集合中的元素用…

NineData云原生智能数据管理平台新功能发布|2025年8月版

本月发布 11 项更新&#xff0c;其中重点发布 5项、功能优化 6 项。重点发布数据库 DevOps - SQL 窗口支持 PolarDB 系列SQL 窗口新增支持 PolarDB PostgreSQL 与 PolarDB Oracle 数据源&#xff0c;扩展云原生数据库管理能力。新增 AWS 数据源支持新增支持 AWS Aurora Postgre…

【ARDUINO】通过ESP8266连接WIFI,启动TCP,接受TCP客户端指令【测试中】

通过ESP8266连接WIFI&#xff0c;启动TCP&#xff0c;接受TCP客户端指令**记录**2025年9月8日11:20:372025年9月9日08:45:342025年9月11日21:40:22**代码**记录 2025年9月8日11:20:37 【测试情况】 代码可以跑到正确连接WIFI&#xff0c;也能获得IP&#xff0c;但是启动TCP服…

(网络原理)核心知识回顾 网络核心原理 get和post的理解 解析http 加密+请求和响应的一些关键字 Cookie和session 对密钥的理解

目录 核心知识回顾 网络核心原理 get和post的理解 解析http 加密请求和响应的一些关键字 Cookie和session 对密钥的理解 核心知识回顾 网络编程---socket api UDP DatagramSocket DatagramPacket TCP ServerSocket Socket 1.读写数据通过Socket,通过Socket内置的 lnpu…

前端框架对比分析:离线PWA + Cloudflare Workers部署

目录 概述 框架对比表格 详细分析 1. Astro ⭐⭐⭐⭐⭐ **强烈推荐** 2. Next.js ⭐⭐⭐⭐ **推荐** 3. Remix (现React Router) ⭐⭐⭐⭐⭐ **强烈推荐** 4. SvelteKit ⭐⭐⭐⭐ **推荐** 5. Nuxt.js ⭐⭐⭐ **一般推荐** 6. Vite + React ⭐⭐⭐ **基础选择** 推荐方案 🏆 …

9-10关于JS初学产生的问题

1.页面添加加载完成事件监听&#xff0c;页面加载完成后&#xff0c;执行页面初始化方法/函数; 这是什么意思 这句话描述的是前端开发中一种常见的操作&#xff1a;等待页面完全加载完成后&#xff0c;再执行特定的初始化代码。 简单来说&#xff0c;就是要确保页面上的所有元素…

项目中遇到pom文件里使用systemPath的例子记录

项目中遇到pom文件里使用systemPath&#xff0c;很少见&#xff0c;问了下豆包&#xff0c;记录下结果。在 Maven 的 pom.xml 中&#xff0c;<systemPath> 是 <dependency> 标签内的一个可选配置&#xff0c;用于手动指定本地系统中某个依赖包&#xff08;通常是 J…

10、向量与矩阵基础 - 深度学习的数学语言

学习目标:建立向量和矩阵的几何直观理解,掌握线性代数的核心概念,培养空间思维能力,为手搓大模型奠定扎实的数学基础 想象一下,当你使用GPT进行对话时,每个词汇都被转换成高维向量,整个对话历史变成一个巨大的矩阵。模型的"理解"过程,本质上就是在这个高维空…

【Python Tkinter】图形用户界面(GUI)开发及打包EXE指南

【Python Tkinter】图形用户界面&#xff08;GUI&#xff09;开发及打包EXE指南一、关于 Python Tkinter二、密码生成器示例2.1 使用Python添加图形用户界面&#xff08;GUI&#xff09;2.2 使用工具PyInstaller将应用打包成exe文件三、总结一、关于 Python Tkinter Python Tk…