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.pswp.cn/web/79926.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79926.shtml
英文地址,請注明出處:http://en.pswp.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…