用HTML5+JavaScript實現漢字轉拼音工具

用HTML5+JavaScript實現漢字轉拼音工具

前一篇博文(https://blog.csdn.net/cnds123/article/details/148067680)提到,當需要將拼音添加到漢字上面時,用python實現比HTML5+JavaScript實現繁瑣。在這篇博文中用HTML5+JavaScript實現漢字轉拼音工具。

主要功能特點:

1.???? 多種拼音風格選擇(帶聲調符號、數字聲調、無聲調)

2.???? 輸出模式:可以選擇“普通模式”(僅拼音)或“拼音注音”(每個漢字的拼音顯示在上方)

3.???? 可自定義分隔符,可以自定義拼音之間的分隔符(默認空格)

4.???? 標點符號保留選項,關閉時會自動過濾非漢字字符

5.???? 一鍵復制結果到剪貼板

使用pinyin-pro庫,有關情況見

https://pinyin-pro.cn/guide/start.html

這個實現依賴于pinyin-pro庫(通過CDN加載),需要網絡連接。如果需要離線使用,可以下載pinyin-pro庫到本地。修改其中的<script src="https://unpkg.com/pinyin-pro@3.18.2/dist/index.js"></script> 這一句的路徑。

運行界面如下:

?

源碼如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>漢字轉拼音工具</title><style>:root {--primary-color: #4CAF50;--secondary-color: #45a049;--background-color: #f8f9fa;--border-color: #ddd;}body {font-family: 'Microsoft YaHei', Arial, sans-serif;line-height: 1.6;margin: 0;padding: 20px;background-color: var(--background-color);}.container {max-width: 800px;margin: 0 auto;background-color: white;padding: 20px;border-radius: 8px;box-shadow: 0 2px 4px rgba(0,0,0,0.1);}h1 {color: var(--primary-color);text-align: center;margin-bottom: 20px;}.control-panel {display: grid;grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));gap: 10px;margin-bottom: 20px;padding: 15px;background-color: var(--background-color);border-radius: 4px;}.control-group {margin-bottom: 10px;}label {display: block;margin-bottom: 5px;font-weight: bold;}select, input[type="text"] {width: 100%;padding: 8px;border: 1px solid var(--border-color);border-radius: 4px;box-sizing: border-box;}.checkbox-group {margin-top: 10px;}.checkbox-group label {font-weight: normal;display: flex;align-items: center;gap: 5px;}.text-area {width: 100%;height: 150px;padding: 10px;margin-bottom: 10px;border: 1px solid var(--border-color);border-radius: 4px;resize: vertical;box-sizing: border-box;}.button-group {display: flex;gap: 10px;margin-bottom: 20px;flex-wrap: wrap;}button {padding: 10px 20px;background-color: var(--primary-color);color: white;border: none;border-radius: 4px;cursor: pointer;transition: background-color 0.3s;}button:hover {background-color: var(--secondary-color);}.result-container {margin-top: 20px;padding: 15px;background-color: var(--background-color);border-radius: 4px;}.result-text {line-height: 2;margin: 0;}ruby {margin: 0 2px;}rt {color: #0066cc;font-size: 0.7em;font-weight: normal;}.error {color: red;margin-top: 10px;}@media (max-width: 600px) {.container {padding: 10px;}.button-group {flex-direction: column;}button {width: 100%;}}</style>
</head>
<body><div class="container"><h1>漢字轉拼音工具</h1><div class="control-panel"><div class="control-group"><label for="pinyinStyle">拼音風格:</label><select id="pinyinStyle"><option value="tone">帶聲調</option><option value="tone2">數字聲調</option><option value="normal">無聲調</option></select></div><div class="control-group"><label for="outputMode">輸出模式:</label><select id="outputMode"><option value="normal">普通模式</option><option value="ruby">拼音注音</option></select></div><div class="control-group"><label for="separator">分隔符:</label><input type="text" id="separator" value=" " maxlength="1"></div><div class="checkbox-group"><label><input type="checkbox" id="keepPunctuation" checked>保留標點</label></div></div><textarea id="inputText" class="text-area" placeholder="請輸入要轉換的漢字..."></textarea><div class="button-group"><button onclick="convertText()">轉換</button><button onclick="clearText()">清空</button><button onclick="copyResult()">復制結果</button></div><div class="result-container"><div id="result" class="result-text"></div></div></div><script src="https://unpkg.com/pinyin-pro@3.18.2/dist/index.js"></script><script>// 聲調映射表const toneMap = {'a': ['ā', 'á', 'ǎ', 'à', 'a'],'e': ['ē', 'é', 'ě', 'è', 'e'],'i': ['ī', 'í', 'ǐ', 'ì', 'i'],'o': ['ō', 'ó', 'ǒ', 'ò', 'o'],'u': ['ū', 'ú', 'ǔ', 'ù', 'u'],'ü': ['ǖ', 'ǘ', 'ǚ', 'ǜ', 'ü'],'v': ['ǖ', 'ǘ', 'ǚ', 'ǜ', 'ü']};// 轉換函數function convertText() {const inputText = document.getElementById('inputText').value.trim();if (!inputText) return;const style = document.getElementById('pinyinStyle').value;const mode = document.getElementById('outputMode').value;const separator = document.getElementById('separator').value;const keepPunctuation = document.getElementById('keepPunctuation').checked;try {const result = mode === 'ruby' ? convertToRuby(inputText, style) : convertToPlain(inputText, style, separator);document.getElementById('result').innerHTML = result;} catch (error) {document.getElementById('result').innerHTML = `<div class="error">轉換失敗:${error.message}</div>`;}}// 轉換為普通拼音文本function convertToPlain(text, style, separator) {const options = {toneType: style,nonZh: keepPunctuation ? 'retain' : 'removed',separator: separator};return pinyinPro.pinyin(text, options);}// 轉換為Ruby注音格式function convertToRuby(text, style) {let result = '';const chars = Array.from(text);for (const char of chars) {if (/[\u4e00-\u9fff]/.test(char)) {// 漢字const pinyin = pinyinPro.pinyin(char, {toneType: style,nonZh: 'removed'});result += `<ruby>${char}<rt>${pinyin}</rt></ruby>`;} else {// 非漢字result += keepPunctuation ? char : '';}}return result;}// 清空文本function clearText() {document.getElementById('inputText').value = '';document.getElementById('result').innerHTML = '';}// 復制結果function copyResult() {const resultElement = document.getElementById('result');const text = result.textContent || result.innerText;if (!text) {alert('沒有可復制的內容!');return;}// 創建選區const selection = window.getSelection();const range = document.createRange();range.selectNodeContents(resultElement);selection.removeAllRanges();selection.addRange(range);try {// 嘗試執行復制命令const successful = document.execCommand('copy');if (successful) {alert('已復制到剪貼板');} else {alert('復制失敗,請手動選擇并按Ctrl+C復制');}} catch (err) {alert('無法復制: ' + err);}// 清除選區selection.removeAllRanges();}// 初始化document.addEventListener('DOMContentLoaded', () => {// 可以添加初始化代碼});</script>
</body>
</html>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82546.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82546.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82546.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

鴻蒙OSUniApp 開發的動態背景動畫組件#三方框架 #Uniapp

使用 UniApp 開發的動態背景動畫組件 前言 在移動應用開發中&#xff0c;動態背景動畫不僅能提升界面美感&#xff0c;還能增強用戶的沉浸感和品牌辨識度。無論是登錄頁、首頁還是活動頁&#xff0c;恰到好處的動態背景都能讓產品脫穎而出。隨著鴻蒙&#xff08;HarmonyOS&am…

云原生技術架構技術探索

文章目錄 前言一、什么是云原生技術架構二、云原生技術架構的優勢三、云原生技術架構的應用場景結語 前言 在當今的技術領域&#xff0c;云原生技術架構正以一種勢不可擋的姿態席卷而來&#xff0c;成為了眾多開發者、企業和技術愛好者關注的焦點。那么&#xff0c;究竟什么是…

AWS之AI服務

目錄 一、AWS AI布局 ??1. 底層基礎設施與芯片?? ??2. AI訓練框架與平臺?? ??3. 大模型與應用層?? ??4. 超級計算與網絡?? ??與競品對比?? AI服務 ??1. 機器學習平臺?? ??2. 預訓練AI服務?? ??3. 邊緣與物聯網AI?? ??4. 數據與AI…

lwip_bind、lwip_listen 是阻塞函數嗎

在 lwIP 協議棧中&#xff0c;lwip_bind 和 lwip_listen 函數本質上是非阻塞的。 通常&#xff0c;bind和listen在大多數實現中都是非阻塞的&#xff0c;因為它們只是設置套接字的屬性&#xff0c;不需要等待外部事件。阻塞通常發生在接受連接&#xff08;accept&#xff09;、…

【后端高階面經:消息隊列篇】28、從零設計高可用消息隊列

一、消息隊列架構設計的核心目標與挑戰 設計高性能、高可靠的消息隊列需平衡功能性與非功能性需求,解決分布式系統中的典型問題。 1.1 核心設計目標 吞吐量:支持百萬級消息/秒處理,通過分區并行化實現橫向擴展。延遲:端到端延遲控制在毫秒級,適用于實時業務場景。可靠性…

【運維實戰】Linux 內存調優之進程內存深度監控

寫在前面 內容涉及 Linux 進程內存監控 監控方式包括傳統工具 ps/top/pmap ,以及 cgroup 內存子系統&#xff0c;proc 內存偽文件系統 監控內容包括進程內存使用情況&#xff0c; 內存全局數據統計&#xff0c;內存事件指標&#xff0c;以及進程內存段數據監控 監控進程的內…

決策樹 GBDT XGBoost LightGBM

一、決策樹 1. 決策樹有一個很強的假設&#xff1a; 信息是可分的&#xff0c;否則無法進行特征分支 2. 決策樹的種類&#xff1a; 2. ID3決策樹&#xff1a; ID3決策樹的數劃分標準是信息增益&#xff1a; 信息增益衡量的是通過某個特征進行數據劃分前后熵的變化量。但是&…

java基礎學習(十四)

文章目錄 4-1 面向過程與面向對象4-2 Java語言的基本元素&#xff1a;類和對象面向對象的思想概述 4-3 對象的創建和使用內存解析匿名對象 4-1 面向過程與面向對象 面向過程(POP) 與 面向對象(OOP) 二者都是一種思想&#xff0c;面向對象是相對于面向過程而言的。面向過程&…

TCP 三次握手,第三次握手報文丟失會發生什么?

文章目錄 RTO(Retransmission Timeout)注意 客戶端收到服務端的 SYNACK 報文后&#xff0c;會回給服務端一個 ACK 報文&#xff0c;之后處于 ESTABLISHED 狀態 因為第三次握手的 ACK 是對第二次握手中 SYN 的確認報文&#xff0c;如果第三次握手報文丟失了&#xff0c;服務端就…

deepseek告訴您http與https有何區別?

有用戶經常問什么是Http , 什么是Https &#xff1f; 兩者有什么區別&#xff0c;下面為大家介紹一下兩者的區別 一、什么是HTTP HTTP是一種無狀態的應用層協議&#xff0c;用于在客戶端瀏覽器和服務器之間傳輸網頁信息&#xff0c;默認使用80端口 二、HTTP協議的特點 HTTP協議…

openresty如何禁止海外ip訪問

前幾天&#xff0c;我有一個徒弟問我&#xff0c;如何禁止海外ip訪問他的網站系統&#xff1f;操作系統采用的是centos7.9&#xff0c;發布服務采用的是openresty。通過日志他發現&#xff0c;有很多類似以下數據 {"host":"172.30.7.95","clientip&q…

理解 Redis 事務-20 (MULTI、EXEC、DISCARD)

理解 Redis 事務&#xff1a;MULTI、EXEC、DISCARD Redis 事務允許你將一組命令作為一個單一的原子操作來執行。這意味著事務中的所有命令要么全部執行&#xff0c;要么全部不執行。這對于在需要一起執行多個操作時保持數據完整性至關重要。本課程將涵蓋 Redis 事務的基礎知識…

Milvus分區-分片-段結構詳解與最佳實踐

導讀&#xff1a;在構建大規模向量數據庫應用時&#xff0c;數據組織架構的設計往往決定了系統的性能上限。Milvus作為主流向量數據庫&#xff0c;其獨特的三層架構設計——分區、分片、段&#xff0c;為海量向量數據的高效存儲和檢索提供了堅實基礎。 本文通過圖書館管理系統的…

Kettle 遠程mysql 表導入到 hadoop hive

kettle 遠程mysql 表導入到 hadoop hive &#xff08;教學用 &#xff09; 文章目錄 kettle 遠程mysql 表導入到 hadoop hive創建 對象 執行 SQL 語句 -mysql 導出 CSV格式CSV 文件遠程上傳到 HDFS運行 SSH 命令遠程登錄 run SSH 并執行 hadoop fs -put 建表和加載數據總結 創…

Linux輸出命令——echo解析

摘要 全面解析Linux echo命令核心功能&#xff0c;涵蓋文本輸出、變量解析、格式控制及高級技巧&#xff0c;助力提升Shell腳本開發與終端操作效率。 一、核心功能與定位 作為Shell腳本開發的基礎工具&#xff0c;echo命令承擔著信息輸出與數據傳遞的重要角色。其主要功能包…

Windows系統下 NVM 安裝 Node.js 及版本切換實戰指南

以下是 Windows 11 系統下使用 NVM 安裝 Node.js 并實現版本自由切換的詳細步驟&#xff1a; 一、安裝 NVM&#xff08;Node Version Manager&#xff09; 1. 卸載已有 Node.js 如果已安裝 Node.js&#xff0c;請先卸載&#xff1a; 控制面板 ? 程序與功能 ? 找到 Node.js…

【leetcode】977. 有序數組的平方

有序數組的平方 題目代碼1. 使用sorted2. 雙指針 題目 977. 有序數組的平方 給你一個按 非遞減順序 排序的整數數組 nums&#xff0c;返回 每個數字的平方 組成的新數組&#xff0c;要求也按 非遞減順序 排序。 示例 1&#xff1a; 輸入&#xff1a;nums [-4,-1,0,3,10] 輸…

Obsidian 數據可視化深度實踐:用 DataviewJS 與 Charts 插件構建智能日報系統

Obsidian 數據可視化深度實踐&#xff1a;用 DataviewJS 與 Charts 插件構建智能日報系統 一、核心架構解析 本系統基于 Obsidian 的 DataviewJS 和 Charts 插件&#xff0c;實現日報數據的自動采集、可視化分析及智能回溯功能&#xff08;系統架構原理見&#xff09;。其技術…

深入解析Spring Boot與Kafka集成:構建高效消息驅動應用

深入解析Spring Boot與Kafka集成&#xff1a;構建高效消息驅動應用 引言 在現代分布式系統中&#xff0c;消息隊列是實現異步通信和解耦的關鍵技術之一。Apache Kafka作為一款高性能、分布式的消息隊列系統&#xff0c;廣泛應用于大數據和實時數據處理場景。本文將詳細介紹如…

Rust 學習筆記:關于生命周期的練習題

Rust 學習筆記&#xff1a;關于生命周期的練習題 Rust 學習筆記&#xff1a;關于生命周期的練習題生命周期旨在防止哪種編程錯誤&#xff1f;以下代碼能否通過編譯&#xff1f;若能&#xff0c;輸出是&#xff1f;如果一個引用的生命周期是 static&#xff0c;這意味著什么&…