Vue组件-霓虹灯:技术解析与实现

Vue组件-霓虹灯:技术解析与实现

本文将详细解析如何使用Vue 3实现一个动态炫彩霓虹灯效果。

预览

NeonLight

概述

此Vue组件创建了一个由7个同心圆环组成的霓虹灯效果,每个圆环具有彩虹中的一种颜色(红、橙、黄、绿、蓝、靛、紫)。这些圆环的颜色会动态轮转变化,产生向外流动的视觉效果。

实现代码

<script setup>
import { ref, onMounted, onBeforeUnmount } from 'vue'const colors = ['#ff0000', // 红色'#ff7f00', // 橙色'#ffff00', // 黄色'#00ff00', // 绿色'#0000ff', // 蓝色'#4b0082', // 靛蓝'#9400d3'  // 紫色
]const currentColors = ref([...colors])
const animationInterval = ref(null)function rotateColors() {// 颜色轮转currentColors.value.push(currentColors.value.shift())
}function start() {if (!animationInterval.value) {animationInterval.value = setInterval(rotateColors, 100) // 变化间隔}
}function stop() {if (animationInterval.value) {clearInterval(animationInterval.value)animationInterval.value = null}
}onMounted(() => {start() // 默认自动开始
})onBeforeUnmount(() => {stop() // 组件卸载时清除定时器
})// 暴露方法给父组件
defineExpose({start,stop
})
</script><template><div class="neon-container"><divv-for="(color, index) in currentColors":key="index"class="neon-ring":style="{'--ring-color': color,'--ring-size': `${(7 - index) * 50}px`,'--inner-size': `${(6 - index) * 50}px`}"></div></div>
</template><style scoped>
.neon-container {position: relative;width: 400px;height: 400px;display: flex;justify-content: center;align-items: center;
}.neon-ring {position: absolute;border-radius: 50%;width: var(--ring-size);height: var(--ring-size);background: var(--ring-color);box-shadow: 0 0 10px var(--ring-color),0 0 20px var(--ring-color);transition: background 0.3s ease, box-shadow 0.3s ease;
}.neon-ring::after {content: '';position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);width: var(--inner-size);height: var(--inner-size);background: #000;border-radius: 50%;
}
</style>

技术解析

1. ref

  • currentColors存储当前颜色数组
  • animationInterval存储定时器引用

2. 颜色算法

function rotateColors() {currentColors.value.push(currentColors.value.shift())
}

这个简单的算法实现了颜色循环效果:

  1. shift()移除数组第一个元素
  2. push()将移除的元素添加到数组末尾
  3. 结果是颜色数组不断"轮转"

3. 定时器控制

function start() {if (!animationInterval.value) {animationInterval.value = setInterval(rotateColors, 100)}
}function stop() {if (animationInterval.value) {clearInterval(animationInterval.value)animationInterval.value = null}
}
  • 使用setInterval每100毫秒调用一次rotateColors
  • 提供startstop方法控制动画,并通过defineExpose暴露给父组件

4. CSS实现霓虹效果

.neon-ring {/* ... */box-shadow: 0 0 10px var(--ring-color),0 0 20px var(--ring-color);transition: background 0.3s ease, box-shadow 0.3s ease;
}

霓虹效果主要通过CSS实现:

  • box-shadow:创建发光效果,两层阴影增强立体感
  • transition:使颜色变化更平滑
  • 伪元素:after创建黑色内圆,形成圆环效果

5. 动态样式绑定

<divv-for="(color, index) in currentColors":key="index"class="neon-ring":style="{'--ring-color': color,'--ring-size': `${(7 - index) * 50}px`,'--inner-size': `${(6 - index) * 50}px`}"
></div>
  • v-for:循环渲染7个圆环
  • 动态样式:通过:style绑定CSS变量
    • --ring-color:当前颜色
    • --ring-size:圆环大小,从大到小(350px到50px)
    • --inner-size:内圆大小,形成圆环厚度

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

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

相关文章

【实战教程】从零实现DeepSeek AI多专家协作系统 - Spring Boot+React打造AI专家团队协作平台

