html纯原生网页引入vue3版本的quill editor

 效果图

版本

@vueup/vue-quill v1.2.0
 vue3.3.8
 Element Plus v2.4.2

引入流程

找一个vue3的项目, 然后安装插件vue版本的quill: vue-quill

npm install @vueup/vue-quill --save

官方地址:https://vueup.github.io/vue-quill/

安装完成之后,把vue-quil插件下dist目录拷贝到原生html同目录下,dist目录名改成: vue-quill

调用此插件参考vue3项目方式

import { QuillEditor } from '@vueup/vue-quill'
import '@vueup/vue-quill/dist/vue-quill.snow.css';
 
instance = createApp(App);
instance.component('QuillEditor', QuillEditor)

案例源码 editor.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <!-- import Vue before Element -->
  <!--
      vue3 vue-quill editor可用,vue
      -->
  <script src="../vue3-原生html练习/js/vue3.3.8/vue.global.js"></script>
  <link rel="stylesheet" href="../vue3-原生html练习/js/elementPlus/index.css">
  <script src="../vue3-原生html练习/js/elementPlus/index.full.js"></script>
  <title>我是富文本 vue3</title>
  <style>
    .editor {
      width: 100%;
    }
    .ql-editor {
      min-height: 300px;
    }
  </style>
  <link rel="stylesheet" href="./js/vue-quill/vue-quill.snow.css">
  <script src="./js/vue-quill/vue-quill.global.js"></script>
</head>
<body>
<div id="app">
  <h3 style="width: 100%;text-align: center">{{ message }}</h3>
  <el-progress type="circle" :percentage="20"></el-progress>

  <!--  富文本编辑器 vue-->
  <div class="editor" style="background-color: #bfc;margin-top: 30px">
    <quill-editor ref="editorRef" v-model:content="content" :options="options" contentType="html"></quill-editor>
  </div>
</div>
</body>


