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

 效果图

版本

@vueup/vue-quill v1.2.0vue3.3.8Element 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} = Vueconst _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的演示案例

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解开孤独症谱系障碍:原因与症状的深度洞察

孤独症谱系障碍&#xff0c;这个日益受到关注的话题&#xff0c;让许多人感到困惑和担忧。那么&#xff0c;它究竟是由什么原因引起的&#xff0c;又有哪些表现症状呢&#xff1f; 引起孤独症谱系障碍的原因目前尚未完全明确&#xff0c;但研究表明&#xff0c;可能与以下因素有…

ROS2使用Python创建服务提供者、消费者

1.创建服务提供者 ros2 pkg create example_service_rclpy --build-type ament_python --dependencies rclpy example_interfaces --node-name service_server_02 service_server_02.py 代码 #!/usr/bin/env python3 import rclpy from rclpy.node import Node # 导入接口 …

量产工具一一显示系统(一)

目录 前言 一、项目介绍和应用 1.简单易用 2.软件可配置、易扩展 3.纯 C 语言编程 4.类似界面应用 二、项目总体框架 三、显示系统 1.显示系统数据结构抽象 &#xff08;1&#xff09;common.h &#xff08;2&#xff09;disp_manager.h 2.Framebuffer编程 &#x…

Unity数据持久化3——Json

概述 基础知识 Json文件格式 Json基本语法 练习 可以搜索&#xff1a;Json在线&#xff0c;复制代码进去解析是否写错了。 Excel转Json C#读取存储Json文件 JsonUtility using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine;[Sy…

AI周报(6.23-6.29)

AI应用-巴西医生成功用Vision Pro做手术 巴西外科医生布鲁诺戈巴托&#xff08;Bruno Gobbato&#xff09;在2024年4月22日首次成功使用Apple Vision Pro进行了肩袖撕裂的手术。这次手术采用了肩关节镜技术&#xff0c;通过关节内的摄像头捕捉图像&#xff0c;并通过高分辨率的…

基于Spring Boot的校园失物招领系统

1 项目介绍 1.1 研究的背景及意义 在网络时代飞速发展的今天&#xff0c;随着网络技术日臻完善&#xff0c;我们的生活方式正经历深刻变革。在物质追求日益增长的同时&#xff0c;提升个人精神境界也成为了现代人的共同向往&#xff0c;而阅读则是滋养心灵、丰富精神世界的重…

PyScript:在浏览器中释放Python的强大

PyScript&#xff1a;Python代码&#xff0c;直接在网页上运行。- 精选真开源&#xff0c;释放新价值。 概览 PyScript是一个创新的框架&#xff0c;它打破了传统编程环境的界限&#xff0c;允许开发者直接在浏览器中使用Python语言来创建丰富的网络应用。结合了HTML界面、Pyo…

WLAN 4-Way Handshake如何生成GTK?

关于Wi-Fi的加密认证过程&#xff0c;可以参考如下链接&#xff0c;今天我们来理解如何生成GTK。 WLAN数据加密机制_tls加密wifi-CSDN博客 1 GTK GTK&#xff08;Group Temporal Key&#xff09;是由AP通过GMK生成&#xff0c;长度为128位&#xff0c;并在四次握手的第三步中…

使用Netty框架实现WebSocket服务端与客户端通信(附ssl)

仓库地址&#xff1a; https://gitee.com/lfw1024/netty-websocket 导入后可直接运行 预览页面 自签证书&#xff1a; #换成自己的本地ip keytool -genkey -alias server -keyalg RSA -validity 3650 -keystore D:\mystore.jks -ext sanip:192.168.3.7,ip:127.0.0.1,dns:lo…

【STM32修改串口波特率】

STM32微控制器中的串口波特率调整通常涉及到USART&#xff08;通用同步接收器/发送器&#xff09;模块的配置。USART模块提供了多个寄存器来设置波特率&#xff0c;其中关键的寄存器包括BRR&#xff08;波特率寄存器&#xff09;和USART_CR1&#xff08;控制寄存器1&#xff09…