&#x1f680; 本项目是DeepSeek大模型应用系列的V3版本&#xff0c;基于V1和V2版本的功能进行全面升级&#xff0c;引入了多智能体协作机制&#xff01; 系列教程推荐阅读顺序&#xff1a; 【V1版本】零基础搭建DeepSeek大模型聊天系统 - Spring BootReact完整开发指南【V2版本…

第8章-5 sql的执行顺序

上一篇&#xff1a;《第8章-4 查询性能优化2》&#xff0c;接着来了解查询的执行顺序&#xff0c;了解顺序对于优化会有帮助。 1&#xff0c;sql编写顺序 select distinct 查询字段 from 表名 JOIN 表名 ON 连接条件 where 查询条件 group by 分组字段 having 分组后…

设计模式学习整理

目录 UML类图 设计模式六大原则 1.单一职责原则 2.里氏替换原则 3.依赖倒置原则 4.接口隔离原则 5.迪米特法则(最少知道原则) 6.开(放封)闭原则 设计模式分类 1.创建型模式 2.结构型模式 4.行为型模式 一、工厂模式(factory——简单工厂模式和抽象工厂模式) 1.1、…

Linux干货(二)

前言 从B站黑马程序员Linux课程摘选的学习干货&#xff0c;新手友好&#xff01;若有侵权&#xff0c;会第一时间处理。 目录 前言 1.cd pwd命令 1.cd命令的作用 2.pwd命令的作用 2.相对路径绝对路径和特殊路径符 1.相对路径和绝对路径 1.绝对路径 2.相对路径 2.特殊…

ngx_http_keyval_module动态键值管理

一、模块安装与验证 检查模块是否可用 nginx -V 2>&1 | grep --color -o ngx_http_keyval_module如果看到 ngx_http_keyval_module&#xff0c;说明模块已编译进 NGINX。 若未找到&#xff0c;请联系你的 NGINX 供应商&#xff0c;获取商业版或重新编译并启用该模块&am…

upload-labs通关笔记-第4关 文件上传之.htacess绕过

目录 一、.htacess 二、代码审计 三、php ts版本安装 1、下载ts版本php 2、放入到phpstudy指定文件夹中 3、修改php配置文件 4、修改php.ini文件 5、修改httpd.conf文件 &#xff08;1&#xff09;定位文件 &#xff08;2&#xff09;修改文件 6、重启小皮 7、切换…

LeetCode 88. 合并两个有序数组 | Python 最简写法 + 实战注释

在日常刷题和面试中,「合并两个有序数组」是一个经典基础题。虽然属于简单难度,但它非常考察你的数组操作技巧和代码优化能力。本篇文章将带你从基础解法入手,进阶到最简洁的三元表达式写法,理解每一行代码背后的逻辑。 📌 题目描述 给你两个按 非递减顺序 排列的整数数组…

Kafka进阶指南:从原理到实战

目录 一、Kafka 基础回顾 二、生产者进阶 2.1 数据生产流程深度解析 2.2 关键配置参数详解 2.3 序列化与自定义序列化器 三、消费者进阶 3.1 消费方式与原理 3.2 分区分配策略 3.2.1 Range&#xff08;范围&#xff09;策略 3.2.2 Round - Robin&#xff08;轮询&…

Lightpanda开源浏览器:专为 AI 和自动化而设计的无界面浏览器

​一、软件介绍 文末提供程序和源码下载 Lightpanda开源浏览器&#xff1a;专为 AI 和自动化而设计的无界面浏览器&#xff1b; Javascript execution Javascript 执行Support of Web APIs (partial, WIP)支持 Web API&#xff08;部分、WIP&#xff09;Compatible with Pla…

团结引擎开源车模 Sample 发布:光照渲染优化 动态交互全面体验升级

光照、材质与交互效果的精细控制&#xff0c;通常意味着复杂的技术挑战&#xff0c;但借助 Shader Graph 14.1.0(已内置在团结引擎官方 1.5.0 版本中)&#xff0c;这一切都变得简单易用。通过最新团结引擎官方车模 Sample&#xff0c;开发者能切身感受到全新光照优化与编辑功能…