<script type="module">
  const {createApp, ref, reactive, watch, toRaw} = Vue
  const _app = createApp({
    setup() {
      const message = ref('富文本编辑器VUe3!')
      const content = ref("9999999")
      const editorRef = ref()
      const articleModel = reactive({
        content: "99999"
      })
// 处理富文本图片上传
      const imageHandler = () => {// 创建一个文件输入元素
        const input = document.createElement('input');
        input.setAttribute('type', 'file');
        input.setAttribute('accept', 'image/*');
        // 模拟点击,打开文件选择对话框
        input.click();
        // 当用户选择文件后触发的事件
        input.onchange = async () => {
          // 获取用户选择的文件
          const file = input.files ? input.files[0] : null;
          if (file) {
            // 创建一个 FormData 对象,用于文件上传
            const formData = new FormData();
            formData.append('file', file);
            try {
              // 使用 axios 发送 POST 请求,将文件上传到服务器
              const response = await axios.post("filesApi.url()", formData, {headers: {'Content-Type': 'multipart/form-data'}});

              // 确保获取到 Quill 编辑器实例
              const quill = toRaw(editorRef.value).getQuill()
              if (quill) {
                // 获取当前光标位置
                const range = quill.getSelection(true);
                // 在当前光标位置插入上传的图片
                quill.insertEmbed(range.index, 'image', response.data.data);
              }
            } catch (error) {
              toast("图片上传失败,请配置图片服务url");
            }
          }
        };
      }

      let options = {
        modules: {
          toolbar: {
            container: [
              ['bold', 'italic', 'underline', 'strike'], // 加粗 斜体 下划线 删除线
              [{color: []}, {background: []}], // 字体颜色、字体背景颜色
              [{align: []}], // 对齐方式
              [{size: ['small', false, 'large', 'huge']}], // 字体大小
              [{font: []}], // 字体种类
              [{header: [1, 2, 3, 4, 5, 6, false]}], // 标题
              // [{ direction: 'ltl' }], // 文本方向
              // [{ direction: 'rtl' }], // 文本方向
              [{indent: '-1'}, {indent: '+1'}], // 缩进
              [{list: 'ordered'}, {list: 'bullet'}], // 有序、无序列表
              [{script: 'sub'}, {script: 'super'}], // 上标/下标
              ['blockquote', 'code-block'], // 引用  代码块
              ['clean'], // 清除文本格式
              ['link', 'image', 'video'], // 链接、图片、视频
            ],
            handlers: {
              image: imageHandler,
            },
          },
        }
      }
      const titleConfig = [// toolbar标题
        {Choice: '.ql-insertMetric', title: '跳转配置'},
        {Choice: '.ql-bold', title: '加粗'},
        {Choice: '.ql-italic', title: '斜体'},
        {Choice: '.ql-underline', title: '下划线'},
        {Choice: '.ql-header', title: '段落格式'},
        {Choice: '.ql-strike', title: '删除线'},
        {Choice: '.ql-blockquote', title: '块引用'},
        {Choice: '.ql-code', title: '插入代码'},
        {Choice: '.ql-code-block', title: '插入代码段'},
        {Choice: '.ql-font', title: '字体'},
        {Choice: '.ql-size', title: '字体大小'},
        {Choice: '.ql-list[value="ordered"]', title: '编号列表'},
        {Choice: '.ql-list[value="bullet"]', title: '项目列表'},
        {Choice: '.ql-direction', title: '文本方向'},
        {Choice: '.ql-header[value="1"]', title: 'h1'},
        {Choice: '.ql-header[value="2"]', title: 'h2'},
        {Choice: '.ql-align', title: '对齐方式'},
        {Choice: '.ql-color', title: '字体颜色'},
        {Choice: '.ql-background', title: '背景颜色'},
        {Choice: '.ql-image', title: '图像'},
        {Choice: '.ql-video', title: '视频'},
        {Choice: '.ql-link', title: '添加链接'},
        {Choice: '.ql-formula', title: '插入公式'},
        {Choice: '.ql-clean', title: '清除字体格式'},
        {Choice: '.ql-script[value="sub"]', title: '下标'},
        {Choice: '.ql-script[value="super"]', title: '上标'},
        {Choice: '.ql-indent[value="-1"]', title: '向左缩进'},
        {Choice: '.ql-indent[value="+1"]', title: '向右缩进'},
        {Choice: '.ql-header .ql-picker-label', title: '标题大小'},
        {Choice: '.ql-header .ql-picker-item[data-value="1"]', title: '标题一'},
        {Choice: '.ql-header .ql-picker-item[data-value="2"]', title: '标题二'},
        {Choice: '.ql-header .ql-picker-item[data-value="3"]', title: '标题三'},
        {Choice: '.ql-header .ql-picker-item[data-value="4"]', title: '标题四'},
        {Choice: '.ql-header .ql-picker-item[data-value="5"]', title: '标题五'},
        {Choice: '.ql-header .ql-picker-item[data-value="6"]', title: '标题六'},
        {Choice: '.ql-header .ql-picker-item:last-child', title: '标准'},
        {Choice: '.ql-size .ql-picker-item[data-value="small"]', title: '小号'},
        {Choice: '.ql-size .ql-picker-item[data-value="large"]', title: '大号'},
        {Choice: '.ql-size .ql-picker-item[data-value="huge"]', title: '超大号'},
        {Choice: '.ql-size .ql-picker-item:nth-child(2)', title: '标准'},
        {Choice: '.ql-align .ql-picker-item:first-child', title: '居左对齐'},
        {Choice: '.ql-align .ql-picker-item[data-value="center"]', title: '居中对齐'},
        {Choice: '.ql-align .ql-picker-item[data-value="right"]', title: '居右对齐'},
        {Choice: '.ql-align .ql-picker-item[data-value="justify"]', title: '两端对齐'}
      ]

// 给富文本框工具栏加上鼠标悬浮中文提示
      const initTitle = () => {
        for (let item of titleConfig) {
          // .editor 是富文本编辑器的类名
          let tip = document.querySelector('.editor ' + item.Choice);
          if (tip) {
            tip.setAttribute('title', item.title);
          }
        }
      }
      const toast = (message, type = 'warning', fn = null) => {
        ElementPlus.ElMessage({
          message,
          type
        })
      }
      return {
        toast,
        message, content, editorRef, options, imageHandler, articleModel, initTitle
      }
    },
    mounted() {
      this.initTitle();
    },
  })

  _app.use(ElementPlus)
  _app.component('QuillEditor', VueQuill.QuillEditor);
  const vm = _app.mount('#app')
