quill编辑器自定义音频、视频、行内style样式(字符边框、首行缩进)

news2024/9/23 11:28:59

文章目录

  • 一、音频
    • 1、自定义内容
    • 2、引入使用
  • 二、视频
    • 1、自定义内容
    • 2、引入使用
  • 三、文本添加行内style样式(文本边框)
    • 1、不带有下拉框
      • (1)自定义内容
      • (2)引入使用
    • 2、带有下拉框
      • (1)自定义内容
      • (2)引入使用
  • 四、段落添加行内style样式(首行缩进)
    • 1、不带有下拉框
      • (1)自定义内容
      • (2)引入使用(见文本添加,类同)
    • 2、带有下拉框
      • (1)自定义内容
      • (2)引入使用


一、音频

1、自定义内容

import { Quill } from 'vue-quill-editor';
const BlockEmbed = Quill.import('blots/block/embed');


// 音频
class AudioBlot extends BlockEmbed {
  static create(value) {
    console.log(value)
    const node = super.create(value);
    node.setAttribute('src', value.url);
    node.setAttribute('controls', true);
    node.setAttribute('name', value.name);
    node.setAttribute('controlsList', 'nodownload');
    return node;
  }
  // 添加value获取当前的audio元素。拿到audio元素的属性。
  static value(domNode) {
    const value = {
      url: '',
      name: '',
    };
    // 这里要加判断。不然会显示undefined
    if (domNode.getAttribute('src')) {
      value.url = domNode.getAttribute('src');
      value.name = domNode.getAttribute('name');
    }
    console.log(value)
    return value;
  }
}
AudioBlot.blotName = 'audio';
AudioBlot.tagName = 'audio';
export default { AudioBlot};

2、引入使用

引入

import blotsInfo from '../utils/audio-blot'
Quill.register(blotsInfo.AudioBlot);

将选择好的文件地址插入到编辑器中

const quill = this.$refs.myQuillEditor.quill;
// insertEmbed(index: Number(插入的位置), type: String(标签类型), value: any(参数,将传入到create的方法中去), source: String = 'api')
quill.insertEmbed(this.curCursor, 'audio', { url: this.currentMaterial });

二、视频

1、自定义内容

import { Quill } from 'vue-quill-editor';
const BlockEmbed = Quill.import('blots/block/embed');


// 视频
class VideoBlot extends BlockEmbed {
  static create(value) {
    let node = super.create(value);
    node.setAttribute('src', value.url || value);   //设置audio的src属性
    node.setAttribute('controls', true);   //设置audio的controls,否则他将不会显示
    node.setAttribute('controlsList', 'nodownload');   //设置audio的下载功能为不能下载
    node.setAttribute('id', 'videoAuto');     //设置一个id
    node.setAttribute('style', 'width:100%');     //设置一个id
    //外层套入div (不套入会产生无法删除乱起八糟的问题😀)
    let divNode = document.createElement("span");
    divNode.appendChild(node)
    if (!value.url) {
      divNode.innerHTML = divNode.innerHTML.replace('<video', '<iframe class="ql-video" frameborder="0" allowfullscreen="true"').replace('<video', '</iframe')
      divNode.getElementsByTagName('iframe')[0].style = 'width:auto'
    }
    return divNode;
  }
  // 添加value获取当前的audio元素。拿到audio元素的属性。
  static value(domNode) {
    const value = {
      url: '',
      name: '',
    };
    // 这里要加判断。不然会显示undefined
    if (domNode.getAttribute('src')) {
      value.url = domNode.getAttribute('src');
      value.name = domNode.getAttribute('name');
    }
    return value;
  }
}
VideoBlot.blotName = 'video';
VideoBlot.tagName = 'video';
export default { VideoBlot};

2、引入使用

引入

import blotsInfo from '../utils/audio-blot'
Quill.register(blotsInfo.VideoBlot);

将选择好的文件地址插入到编辑器中

const quill = this.$refs.myQuillEditor.quill;
// insertEmbed(index: Number(插入的位置), type: String(标签类型), value: any(参数,将传入到create的方法中去), source: String = 'api')
quill.insertEmbed(this.curCursor, 'video', { url: this.currentMaterial });

三、文本添加行内style样式(文本边框)

