UNPKG

@tanzhenxing/zx-code

Version:

源代码展示组件,用于展示不同类型的文本样式

217 lines (168 loc) 5.68 kB
# zx-code 增强版源代码展示组件 ## 概述 `zx-code` 是一个功能丰富的源代码展示组件,专为 uni-app 项目设计。经过全面重构,提供了语法高亮、行号显示、代码复制、全屏模式等多种实用功能。 ## 功能特点 ### 🎨 核心功能 -**语法高亮** - 支持 JavaScript、Vue、CSS、HTML 等多种语言 -**行号显示** - 可切换显示/隐藏行号 -**代码复制** - 一键复制源代码到剪贴板 -**全屏模式** - 支持全屏查看代码 -**自动换行** - 可控制代码是否自动换行 -**代码统计** - 显示行数、字符数等统计信息 ### 🎯 UI/UX 优化 -**现代化界面** - 渐变色工具栏,美观的卡片式设计 -**响应式布局** - 适配各种屏幕尺寸 -**交互反馈** - 复制成功提示、按钮动画效果 -**可自定义样式** - 支持字体大小、行高等样式配置 ### 🔧 开发者友好 -**TypeScript 支持** - 完整的类型定义 -**组件 API** - 暴露常用方法供父组件调用 -**跨平台兼容** - 支持 H5、小程序、App 等平台 ## 安装使用 ### 基础使用 ```vue <template> <zx-code :sourceCode="code" language="javascript" title="示例代码" /> </template> <script setup> import zxCode from '@/components/zx-code/zx-code.vue' const code = `function hello() { console.log('Hello World!'); }` </script> ``` ## API 参考 ### Props 属性 | 属性名 | 类型 | 默认值 | 说明 | |--------|------|--------|------| | `sourceCode` | String | `''` | 要显示的源代码内容 | | `showCode` | Boolean | `true` | 是否显示源代码 | | `language` | String | `'javascript'` | 编程语言类型,用于语法高亮 | | `title` | String | `''` | 代码块标题 | | `fontSize` | String/Number | `'26rpx'` | 字体大小 | | `lineHeight` | String/Number | `'40rpx'` | 行高 | | `showLineNumber` | Boolean | `true` | 是否显示行号 | | `enableCopy` | Boolean | `true` | 是否启用复制功能 | | `enableFullscreen` | Boolean | `true` | 是否启用全屏功能 | | `wrapCode` | Boolean | `false` | 是否自动换行 | | `showStats` | Boolean | `true` | 是否显示统计信息 | | `theme` | String | `'light'` | 代码主题(预留功能) | ### 支持的编程语言 目前支持基础语法高亮的语言: - **JavaScript/TypeScript**: `javascript`, `js`, `typescript`, `ts` - **Vue**: `vue` - **HTML/XML**: `html`, `xml` - **CSS/Sass**: `css`, `scss`, `sass` ### 暴露的方法 通过 `ref` 可以调用组件的方法: ```vue <template> <zx-code ref="codeRef" :sourceCode="code" /> <button @click="copyCode">复制代码</button> </template> <script setup> import { ref } from 'vue' const codeRef = ref() const copyCode = () => { codeRef.value.copyCode() } </script> ``` 可用方法: - `copyCode()` - 复制代码 - `toggleFullscreen()` - 切换全屏模式 - `toggleLineNumber()` - 切换行号显示 - `toggleWrap()` - 切换自动换行 ## 使用示例 ### 1. 基础 JavaScript 代码展示 ```vue <zx-code :sourceCode="jsCode" language="javascript" title="异步函数示例" :showLineNumber="true" :enableCopy="true" /> ``` ### 2. Vue 组件代码展示 ```vue <zx-code :sourceCode="vueCode" language="vue" title="Vue 组件" :fontSize="24" :lineHeight="36" /> ``` ### 3. CSS 样式代码展示 ```vue <zx-code :sourceCode="cssCode" language="css" title="样式定义" :showLineNumber="false" :wrapCode="true" /> ``` ### 4. 自定义样式配置 ```vue <zx-code :sourceCode="htmlCode" language="html" title="HTML 结构" fontSize="28rpx" lineHeight="42rpx" :showStats="false" /> ``` ## 样式自定义 组件使用 SCSS 编写样式,支持通过 CSS 变量或覆盖样式类进行自定义: ```scss // 自定义工具栏背景 .zx-code-display .code-toolbar { background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%); } // 自定义代码背景色 .zx-code-display .code-block { background-color: #2d3748; } // 自定义代码文字颜色 .zx-code-display .code-text { color: #e2e8f0; } ``` ## 平台兼容性 | 平台 | 支持状态 | 备注 | |------|----------|------| | H5 | ✅ 完全支持 | 使用 Clipboard API | | 微信小程序 | ✅ 完全支持 | 使用 uni.setClipboardData | | 支付宝小程序 | ✅ 完全支持 | 使用 uni.setClipboardData | | App (iOS/Android) | ✅ 完全支持 | 使用 uni.setClipboardData | ## 注意事项 1. **语法高亮限制**: 当前版本提供基础的语法高亮,如需更复杂的高亮效果,建议集成 highlight.js 或 prism.js 2. **性能考虑**: 对于超大代码文件(>1000行),建议分页显示或虚拟滚动 3. **复制功能**: 在小程序中复制功能需要用户授权 4. **全屏模式**: 在某些平台可能受到限制 ## 更新日志 ### v2.0.0 (最新版本) - 🎉 全面重构,提升性能和用户体验 - ✨ 新增语法高亮功能 - ✨ 新增行号显示 - ✨ 新增代码复制功能 - ✨ 新增全屏模式 - ✨ 新增代码统计信息 - 🎨 优化界面设计,采用现代化风格 - 📱 完善响应式布局 - 🔧 增强组件 API,暴露更多方法 - 🐛 修复多项已知问题 ### v1.0.0 - 🎉 初始版本 - ✨ 基础的代码显示功能 ## 贡献指南 欢迎提交 Issue 和 Pull Request 来帮助改进这个组件! ## 许可证 MIT License