</script>
</html>

参考html引入vue3,element

jQuery 老项目引入vue,elementui (vue3+elementplus)_vue3 jquery-CSDN博客

案例全部源码项目

htmlVue3QuillDemo: VUE3-Quill 引入到原生html的演示案例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/756334.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++中的数据结构

一.STL标准库 结构:STL中有六大组件&#xff0c;分别是&#xff1a;容器&#xff0c;算法&#xff0c;迭代器&#xff0c;仿函数&#xff0c;配接器&#xff0c;配置器&#xff1b;以下分别介绍这六大组件中的最主要的三个。 1.容器 容器来配置存储空间&#xff0c;算法通过…

CSS的 text-decoration

text-decoration text-decoration CSS 简写属性设置文本上的装饰性线条的外观。它是 text-decoration-line、text-decoration-color、text-decoration-style 和较新的 text-decoration-thickness 属性的缩写。 MDN text-decoration text-decoration 可以设置1到4个参数, 允许…

海康车牌识别 报警回调后程序崩溃

我用的32位 6.1.9版本SDK 回调会导致程序崩溃 咨询了下海康官方技术 答复如下&#xff1a;&#xff08;此答复我没尝试 自行尝试 我的解决方法是更换了老版本 5.3版本 没什么问题 个人资源中有 自行下载

计算机毕业设计hadoop+spark+hive知识图谱酒店推荐系统 酒店数据分析可视化大屏 酒店爬虫 高德地图API 酒店预测系统 大数据毕业设计

酒店推荐系统开题报告 一、研究背景与意义 随着旅游业的蓬勃发展和人们生活水平的提高&#xff0c;酒店行业迎来了前所未有的发展机遇。然而&#xff0c;面对众多的酒店选择&#xff0c;消费者往往难以在短时间内找到最适合自己需求和预算的酒店。因此&#xff0c;开发一款高…

ChatGPT之母:AI自动化将取代人类,创意性工作或将消失

目录 01 AI取代创意性工作的担忧 1.1 CTO说了啥 02 AI已开始大范围取代人类 01 AI取代创意性工作的担忧 几天前的采访中&#xff0c;OpenAI的CTO直言&#xff0c;AI可能会扼杀一些本来不应该存在的创意性工作。 近来一篇报道更是印证了这一观点。国外科技媒体的老板Miller用…

show-overflow-tooltip 解决elementui el-table标签自动换行的问题

elementui中 el-table中某一行的高度不想因为宽度不够而撑开换行展示的解决方法。可通过show-overflow-tooltip属性解决&#xff0c;如下 代码是这样的 <el-table-column width"80" prop"id" label"ID"></el-table-column> <el…

每日一题——Python实现PAT乙级1072 开学寄语(举一反三+思想解读+逐步优化)五千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 代码点评 时间复杂度分析 空间复杂度分析 总结 我要更强 优化建议 优…

百度ueditor如何修改图片的保存位置

背景 编辑器的保存图片是设置有默认规则的&#xff0c;但是服务器上一般会把图片路径设置为软连接&#xff0c;所以我就需要更改编辑器保存图片的路径&#xff0c;要不然&#xff0c;每次有新的部署&#xff0c;上一次上传的图片就会失效。先来看看编辑器默认的保存路径吧&…

二进制方式部署consul单机版

1.consul的下载 mkdir -p /root/consul/data && cd /root/consul wget https://releases.hashicorp.com/consul/1.18.0/consul_1.18.0_linux_amd64.zip unzip consul_1.18.0_linux_amd64.zip mv consul /usr/local/bin/ 2.配置文件 // 配置文件路径&#xff1a; /roo…

[算法]——堆排序(C语言实现)

简单的介绍一下用堆排序的算法对整形数据的数据进行排序。 一、堆的概念 堆是具有下列性质的完全二叉树&#xff1a;每个结点的值都大于或等于其左右孩子节点的值&#xff0c;称为大顶堆&#xff1b;或者每个结点的值都小于或等于其左右孩子结点的值&#xff0c;称为小顶堆。 …