1、不带有下拉框

  • 优点:点击一下添加样式,点击一下取消样式
  • 缺点:样式比较单一,没有更多可选项

(1)自定义内容

// 自定义字符边框
const inline = Quill.import('blots/inline')

class WordBox extends inline {
  static create(value) {
    const node = super.create(value);
    //设置需要的样式
    node.setAttribute('style', 'border:1px solid #000000');
    return node;
  }
}

WordBox.blotName = 'wordBox'; //工具栏中的名字与此名字需保持一致
WordBox.tagName = 'wordBox';  //需要添加的标签名

export default { WordBox };

(2)引入使用

引入

import blotsInfo from '../utils/audio-blot'
Quill.register(blotsInfo.WordBox, true);

往工具栏中添加操作按钮(点击操作按钮即可取消或添加样式)

//工具栏
const container = [
   ['wordBox',]
]

js修改操作按钮样式

// 工具栏附件按钮
const wordBox = document.querySelector(".ql-wordBox");
wordBox.className = "ql-wordBox";
wordBox.innerHTML = "框";

2、带有下拉框

  • 优点:可设置多种样式,可选项多
  • 缺点:白名单中还需设置‘none’用于清除样式,否则无法清除

(1)自定义内容

// 自定义字符边框
var Parchment = Quill.import('parchment');

let config = {
  scope: Parchment.Scope.INLINE,
  // 会有下拉框列表
  whitelist: ['none','1px solid #000000','1px solid #f53309']
  //可设置成没有下拉框的,但会导致无法清除样式
  // whitelist: ['1px solid #000000']  
};

let WordBox = new Parchment.Attributor.Style('wordBox', 'border', config);

export default { WordBox };

(2)引入使用

引入

import blotsInfo from '../utils/audio-blot'
Quill.register(blotsInfo.WordBox, true);

往工具栏中添加操作按钮

//工具栏
const container = [
   [{wordBox: [false,'1px solid #000000','1px solid #f53309']},]
]

js修改操作按钮样式

// 工具栏附件按钮
let a = document.querySelectorAll(".ql-wordBox")[0]
let b = document.querySelectorAll(".ql-wordBox")[1]
//添加默认显示内容
let stit = document.createElement('span')
stit.innerHTML = '文本框';
stit.setAttribute('style', 'margin-right:20px;line-height: 24px;')
a.children[0].insertBefore(stit, a.children[0].children[0])

// 遍历下拉框列表添加值
let i = a.children[1].children.length
while (i) {
  i--;
  let item = a.children[1].children[i]
  item.innerHTML = item.dataset.value ? item.dataset.value.slice(item.dataset.value.indexOf('#')) : '无'
}

显示效果

在这里插入图片描述
在这里插入图片描述

四、段落添加行内style样式(首行缩进)

注意由于与文本添加的几乎相同,所以只写部分代码

1、不带有下拉框

(1)自定义内容

// 自定义首行缩进
const Block = Quill.import('blots/block')

class WordBox extends Block{
  static create(value) {
    const node = super.create(value);
    //设置需要的样式
    node.setAttribute('style', 'text-indent: 2em;');
    return node;
  }
}

WordBox.blotName = 'wordBox'; //工具栏中的名字与此名字需保持一致
WordBox.tagName = 'div';  //需要添加的标签名,p标签的话无法取消样式

export default { WordBox };

(2)引入使用(见文本添加,类同)

2、带有下拉框

  • 优点:可设置多种样式,可选项多
  • 缺点:白名单中还需设置‘none’用于清除样式,否则无法清除

(1)自定义内容

// 自定义字符边框
var Parchment = Quill.import('parchment');

let config = {
  scope: Parchment.Scope.BLOCK,
  // 会有下拉框列表
  whitelist: ['none','2em','3em']
};

let WordBox = new Parchment.Attributor.Style('wordBox', 'text-indent', config);

export default { WordBox };

(2)引入使用

往工具栏中添加操作按钮

//工具栏
const container = [
   [{wordBox: [false,'2em','3em']},]
]

js修改操作按钮样式

