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

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

@[TOC]

⭐ 前言

大家好,我是yma16,不止前端,本文将介绍微信小程序中 markdown的代码复制功能实现。

⭐ 复制代码功能实现

基于towxml渲染markdown 定位

因为是基于towxml渲染的markdown
通过渲染元素快速定位代码块 code 的位置
image.png

通过选择元素,可找到class 名称h2w__viewParent即为渲染代码块的元素布局。

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

定位元素的代码块渲染class
image.png

查找样式的判断源码

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

image.png

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!
image.png

复制成功!
image.png

⭐ 结束

欢迎阅读,祝你生活愉快!
image.png

目录
相关文章
|
14天前
|
人工智能 前端开发 JavaScript
MacTalk 测评通义灵码,实现“微信表情”小功能
墨问西东创始人池建强分享了团队使用通义灵码的经验。
|
11天前
|
小程序 JavaScript Go
代码总有一个是你想要的分享63个微信小程序源
分享63个微信小程序源代码,包括电商系统、同城拼车、博客等多种应用,涵盖C#、Node.js、Golang等技术栈。每个项目附带源码和示例,适合初学者和开发者参考学习。提取码:8888,代码效果参考:http://www.603393.com/sitemap.xml。
27 2
|
17天前
|
小程序 API 开发工具
使用python 实现微信签到提醒功能
【9月更文挑战第4天】使用python 实现微信签到提醒功能
33 2
|
27天前
|
Web App开发 缓存 小程序
【Azure API 管理】从微信小程序访问APIM出现200空响应的问题中发现CORS的属性[terminate-unmatched-request]功能
【Azure API 管理】从微信小程序访问APIM出现200空响应的问题中发现CORS的属性[terminate-unmatched-request]功能
|
1月前
|
小程序 前端开发 开发者
|
1月前
|
小程序 前端开发 API
Ant Design Mini 问题之在微信小程序中,由于不支持slot特性,Ant Design Mini的什么组件功能受到了限制,如何解决
Ant Design Mini 问题之在微信小程序中,由于不支持slot特性,Ant Design Mini的什么组件功能受到了限制,如何解决
|
4月前
|
程序员 Linux iOS开发
一款比Typora更简洁优雅的Markdown编辑器神器(完全开源免费)
一款比Typora更简洁优雅的Markdown编辑器神器(完全开源免费)
203 1
|
4月前
《使用「Markdown」编辑器的那些天 |CSDN编辑器测评》
《使用「Markdown」编辑器的那些天 |CSDN编辑器测评》
50 0
|
25天前
|
存储 安全 数据安全/隐私保护
Django 后端架构开发:富文本编辑器权限管理与 UEditor 、Wiki接入,实现 Markdown 文本编辑器
Django 后端架构开发:富文本编辑器权限管理与 UEditor 、Wiki接入,实现 Markdown 文本编辑器
62 0
|
3月前
|
存储 移动开发 编解码
基于HTML5开发的Markdown在线编辑器
Markdown是一种轻量级标记语言,以其简洁易读的格式而备受程序员和作者们的青睐。随着互联网的发展,越来越多的在线Markdown编辑器应运而生,为用户提供了更加便捷、高效的写作和编辑环境。本文将探讨基于HTML5开发的Markdown在线编辑器的设计原理、功能特点以及技术优势。
94 4