微信小程序_实现markdown支持代码复制功能

本文介绍了如何在微信小程序中实现Markdown的代码复制功能,通过towxml渲染定位代码块,结合事件绑定和样式设置,成功实现了代码的复制到粘贴板。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

⭐ 前言

大家好,我是yma16,不止前端,本文将介绍微信小程序中 markdown的代码复制功能实现。
往期微信小程序文章
小程序自定义微信昵称和头像
小程序制作markdown博客
小程序结合chatgpt制作聊天页面
小程序组件传值
小程序复制到粘贴板的功能实现

⭐ 复制代码功能实现

基于towxml渲染markdown 定位

因为是基于towxml渲染的markdown
通过渲染元素快速定位代码块 code 的位置
在这里插入图片描述
通过选择元素,可找到class 名称h2w__viewParent即为渲染代码块的元素布局。

h2w__code language-css 类名下是渲染的代码块

定位元素的代码块渲染class
在这里插入图片描述

查找样式的判断源码

通过new mardown的过程我们找到class是通过attr的class注入

在这里插入图片描述

attr注入属性用来判断是否是代码块 code

区分的标志:tag是否为code使用includes判断
e.tag.includes(‘code’)

// 代码块判断
if(e.tag.includes('code')||item.name.includes('code')||attrs.class.includes('code')){
   attrs.isCodeBlock=true
   attrs.element=e
}
复制代码样式及事件绑定

样式

<view 
wx:if="{{item.attrs.isCodeBlock}}" 
bindtap="cloneCode" 
data-code="{{item}}" 
data-attr-data="{{item.attrs.data}}" 
style="float: right;position: relative;top:-20px;user-select: none;">
复制代码
</view>

事件绑定

cloneCode(e) {
			const { code } = e.target.dataset
			const { attrs } = code
			const { element } = attrs
			const { child } = element
			let lineCount = 0
			const getCodeFormat = (array) => {
				let text = ''
				array.forEach(item => {
					if (item.tag && item.tag.includes('ul')) {
						// 多少行判断
						lineCount = item.child.length
					}
					else if (item.tag && item.tag.includes('span')) {
						// 子集的text 递归回去
						text += getCodeFormat(item.child)
					}
					else if (item.tag && item.tag.includes('br')) {
						// 换行标志
						text += '\n'
					}
					else if (item.text) {
						// 文字
						text += item.text
					}

				})
				return text
			}
			let content = getCodeFormat(child)
			wx.setClipboardData({
				data: content
			})
			wx.getClipboardData({
				success: (option) => {
					console.log(option)
				},
			})
		}
效果

复制打印测试和代码块一样,完全ok!
在这里插入图片描述
复制成功!
在这里插入图片描述

⭐ 结束

欢迎阅读,祝你生活愉快!
在这里插入图片描述

### 实现和自定义微信小程序中的Markdown组件 #### 使用 towxml 渲染 Markdown实现代码复制功能 为了在微信小程序中集成 Markdown 组件,可以采用 `towxml` 这一解决方案来渲染 Markdown 文本。此方案不仅允许展示标准的 Markdown 内容,还特别适合用于需要额外交互特性的场景,比如实现代码片段的复制功能。 ```javascript // 在 app.js 中引入 towxml import Towxml from 'path/to/towxml'; App({ onLaunch() { this.towxml = new Towxml(); } }) ``` 对于页面级别的应用,则可以在对应的 JS 文件内初始化: ```javascript Page({ data: { content: '' }, onLoad(options) { const { towxml } = getApp(); // 获取全局实例化的 towxml 对象 let result = towxml.toJson('your markdown string here', 'md'); this.setData({ content: result }); } }); ``` 配合 WXML 和 WXSS 来完成视图层的设计,确保样式与交互效果良好匹配[^1]。 #### 利用 wxParse 支持 HTML 及 Markdown 的解析 另一个选项是利用 `wxParse` 自定义组件来进行更广泛的富文本处理工作。该插件同样适用于希望同时兼容 HTML 和 Markdown 输入的情况,并且提供了良好的扩展性和易用性接口。 安装方式如下所示,在项目根目录执行命令安装依赖包: ```bash npm install --save @binwang/wxparse ``` 随后按照官方指南配置编译环境以及导入必要的文件资源至小程序工程当中[^2]。 #### 应用 wemark 提升开发体验 考虑到原生的小程序框架缺乏对复杂 HTML 结构的支持,专门面向此类需求设计了名为「wemark」的轻量级库。通过它可以直接读取 .md 文件作为数据源输入给模板引擎进行转换输出,极大简化了流程并提高了工作效率。 其核心优势在于紧密贴合实际应用场景下的痛点解决——即保持原有书写习惯的同时获得跨平台一致的表现力;另外也包含了丰富的 API 接口供调用者灵活定制所需行为模式[^3]。 #### 添加图片二维码识别特性增强用户体验 最后值得一提的是关于多媒体元素的操作优化建议。当涉及到图像类型的 Markdown 表达式时(如 ![alt text](image-url)),可以通过监听 img 标签上的 tap/click 事件触发相应的操作逻辑,例如调用微信内置的能力去查看大图或是提取其中嵌入的信息条码等附加价值服务。 具体做法是在 JavaScript 方法体内封装好回调函数体之后绑定到相应 DOM 节点上: ```javascript bindPreviewImage(e){ var src = e.currentTarget.dataset.src; //获取data-src var imgList = e.currentTarget.dataset.list; //获取data-list wx.previewImage({ current:src, urls:imgList }) } ``` 以上就是几种主流的技术路线及其实践要点概述[^4]。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yma16

感谢支持!共勉!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值