用AI帮忙,开发刷题小程序:微信小程序中实现Markdown图片解析与渲染功能详解

微信小程序—使用wemark渲染MarkDown文案 微信小程序使用wemark渲染库渲染MarkDown,towxml库,MarkDown语法,微信小程序markdown跳转页面 阅读详情

用AI帮忙,开发刷题小程序:微信小程序中实现Markdown图片解析与渲染功能详解

在开发微信小程序在线考试系统时,我们经常会遇到需要在题目内容或解析中显示图片的场景。为了提升用户体验,我们需要支持在文本中直接嵌入Markdown格式的图片,并在正确的位置渲染显示。本文将详细介绍如何在微信小程序中实现这一功能。

效果预览
在这里插入图片描述

功能需求分析

在软考真题练习系统中,许多题目和解析都包含图片,这些图片通常以Markdown语法格式存储在后台数据库中。例如:

这是题目内容![图片描述](http://example.com/image.png)这是图片后的文本内容

我们的目标是:

  1. 解析包含Markdown图片语法的文本内容
  2. 按照原始顺序显示文本和图片
  3. 保持内容的语义连贯性和视觉美观性

技术实现方案

1. 核心思路

我们将采用以下步骤实现该功能:

  1. 创建工具函数解析包含Markdown图片的文本
  2. 将解析后的内容转换为文本和图片的混合数组
  3. 在WXML模板中循环渲染这些元素
  4. 添加适当的样式美化显示效果

2. 工具函数实现

首先,我们在 examUtils.ts 文件中添加解析函数:

/**
 * 解析包含Markdown图片的内容,生成混合的文本和图片数组
 * @param content 包含Markdown图片的内容
 * @returns 混合的文本和图片数组
 */
static parseContentWithImages(content: string): Array<{type: 'text' | 'image', content: string}> {
  if (!content) return [];
  
  const result: Array<{type: 'text' | 'image', content: string}> = [];
  // 匹配Markdown图片语法: ![alt](url)
  const parts = content.split(/(!\[.*?\]\(.*?\))/g);
  
  parts.forEach(part => {
    if (part.startsWith('![') && part.includes('](') && part.endsWith(')')) {
      // 提取图片URL
      const urlMatch = part.match(/!\[.*?\]\((.*?)\)/);
      if (urlMatch && urlMatch[1]) {
        result.push({
          type: 'image',
          content: urlMatch[1]
        });
      }
    } else if (part) {
      // 文本内容
      result.push({
        type: 'text',
        content: part
      });
    }
  });
  
  return result;
}

这个函数将输入的文本按Markdown图片语法分割,并生成一个包含文本和图片信息的数组。

3. 组件逻辑修改

接下来,我们需要修改题目组件的逻辑文件 exam-question.ts,添加对内容的解析处理:

properties: {
  question: {
    type: Object,
    value: {},
    observer: function(newVal: any) {
      // 当question数据变化时,解析其中的内容和图片
      if (newVal && (newVal.content || newVal.answerAnalysis)) {
        const parsedContent = getApp().globalData.examUtils.parseContentWithImages(newVal.content || '');
        const parsedAnalysis = getApp().globalData.examUtils.parseContentWithImages(newVal.answerAnalysis || '');
        
        this.setData({
          'question.parsedContent': parsedContent,
          'question.parsedAnalysis': parsedAnalysis
        });
      }
    }
  }
}

这里我们使用了 observer 监听器,在题目数据变化时自动解析内容和解析文本。

4. WXML模板修改

在 exam-question.wxml 文件中,我们需要修改内容显示部分:

<!-- 题目内容 -->
<view class="question-content">
  <text user-select decode>{{question.questionNo}}. </text>
  <block wx:for="{{question.parsedContent}}" wx:key="index">
    <text wx:if="{{item.type === 'text'}}" user-select decode>{{item.content}}</text>
    <image wx:elif="{{item.type === 'image'}}" class="content-image" src="{{item.content}}" mode="widthFix" lazy-load="true"></image>
  </block>
</view>

<!-- 解析区域 -->
<view class="answer-section {{question.showExplanation ? 'show' : ''}}">
  <text class="answer-title">题目解析</text>
  <block wx:for="{{question.parsedAnalysis}}" wx:key="index">
    <text wx:if="{{item.type === 'text'}}" user-select decode class="answer-analysis">{{item.content}}</text>
    <image wx:elif="{{item.type === 'image'}}" class="analysis-image" src="{{item.content}}" mode="widthFix" lazy-load="true"></image>
  </block>
</view>

这样就实现了文本和图片的混合显示,保持了它们在原始内容中的顺序。

5. 样式优化

在 exam-question.less 文件中添加图片样式:

.question-content {
  font-size: 28rpx;
  font-weight: 500;
  color: #333;
  line-height: 1.4;
  padding: 20rpx 10rpx 10rpx 10rpx;
  
  .content-image {
    width: 100%;
    margin: 10rpx 0;
    border-radius: 10rpx;
  }
}

.answer-section {
  // ... 其他样式
  
  .analysis-image {
    width: 100%;
    margin: 10rpx 0;
    border-radius: 10rpx;
  }
}

功能测试

完成上述修改后,当题目内容或解析中包含如下格式的Markdown图片时:

这是题目内容![图片描述](http://example.com/image.png)这是图片后的文本内容

系统会自动解析并在正确位置显示图片,效果如下:

  1. 文本内容正常显示
  2. 图片在原始位置渲染显示
  3. 图片后的内容继续正常显示
  4. 整体内容保持语义连贯性

总结

通过以上步骤,我们成功实现了在微信小程序中解析和渲染Markdown图片的功能。该方案具有以下优点:

  1. 保持了内容的原始顺序和语义连贯性
  2. 实现了文本和图片的混合显示
  3. 代码结构清晰,易于维护和扩展
  4. 具有良好的用户体验

这个功能可以广泛应用于需要图文混排的场景,如在线教育、内容展示等微信小程序项目中。开发者可以根据实际需求对解析逻辑和显示样式进行调整和优化。


项目源码地址:https://gitee.com/alioo/ruankao

想要体验小程序的朋友可以通过以下二维码进行访问:
在这里插入图片描述

Markdown的流式渲染 用markdown-it这个库在HTML上动态更新markdown 内容(不是重新刷新). 阅读详情

相关推荐

如何在微信小程序中解析Markdown

我的微信小程序——心情记录员在记录完心情后回返回AI给的建议,这个建议的文本其实是markdown的语法,现在基本上所有的的AI大模型返回的内容都是markdown格式的,基于这个原因我需要将返回的内容解析为用户看起来友好的内容,例如加粗、列表等。经过查询,我准备使用一个开源的项目——。是一个可将HTMLMarkdown转为微信小程序WXML(WeiXin Markup Language)的渲染库。用于解决在微信小程序中MarkdownHTML不能直接渲染的问题。

胡海龙 2964

在微信小程序中渲染MarkDown(非流式输出)

使用Towxml在微信小程序中渲染MarkDown文本

2302_80473627的博客 1522

基于WorkBuddy的AI刷题小程序开发实践:从架构到落地

在大模型应用开发成为主流趋势的今天,AI工作流编排工具正在重塑传统业务系统的构建方式。WorkBuddy作为一款面向业务流程的AI编排平台,通过Skill封装prompt模板、参数定义与输出格式,将大模型能力转化为可复用的结构化服务。开发者无需自建后端,即可实现动态出题、自动判题与智能解析等复杂逻辑。这一模式不仅大幅降低了题库维护和接口开发成本,也为微信小程序等轻量前端提供了高效的AI能力接入路径。无论是参赛项目设计、垂直领域工具开发,还是企业级AI原生应用探索,理解AI工作流与小程序云函数的协作机制都具有

cmff98425的博客 514

vue和微信小程序处理markdown格式数据

在Vue项目中展示Markdown格式的数据,比如通义千问模型返回的数据,你可以借助一些Markdown解析库将Markdown文本转换为HTML,然后在页面上渲染。以下为你详细介绍几种常用的实现方式。

小小默:进无止境 3471

从AI建议到可视化展示:用Towxml打造微信小程序Markdown内容生态

本文详细介绍了如何利用Towxml开源库,在微信小程序中优雅地解析和渲染Markdown内容,解决原生WXML不支持富文本展示的痛点。通过实战案例,展示了从AI建议、技术文档到知识库内容的完整可视化方案,并深入探讨了高级功能集成、性能优化与架构设计,助力开发者构建专业的内容生态。

weixin_28318011的博客 526

微信小程序中高效解析Markdown的Towxml实战指南

本文提供了在微信小程序中集成和使用Towxml库的完整实战指南。详细介绍了从基础集成、按需构建、核心配置到高级技巧(如分包加载、性能优化)的全流程,帮助开发者高效解析和渲染Markdown内容,解决原生组件支持不足的问题,提升内容展示体验。

weixin_29251567的博客 394

uniapp 微信小程序实现ai问答功能流式输出makdown解析实现打字机效果(附源码)

本文详细介绍了在UniApp微信小程序中实现Markdown文本渲染和AI对话功能的方法。通过Towxml库实现Markdown解析渲染,支持文本、图片等多种消息类型。采用流式请求处理AI对话响应,实现实时打字效果,并包含历史记录查询、语音输入、图片上传等功能。核心代码展示了聊天界面布局、数据流处理、滚动控制等关键实现,同时提供了完整的样式设计。该方案适用于需要集成智能对话功能的小程序开发,具有较好的用户体验和扩展性。

qq_40326609的博客 1117

uni-app实战:集成mp-html与marked,为微信小程序打造优雅的Markdown渲染方案

本文详细介绍了如何在uni-app中集成mp-html与marked,为微信小程序打造高效的Markdown渲染方案。通过对比服务端与客户端渲染的优劣,推荐使用mp-html+marked组合,提供完整的集成步骤、样式优化技巧及性能优化建议,帮助开发者快速实现优雅的Markdown内容展示。

weixin_30667649的博客 396

微信小程序Markdown渲染实战:Towxml 3.0从安装到避坑全指南

本文详细介绍了如何在微信小程序中使用Towxml 3.0实现Markdown的高效渲染,包括环境搭建、核心API使用、高级功能定制及常见问题解决方案。通过实战示例,帮助开发者快速掌握从基础集成到性能优化的全流程技巧,特别适合需要在小程序中展示复杂内容的场景。

ooo22的博客 211

uni-app微信小程序Markdown渲染方案二选一:mp-html全能王 vs Towxml专精派,我最终选了它

本文深度评测了uni-app微信小程序中Markdown渲染的两大方案mp-html和Towxml,从功能、性能、兼容性和工程化实践多维度对比分析。针对技术文档展示、AI回复解析等场景,详细解析了代码高亮、表格渲染等核心功能差异,并给出选型决策树。最终基于纯微信小程序项目需求,选择了专精优化的Towxml方案,分享实战配置与性能优化技巧。

weixin_30301449的博客 154

Vue+UniApp打造跨端AI问答助手:流式输出与Markdown渲染实战

跨端开发是移动应用领域的高频需求,Vue与UniApp的组合能够让一套代码同时覆盖H5、微信小程序和App,显著降低多端维护成本。AI问答助手的核心体验取决于流式输出、Markdown渲染和多模态交互等关键技术的落地质量:流式输出实现打字机式的即时反馈,Markdown与公式渲染保证回答的富文本展示,多模态能力则拓展了图片、语音等自然交互方式。通过合理的架构设计与平台差异封装,开发者可以高效应对小程序端的各类兼容性挑战。本文从工程实践出发,完整复盘了基于Vue与UniApp打造沉浸式智能AI问答助手的过程,

weixin_31292729的博客 146

微信小程序AI对话性能终结者

摘要:towxml-stream-typewriter 是一个解决流式 Markdown 渲染卡顿的开源组件,支持小程序/uni-app,实现逐字打字机效果且不卡顿、不发热。通过增量复用、局部渲染和虚拟显示技术,即使处理5万或20万字长文本,也能保持稳定速度和流畅滚动。适用于AI聊天机器人等场景,提供完整Demo和跨框架支持。GitHub地址:https://github.com/zhouzxx/towxml-stream-typewriter。

qq_44261476的博客 294

UniApp打造多端AI问答助手:流式输出、Markdown渲染与多模态交互实战

在跨端应用开发中,一套代码覆盖小程序、App与H5是常见的工程诉求,而AI对话类产品更是对前端渲染与交互提出更高要求。UniApp作为基于Vue语法的跨端框架,能够有效衔接多端编译与原生能力,配合Vue 3组合式API和Pinia状态管理,可构建结构清晰、易扩展的对话应用。其核心挑战在于:流式输出需要处理SSE分帧与断线重连,Markdown渲染在小程序端需借助mp-html组件完成节点树解析,LaTeX公式则通过renderjs或降级方案实现多端适配,多模态输入则依赖图片压缩、语音转写与统一消息格式。这类

weixin_33146151的博客 184

Vue+UniApp跨端AI问答助手:Markdown渲染、流式输出与多模态实战

跨端开发是当前前端工程化的重要方向,其核心原理是通过编译链路将一套代码输出到小程序、App与H5等不同运行时,从而显著降低多端维护成本。在AI问答类应用中,前端需要同时处理Markdown渲染、数学公式展示、流式输出(SSE/轮询)以及图片语音等多模态交互,技术复杂度陡增。基于Vue3与UniApp的组合,开发者可复用Vue生态组件,并通过平台适配层统一接口差异,实现业务逻辑的高度复用。本文从实际项目出发,围绕跨端Markdown渲染、公式处理、流式请求封装与组件化设计展开,分享一套可落地的AI问答助手实现

weixin_29007243的博客 90

使用Trae开发微信小程序(智能换背景)学习

1 项目主配置文件项目主配置文件必须放到项目的根目录下,控制整个项目-.eslintrc.js:JS 格式配置文件- app.js: 小程序入口文件- app.json:小程序的全局配置文件- app.wxss:小程序的全局样式- project.config.json 小程序的配置- app.js 和 app.json 文件是必须的,不能没有# 2 页面文件小程序有一个个页面,每个页面所需的文件,都存放在 pages 目录下,一个页面一个文件夹。

GHL284271090的博客 397

【WorkBuddy专栏39】零基础也能做小程序——WorkBuddy微信小程序开发完全指南

【WorkBuddy专栏39】零基础也能做小程序——WorkBuddy微信小程序开发完全指南

AI人人懂 3199

Vue+UniApp实现沉浸式AI问答助手:跨端架构与多模态渲染实践

跨端开发框架正成为AI应用快速落地的重要载体,Vue以其响应式模型与组合式API深受开发者青睐,而UniApp在此基础上实现了H5、微信小程序与App的多端覆盖。借助同一套代码基座,开发者可以聚焦核心业务逻辑,同时通过条件编译隔离平台差异,兼顾开发效率与运行性能。在智能问答场景中,沉浸式体验依赖流式输出、Markdown公式渲染、代码高亮以及图片语音多模态输入等关键能力,这些技术点往往成为产品从原型走向商用的分水岭。本文从跨端架构设计出发,结合真实踩坑案例,拆解Vue+UniApp组合下AI问答助手的完整实

weixin_33563728的博客 249

告别Sourceforge安装器!手把手教你下载MinGW-w64离线包并配置环境变量(Windows 10/11)

本文详细介绍了如何在Windows 10/11系统上通过下载MinGW-w64离线包并配置环境变量,完全绕过Sourceforge安装器的问题。从选择正确的版本、解压到本地目录,到设置系统环境变量和验证编译环境,手把手指导开发者快速搭建稳定的GCC编译环境,解决常见的安装困扰。

weixin_30896825的博客 338
上一篇: 用AI帮忙,开发刷题小程序:从零开始,构建微信小程序答题系统
下一篇: 用AI帮忙,开发刷题小程序:软考真经微信小程序API接口文档(更新版)
明月(Alioo)
博客等级 码龄18年 267粉丝 207原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

明月(Alioo)

你的鼓励将是我创作的最大动力!

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

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

打赏作者

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

抵扣说明:

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

余额充值