第二十一课,列表的操作函数

一&#xff0c;len(列表):求列表的长度 当你需要知道一个列表中含有多少个元素时&#xff0c;可以使用len()函数&#xff0c;将列表的变量名放入len()函数的括号中&#xff0c;它将告诉你这个列表中有多少个元素&#xff0c;也就是它的长度&#xff01; 需要注意的是&#xf…

安装OpenHarmony编译库和工具集

一、搭建开发环境 1.1、Ubuntu搭建&#xff0c;参考 VMware完美安装Ubuntu20.04-CSDN博客文章浏览阅读286次&#xff0c;点赞5次&#xff0c;收藏3次。详细介绍了VMware下安装Ubuntu20.04https://blog.csdn.net/longyuzi/article/details/139935769 1.2、拉取OpenHarmony源码…

实现自动化:如何利用阿里云OSS上传文件并自动打标签

在当前数字化时代&#xff0c;数据管理变得愈发重要&#xff0c;特别是对于需要大规模存储和管理文件的场景。阿里云对象存储服务&#xff08;OSS&#xff09;作为业界领先的解决方案&#xff0c;不仅提供了稳定可靠的云存储&#xff0c;还支持丰富的扩展功能&#xff0c;如文件…

每日一道算法题 面试题 08.08. 有重复字符串的排列组合

题目 面试题 08.08. 有重复字符串的排列组合 - 力扣&#xff08;LeetCode&#xff09; Python class Solution:def permutation(self, S: str) -> List[str]:# 以索引记录字符是否用过lelen(S)idx[_ for _ in range(le) ]# 组合得到的字符串combine[]*leans[]# 递归def fu…

LLM探索:环境搭建与模型本地部署

前言 最近一直在炼丹&#xff08;搞AIGC这块&#xff09;&#xff0c;突然发现业务代码都索然无味了… 上次发了篇AI画图的文章&#xff0c;ChatGPT虽然没法自己部署&#xff0c;但现在开源的LLM还是不少的&#xff0c;只要有一块差不多的显卡&#xff0c;要搞个LLM本地部署还…

安卓应用开发学习:获取经纬度及地理位置描述信息

前段时间&#xff0c;我在学习鸿蒙应用开发的过程中&#xff0c;在鸿蒙系统的手机上实现了获取经纬度及地理位置描述信息&#xff08;鸿蒙应用开发学习&#xff1a;手机位置信息进阶&#xff0c;从经纬度数据获取地理位置描述信息&#xff09;。反而学习时间更长的安卓应用开发…

基于知识图谱的医药问答系统实战

数据及代码地址见文末 1.项目配置 (1)Neo4j数据库安装 JDK 安装:https://www.oracle.com/java/technologies/javase-downloads.html Neo4j 安装:https://neo4j.com/download-center/ 配置好 JDK 和 Neo4j 的环境变量 启动:neo4j.bat console 第一次启动有默认用户名和密…

《昇思25天学习打卡营第3天|张量 Tensor》

文章目录 前言&#xff1a;今日所学&#xff1a;1. 创建张量2. 张量的属性3.张量索引与运算4. NumPy与Tensor的转换5. 稀疏张量 前言&#xff1a; 张量&#xff1f;张亮&#xff1f;张量是什么&#xff1f; 张量是一个可以用来表示在一些矢量、标量和其他张量之间的线性关系的…

逆风而行:提升逆商,让困难成为你前进的动力

一、引言 生活&#xff0c;总是充满了未知与变数。有时&#xff0c;我们会遇到阳光明媚的日子&#xff0c;享受着宁静与和谐&#xff1b;但更多时候&#xff0c;我们却不得不面对那些突如其来的坏事件&#xff0c;如工作的挫折、人际关系的困扰、健康的挑战等。这些事件如同突…

每日一题——Python实现PAT乙级1059 C语言竞赛(举一反三+思想解读+逐步优化)四千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 时间复杂度分析 空间复杂度分析 代码优化建议 总结 我要更强 优化方法…