当前位置: 首页 > news >正文

marked在vue项目中改变超链接跳转方式和图片放大预览

marked在vue项目中改变超链接跳转方式和图片放大预览

这里我是另起一个js文件对marked的配置做了修改,参考如下

import marked from 'marked'
let renderer = new marked.Renderer()
const linkRenderer = renderer.link
const imgRenderer = renderer.image
// 超链接使用新窗口打开
renderer.link = (href, title, text) => {const html = linkRenderer.call(renderer, href, title, text)return html.replace(/^<a /, '<a target="_blank" ')
}// marked解析过程中解析到图片的回调,为每个img标签绑定点击事件,并传递当前事件以及href图片链接
renderer.image = function (href, title, text) {const img = imgRenderer.call(renderer, href, title, text)// 在图片元素上添加点击事件处理函数return `<img width="800" height="500" οnclick="showMarkedImage('${href}')" src="${href}" alt="${text}" title="${title ? title : ''}">`
}
marked.setOptions({renderer,sanitize: false
})export default marked

然后在vue文件中进行进行该文件的引用

// vue结构
<div class="show-inputText" v-html="markedContent(form.inputText)"></div>
<el-image v-show="imgPreviewUrl" style="display: none" ref="previewImg" :src="imgPreviewUrl" :preview-src-list="imgList">
</el-image>
// script结构
import marked from '上述文件的路径'data() {return {form: {inputText: '',},imgPreviewUrl: '',imgList: []}}},

最后格式化markdown文本

init() {// 获取markdown文本中所有的图片链接this.getImgList(item.inputText)// markdown图片放大预览let _this = thiswindow.showMarkedImage = function (url) {_this.imgPreviewUrl = url_this.$nextTick(() => {_this.$refs.previewImg.showViewer = true// 需要把当前的图片放到最前面,后面排序let copyImgList = [..._this.imgList]let targetUrlIndex = copyImgList.findIndex(item => item == url)copyImgList.splice(targetUrlIndex, 1)let res = [url, ...copyImgList]_this.$refs.previewImg.previewSrcList = res_this.$refs.previewImg.src = url}, 200)},// 获取图片getImgList(inputText) {// 匹配markdown文案中所有的图片,以便后续放大预览const regex = /!\[Image\]\((.*?)\)/gconst matches = inputText.match(regex)let res = []if (matches) {for (const match of matches) {const imageUrl = match.match(/\((.*?)\)/)[1]res.push(imageUrl)}}this.imgList = res},// markdown格式化markedContent(markdownContent) {let mak = marked.marked(markdownContent)if (mak.substr(-1) == '\n') {mak = mak.slice(0, -1)}return mak},
http://www.lryc.cn/news/138757.html

相关文章:

  • leetcode485. 最大连续 1 的个数
  • linux 源代码编译
  • C语言日常刷题 1
  • es和数据库同步方案
  • 手机NFC功能是什么?
  • 零拷贝技术详解
  • 【VS Code插件开发】消息通信(四)
  • 开源硬件:下一个技术革命?
  • 开发一个npm组件包
  • 有限与无限游戏 | 真北荐书
  • 网络安全(黑客)自学剖析
  • Leetcode每日一题:1267. 统计参与通信的服务器
  • HarmonyOS开发:超详细了解项目的工程结构
  • HTML基础知识点
  • 基于CBAM-CNN卷积神经网络预测研究(Python代码实现)
  • iOS开发Swift-基本运算符
  • Flink java 工具类
  • 2023年你需要知道的最佳预算Wi-Fi路由器清单
  • Go语言基础之流程控制
  • Git 安装、配置并把项目托管到码云 Gitee
  • C++信息学奥赛1147:最高分数的学生姓名
  • STM32使用PID调速
  • 【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮
  • 无涯教程-PHP - 返回类型声明
  • DOS常见命令
  • Qt应用开发(拓展篇)——示波器/图表 QCustomPlot
  • 【精度丢失】后端接口返回的Long类型参数,不同浏览器解析出的结果不一样
  • 2023年国赛 高教社杯数学建模思路 - 案例:感知机原理剖析及实现
  • java-红黑树
  • vue2 vue中的常用指令