【云原生】加强理解Pod资源控制器

Pod控制器 文章目录 Pod控制器一、Replication Controller&#xff08;RC&#xff09;1.1、什么是RC1.2、RC应用1.3、RC滚动更新 二、Replication Set&#xff08;RS&#xff09;2.1、什么是RS2.2、RS应用 三、Deployment3.1、什么是Deployment3.2、更新节奏和更新逻辑3.3、自定…

uniapp - 微信小程序 - 自定义底部tabbar

废话不多说&#xff0c;直接行源码 这里需要的底部tabbar的图片在这里 我的资源里面呢 图片是这样的 先看成品吧 首先 - BaseApp\components\Tabbar.vue <script setup>import {ref,nextTick,watch} from "vue"// 核心 - 隐藏uniapp自带的底部tabbaruni.hi…

【机器学习】基于层次的聚类方法:理论与实践

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 基于层次的聚类方法&#xff1a;理论与实践引言1. 层次聚类基础1.1 概述1.2 距离…

python-斐波那契数列

[题目描述] 斐波那契数列是指这样的数列&#xff1a;数列的第一个和第二个数都为 1&#xff0c;接下来每个数都等于前面 2个数之和。 给出一个正整数 a&#xff0c;要求斐波那契数列中第 a 个数是多少。输入&#xff1a; 第 1 行是测试数据的组数 n&#xff0c;后面跟着 n 行输…

【密码学】面向小白的古典密码基础入门笔记

目录 Mindmap 前言 破译方法 三类古典密码 替换密码 分类 单表替换密码 凯撒密码 简单替换密码 仿射密码 普莱费尔密码 培根密码 猪圈密码 摩斯密码 多表替换密码 维吉尼亚密码 移位密码 滚筒密码 栅栏密码 Mindmap 前言 1.所有古典密码都已不安全 2.密…

Github忘记了Two-factor Authentication code

意外重置了edge浏览器 码农家园github自从开启开启了2FA认证&#xff0c;每次输入auth code确实麻烦&#xff0c;于是下载了浏览器插件 Open two factor authenticator&#xff0c; 最近edge频繁宕机&#xff0c;而且提示磁盘空间不足&#xff0c;要不要立即清理并重置浏览器临…

【python】socket通信代码解析

目录 一、socket通信原理 1.1 服务器端 1.2 客户端 二、socket通信主要应用场景 2.1 简单的服务器和客户端通信 2.2 并发服务器 2.3 UDP通信 2.4 文件传输 2.5 HTTP服务器 2.6 邮件发送与接收 2.7 FTP客户端 2.8 P2P文件共享 2.9 网络游戏 三、python中Socket编…

Mathematica训练课(45)-- 一些常用的函数Abs[],Max[]等函数用法

①绝对值函数&#xff1a;Abs[]函数 ②最大值和最小值函数 ③反函数

微信小程序服务器从腾讯云迁移到阿里云出现的坑

微信小程序服务器从腾讯云迁移到阿里云出现的坑 背景 原先小程序后台服务器到期&#xff0c;因为之前买的是腾讯云新用户&#xff0c;便宜&#xff0c;到期后续费金额懂的都懂。就在阿里云用新用户买了个新的&#xff0c;遂把服务全转到了阿里云服务器上。 此时&#xff0c;域…

Spring Boot结合FFmpeg实现视频会议系统视频流处理与优化

在构建高效稳定的视频会议系统时,实时视频流的处理和优化是开发者面临的核心挑战之一。这不仅仅是简单的视频数据传输,更涉及到一系列复杂的技术问题,需要我们深入分析和有效解决。 高并发与实时性要求: 视频会议系统通常需要支持多人同时进行视频通话,这就意味着系统需要…