// 工具栏附件按钮
let a = document.querySelectorAll(".ql-wordBox")[0]
let b = document.querySelectorAll(".ql-wordBox")[1]
//添加默认显示内容
let stit = document.createElement('span')
stit.innerHTML = '首行缩进';
stit.setAttribute('style', 'margin-right:20px;line-height: 24px;')
a.children[0].insertBefore(stit, a.children[0].children[0])

// 遍历下拉框列表添加值
let i = a.children[1].children.length
while (i) {
  i--;
  let item = a.children[1].children[i]
  item.innerHTML = item.dataset.value ? item.dataset.value : '无'
}

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

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

相关文章

【SpringCloud】Nacos安装与入门

目录 一、认识与安装 1、访问 2、下载 3、解压 4、启动 5、访问 二、基本使用 1、搭建服务 2、服务注册 3、服务发现 一、认识与安装 他是阿里巴巴的产品&#xff0c;也是SpringCloud中的一个注册中心组件&#xff0c;其功能相比Eureka更丰富&#xff0c;在国内更受欢…

设计师常用的7款界面设计工具!

不同的界面设计工具都有其独特的优点和不足之处。本文为大家介绍设计师常用的7款界面设计工具&#xff1a;即时设计是一款在线UI界面设计工具&#xff0c;拥有中文界面和丰富的社区资源&#xff0c;适合初学者和专业设计师使用。Sketch具有直观的矢量编辑工具和可重复使用的符号…

Prometheus原理与二次开发

Prometheus的功能、架构、组件、配置 1 介绍 1.1 简介 Promethues是一套开源系统监控及报警框架&#xff0c;启发于Google的borgmon, 由SoundCoud员工于2012年创建&#xff0c;并于2015年正式发布,2016年正式加入Cloud Native Computing Fundation 1.2 监控目的 趋势分析&…

用递归算法删除不带头结点的单链表中值为x的值

#include<stdio.h> #include<stdlib.h> typedef struct Lnode{int data;//数据域 struct Lnode *next;//指针域 }Lnode,*LinkList; int a[5]{1,2,3,3,4}; int n5; //这里使用尾插法&#xff0c;把数据放在L中 void InitList(Lnode *L){int i;Lnode *s,*rL;//r为尾…

深度学习技巧应用14-深度学习跨框架应用,ONNX实现模型互操作性

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下&#xff0c;深度学习技巧应用14-深度学习跨框架应用&#xff0c;ONNX实现模型互操作性&#xff0c;在深度学习领域&#xff0c;有很多优秀的框架可以使用&#xff0c;例如TensorFlow、PyTorch、Caffe等。但是&…

在Qt中设置程序图标的方法介绍

在Qt中设置程序图标的方法介绍 [1] 在Qt中设置程序图标的方法介绍1 概述1&#xff09;可执行程序&#xff08;以及对应的快捷方式&#xff09;的图标2&#xff09;程序界面标题栏图标3&#xff09;程序在任务栏中的图标 2 方法2.1 创建资源文件2.2 设置标题栏图标2.3 设置可执行…

配置文件Application.properties

配置文件Application.properties 属性配置配置文件的多种格式yaml的数据格式读取yaml文件中的属性值读取yaml文件中的全部属性yaml文件 数据库的属性 属性配置 在application.properties中添加server.port端口号即可 # 服务器端口配置 server.port80# 修改banner 关闭banner …

SpringBoot项目----图书管理系统(详解)

目录 项目业务 技术栈 数据库表的设计 数据库表关系图 关于字典表 前后端接口实现 1.初始化数据库、表、数据 2.数据库连接池配置 3.统一响应封装 4.统一异常处理 5.实现统一会话管理&#xff08;登录&#xff09; 5.通过Mybatis生成工具&#xff0c;生成mapper接…

【大数据之Hadoop】二十九、HDFS存储优化

纠删码和异构存储测试需要5台虚拟机。准备另外一套5台服务器集群。 环境准备&#xff1a; &#xff08;1&#xff09;克隆hadoop105为hadoop106&#xff0c;修改ip地址和hostname&#xff0c;然后重启。 vim /etc/sysconfig/network-scripts/ifcfg-ens33 vim /etc/hostname r…

JVET-AD0081:一种基于外推滤波器的帧内预测模式