SpringCloud之Ribbon基础认识-服务负载均衡

0、Ribbon基本认识 Spring Cloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端 负载均衡的工具。 Ribbon 主要功能是提供客户端负载均衡算法和服务调用 Ribbon 客户端组件提供一系列完善的配置项如连接超时&#xff0c;重试等。 Ribbon 会基于某种规则&#xff08;如简单…

当 DeepSeek 遇见区块链:一场颠覆式的应用革命

目录 一、DeepSeek 与区块链的初印象二、技术融合&#xff1a;创新的基石2.1 强化学习优化智能合约2.2 混合专家系统适配多链2.3 语义理解增强合规性 三、应用实践&#xff1a;重塑行业格局3.1 DeFi 协议智能化跃迁3.2 GameFi 经济深度进化3.3 供应链金融信任增强 四、面临挑战…

vue3项目中使用CodeMirror组件的详细教程,中文帮助文档,使用手册

简介 这是基于 Vue 3 开发的 CodeMirror 组件。该组件基于 CodeMirror 5 开发&#xff0c;仅支持 Vue 3。 除了支持官方提供的各种语法模式外&#xff0c;还额外添加了日志输出展示模式&#xff0c;开箱即用&#xff0c;但不一定适用于所有场景。 如需完整文档和更多使用案例…

LeetCode热题100--240.搜索二维矩阵--中等

1. 题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[1…

2025爬虫实战技巧:高效数据采集方案

2025爬虫实战技巧:高效数据采集方案 🔥 本文核心价值 HTTPS请求链路加密逆向解析动态Cookie生成机制破解Cloudflare等高级防护绕过方案分布式爬虫架构设计要点目录 2025爬虫实战技巧:高效数据采集方案🔥 本文核心价值一、现代反爬机制技术解析1.1 主流平台防护体系1.2 反…

绑定 SSH key(macos)

在 macOS 上绑定 Gitee 或 GitHub 的 SSH Key&#xff0c;通常分为以下几步操作&#xff0c;包括生成 SSH key、添加到 ssh-agent&#xff0c;并配置到 Gitee 或 GitHub 平台。 1. 检查是否已有 SSH Key ls -al ~/.ssh 看看是否已有 id_rsa 或 id_ed25519 等文件。如果没有就…

Tailwind CSS v4 主题化实践入门(自定义 Theme + 主题模式切换)✨

ok&#xff0c;经过学习Tailwindcss我决定将此专栏建设成为一个Tailwindcss实战专栏&#xff0c;我将在专栏内完成5050挑战&#xff1a;50天50个Tailwindcss练习项目&#xff0c;欢迎大家订阅&#xff01;&#xff01;&#xff01; Tailwind CSS v4 带来了更强大的主题定制能力…

SAF利用由Varjo和AFormX开发的VR/XR模拟器推动作战训练

通过将AFormX的先进军用飞行模拟器与Varjo的行业领先的VR/XR硬件相结合&#xff0c;斯洛文尼亚武装部队正以经济高效、沉浸式的训练方式培训战斗机飞行员&#xff0c;以提高其战术准备和作战效率。 挑战&#xff1a;获得战术军事航空训练的机会有限 军事航空训练长期以来一直…

VUE中通过DOM导出PDF

最终效果 前端导出PDF的核心在于样式的绘制上&#xff0c;这里其实直接使用CSS进行绘制和布局就行&#xff0c;只不过需要计算好每页DIV盒子的大小&#xff0c;防止一页放不下造成样式错乱。 项目依赖 项目是Vue3 TS npm i html2canvas1.4.1 npm i jspdf3.0.1工具类(htmlToPdf…

SpringAI框架中的RAG模块详解及应用示例

SpringAI框架中的RAG模块详解及应用示例 RAG&#xff08;Retrieval-Augmented Generation&#xff09;可以通过检索知识库&#xff0c;克服大模型训练完成后参数冻结的局限性&#xff0c;携带知识让大模型根据知识进行回答。SpringAI框架提供了模块化的API来支持RAG&#xff0…