本提案提出了一种基于外推滤波器的帧内预测&#xff08;extrapolation filter-based Intra Prediction&#xff0c;EIP&#xff09;模式。首先&#xff0c;利用预定模板从当前块的相邻重建像素获得外推滤波器系数。然后&#xff0c;在当前块内从左上到右下逐位置地处理外推&…

Linux常用命令(3)

文章目录 Linux常用命令&#xff08;3&#xff09;显示文件显示文件内容分屏显示文件内容显示文件前n行&#xff08;默认缺省10行&#xff09;内容显示文件后n行&#xff08;默认缺省10行&#xff09;内容随文件的增长而显示 Linux常用命令&#xff08;3&#xff09; 按ctrlsh…

open3d教程(一):open3d的安装和测试

1 介绍 Open3d&#xff1a;用于3D数据处理的现代库。 Open3D 是一个开源库&#xff0c;支持快速开发处理 3D 数据的软件。 Open3D 前端在 C 和 Python 中公开了一组精心挑选的数据结构和算法。后端经过高度优化&#xff0c;并设置为并行化。我们欢迎来自开源社区的贡献。 2 …

【零基础学机器学习 1】什么是机器学习?

机器学习的社会应用 1. 金融风控 机器学习在金融风控方面的应用非常广泛&#xff0c;可以用于预测借款人的信用风险、欺诈行为等。通过收集大量的历史数据&#xff0c;构建机器学习模型&#xff0c;可以对借款人的信用风险进行预测&#xff0c;从而帮助金融机构降低风险。 2…

关于ADC的笔记1

ADC&#xff0c;全称Anlog-to-Digital Converter&#xff0c;模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件&#xff0c;我们能通过ADC将外界的电压值读入我们的单片机中. 常见的ADC有两种 1.并联比较型&#xff1a; 它的优点是转换速度最快&#x…

[MYSQL / Mariadb]数据库学习-数据类型

数据库学习-数据类型 数据类型字符类型定长char例&#xff1a;定义表结构的定长&#xff1a; 变长 varchar例&#xff1a;创建表&#xff0c;定义变长练习字符类型 数值类型整数(tinyint, smallint, mediumint, int, bigint, unsigned)以mysql> desc mysql.user; 为例例&…

Leetcode697. 数组的度

Every day a leetcode 题目来源&#xff1a;697. 数组的度 解法1&#xff1a;哈希 我们这样构建哈希表 unordered_map<int, vector> umap&#xff1a; key&#xff1a;数组元素 nums[i]value&#xff1a;三元组[count, first, last]&#xff0c;分别代表元素 nums[i]…

Spring03--Spring基于注解的AOP、Spring事务

Spring基于注解的AOP 一、基于注解的AOP介绍 AOP注解方式 和 XML方式完成的功能是一样&#xff0c;只是采用方式不同而已。将原有的XML方式使用注解注意替代 二、环境搭建 使用Spring02中Spring基于配置文件的AOP的环境搭建 三、使用注解替换XML的配置步骤 1、通知类使用…

边缘化你必须知道的一件事!(FEJ知识点总结)

vins和g2o边缘化的异同&#xff1a;(已经做到ppt里面了&#xff0c;简单回顾一下) 1.《视觉slam14讲》中提及的边缘化(G2O边缘化)是在计算求解过程中&#xff0c;先消去路标点变量&#xff0c;实现先求解相机位姿&#xff0c;然后再利用求解出来的相机位姿反过来计算路标点的过…

qt creator添加build步骤删除某个文件

参考&#xff1a;https://blog.csdn.net/weixin_44436546/article/details/113587115 1. windows下配置&#xff1a; 添加build步骤&#xff1b;在commad栏输入cmd,会弹出C:\Windows\system32\cmd.exe&#xff1b;在Arguments栏输入/c release\upgrade.o&#xff1b;Working …

【数据结构】C语言实现双向链表(带头结点、循环)

C语言实现双向链表&#xff08;带头结点、循环&#xff09; 一、带头结点的循环双向链表二、结点与接口定义三、实现3.1 申请节点3.2 初始化3.3 打印3.4 尾插3.5 头插3.6 尾删3.7 判断链表为空断言3.8 头删3.9 查找find3.10 插入insert-在pos之前插入3.11 头插尾插复用insert3.…