在Vue项目中vue-quill-editor的安装与使用【详细图解+过程+包含图片的缩放拖拽】

简介: 文章详细介绍了在Vue项目中安装和使用`vue-quill-editor`的步骤,包括如何通过npm安装、局部挂载、在Vue页面中引入和配置使用。同时,还提供了如何实现图片的缩放和拖拽功能的进阶教程,涉及到安装额外的插件`quill-image-drop-module`和`quill-image-resize-module`,以及对Webpack配置的调整。最后,文章还提供了实际效果展示和一些后续可能的拓展功能,如上传视频和将图片上传到服务器等。

Quill 官网:https://quilljs.com//

一、Quill的安装与使用(初级)

1、下载安装

npm install vue-quill-editor --save
    这里建议使用管理员命令窗口的形式,找到自己的项目,如下图所示。然后进行安装(目的:避免权限不足导致的下载失败)

在这里插入图片描述

2、挂载(局部挂载)

    在某个vue页面中引入,。不进行全局引入。我这里采用的是部分页面引入的形式
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'

import { quillEditor, Quill } from 'vue-quill-editor' //引入插件

export default {
  components: {
    quillEditor
  }
   **提示**:如果想要全局引入、就在main.js中引入就行。(如果极个别页面使用的情况下,直接在单独页面引入就可以了)
import VueQuillEditor from 'vue-quill-editor'
// 引入相关css
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'

Vue.use(VueQuillEditor);

3、模块使用(quill富文本编辑器)

// html文件
<quill-editor
        class="ql-editor"
        v-model="content"
        ref="myQuillEditor"
        :options="editorOption"
        @blur="onEditorBlur($event)" 
        @focus="onEditorFocus($event)"
        @change="onEditorChange($event)">
</quill-editor>

// 插件引入
import { quillEditor } from 'vue-quill-editor'
-------------------------------------------
components: {
    quillEditor
},

// 事件方法
onEditorBlur(e){
  console.log(e, '失去焦点事件');
},
onEditorFocus(e){
  console.log(e, '获得焦点事件');
},
onEditorChange(e){
  console.log(e, '内容改变事件');
},


// 富文本功能配置
editorOption:{
  modules:{
    toolbar:[
        ['bold', 'italic', 'underline', 'strike'],    //加粗,斜体,下划线,删除线
        ['blockquote', 'code-block'],     //引用,代码块
        [{ 'header': 1 }, { 'header': 2 }],        // 标题,键值对的形式;1、2表示字体大小
        [{ 'list': 'ordered'}, { 'list': 'bullet' }],     //列表
        [{ 'script': 'sub'}, { 'script': 'super' }],   // 上下标
        [{ 'indent': '-1'}, { 'indent': '+1' }],     // 缩进
        [{ 'direction': 'rtl' }],             // 文本方向
        [{ 'size': ['small', false, 'large', 'huge'] }], // 字体大小
        [{ 'header': [1, 2, 3, 4, 5, 6, false] }],     //几级标题
        [{ 'color': [] }, { 'background': [] }],     // 字体颜色,字体背景颜色
        [{ 'font': [] }],     //字体
        [{ 'align': [] }],    //对齐方式
        ['clean'],    //清除字体样式
        ['image','video']    //上传图片、上传视频
        ]
      }
},

实战案例代码(如果看上边的实在不知道放置的位置,就看一下下方的例子。这个案例,可以跳过)

<template>
  <div class="myMain">
    <div>
      <div class="table-title">公告信息</div>
    </div>
    <div class="row">
      <div style="margin-top: 20px">
        <div style="border: 1px solid #c9c9c9">
          <div class="panel-heading">公告信息表</div>
          <div class="panel-body">
            <div style="width: 100%">
              <div class="nx-table-header" style="">
                <div style="float: left; margin-bottom: 10px">
                  <el-button
                    type="primary"
                    size="small"
                    round
                    @click="addNewTypeInfo()"
                    >添加</el-button
                  >
                </div>
                <div
                  style="float: left; margin-bottom: 10px; margin-left: 10px"
                ></div>
              </div>
              <div>
                <!--    ====================================添加公告信息====================================-->
                <el-dialog
                  title="添加公告信息"
                  :visible.sync="adddialogVisible"
                  width="40%"
                  @close="closeDialog"
                >
                  <hr />
                  <div style="height: 425px; overflow: auto">
                    <quill-editor
                      ref="myQuillEditor"
                      v-model="content"
                      :options="editorOption"
                      @blur="onEditorBlur($event)"
                      @focus="onEditorFocus($event)"
                      @change="onEditorChange($event)"
                      style="height: 400px"
                    />
                  </div>

                  <hr />
                  <span slot="footer" class="dialog-footer">
                    <el-button @click="adddialogVisible = false"
                      >取 消</el-button
                    >
                    <el-button
                      type="primary"
                      round
                      @click="submitForm('TypeInfoForm')"
                      >确 定</el-button
                    >
                  </span>
                </el-dialog>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
import "quill/dist/quill.core.css";
import "quill/dist/quill.snow.css";
import "quill/dist/quill.bubble.css";

import { quillEditor, Quill } from "vue-quill-editor";

export default {
  components: {
    quillEditor,
  },
  data() {
    return {
      content: "<h2>I am Example</h2>",
      editorOption: {
        modules: {
          toolbar: [
            ["bold", "italic", "underline", "strike"], //加粗,斜体,下划线,删除线
            ["blockquote", "code-block"], //引用,代码块
            [{ header: 1 }, { header: 2 }], // 标题,键值对的形式;1、2表示字体大小
            [{ list: "ordered" }, { list: "bullet" }], //列表
            [{ script: "sub" }, { script: "super" }], // 上下标
            [{ indent: "-1" }, { indent: "+1" }], // 缩进
            [{ direction: "rtl" }], // 文本方向
            [{ size: ["small", false, "large", "huge"] }], // 字体大小
            [{ header: [1, 2, 3, 4, 5, 6, false] }], //几级标题
            [{ color: [] }, { background: [] }], // 字体颜色,字体背景颜色
            [{ font: [] }], //字体
            [{ align: [] }], //对齐方式
            ["clean"], //清除字体样式
            ["image", "video"], //上传图片、上传视频
          ],
          },
        },
      },
      adddialogVisible: false,
    };
  },
  methods: {
    onEditorBlur(quill) {
      console.log("editor blur!", quill);
    },
    onEditorFocus(quill) {
      console.log("editor focus!", quill);
    },
    onEditorReady(quill) {
      console.log("editor ready!", quill);
    },
    onEditorChange({ quill, html, text }) {
      console.log("editor change!", quill, html, text);
      this.content = html;
    },

    //添加公告信息窗口
    addNewTypeInfo() {
      this.adddialogVisible = true;
    },
  },
  computed: {
    editor() {
      return this.$refs.myQuillEditor.quill;
    },
  },
  created() {
    this.showAllUserInfo();
  },
};
</script>

4、实际效果展示

  工具栏中的工具可以使用,图片上传也可以使用,不过上传的图片大小不能改变。向下方图片所示,图片太大了。  

在这里插入图片描述

二、图片缩放(进阶)

  vue-quill-editor的两个插件:`quill-image-drop-module` 和`quill-image-resize-module` 可以帮助实现上传图片的缩放和拖拽功能。

1、下载安装

npm install quill-image-drop-module -S    //允许粘贴图像并将其拖放到编辑器中。
npm install quill-image-resize-module -S  //允许调整图像大小

2、修改配置

2.1 vue2中配置文件修改

build/webpack.base.conf.js添加, 然后配置下面的代码:

  • 1、const webpack = require('webpack')

  • 2、在js规则中添加exclude

module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules(?!\/quill-image-drop-module|quill-image-resize-module)/,
        loader: 'babel-loader',
        include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
      },
    ]
  }

3、插件设置

plugins: [
    new webpack.ProvidePlugin({
      'window.Quill': 'quill'
    })
  ],

具体位置如下图所示,

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

2.2 vue3中配置文件修改

// vue cli3.0用法
chainWebpack: (config) => {
    config.plugin('provide').use(webpack.ProvidePlugin,[{
        'window.Quill': 'quill/dist/quill.js',
        'Quill': 'quill/dist/quill.js'
    }])
}

3、js引入增加新的引入

// imageResize  首字母必须小写否则会报错,错误语如下
// quill Cannot import ImageResize. Are you sure it was registered?
import imageResize  from 'quill-image-resize-module'
Quill.register('modules/imageResize', imageResize )
import { ImageDrop } from 'quill-image-drop-module'
Quill.register('modules/imageDrop', ImageDrop)

在这里插入图片描述

4、修改editorOption里面配置

editorOption: {
    modules: {
        // 新增下面
        imageDrop: true, // 拖动加载图片组件。
        imageResize: { //调整大小组件。
            displayStyles: {
                backgroundColor: 'black',
                border: 'none',
                color: 'white'
            },
            modules: [ 'Resize', 'DisplaySize', 'Toolbar' ]
        }
    }
}

在这里插入图片描述

5、效果展示

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

三、后语

   可以上传视频、可以将上传的图片上传到服务器等等。有需要会进一步探讨,目前需要做的就是收集这些数据,然后放入数据库存储。

资料参考:https://www.cnblogs.com/meiyanstar/p/12909755.html

资料参考:图片缩放

相关文章
|
3月前
|
移动开发 前端开发 JavaScript
基于 HTML5 和 Canvas 开发的在线图片编辑器
基于 HTML5 和 Canvas 开发的在线图片编辑器
79 0
|
2月前
|
存储 JavaScript 前端开发
Vue中通过集成Quill富文本编辑器实现公告的发布。Vue项目中vue-quill-editor的安装与使用【实战开发应用】
文章展示了在Vue项目中通过集成Quill富文本编辑器实现公告功能的完整开发过程,包括前端的公告发布、修改、删除操作以及后端的数据存储和处理逻辑。
Vue中通过集成Quill富文本编辑器实现公告的发布。Vue项目中vue-quill-editor的安装与使用【实战开发应用】
|
3月前
|
Shell Linux 数据安全/隐私保护
Notepad-- 轻量级文本编辑器的安装及基本使用
【7月更文挑战第11天】Notepad-- 轻量级文本编辑器的安装及基本使用
150 3
|
3月前
|
JavaScript
【vue】 vue2 中使用 Tinymce 富文本编辑器
【vue】 vue2 中使用 Tinymce 富文本编辑器
449 6
|
3月前
|
JSON JavaScript 数据格式
文本-----wangEditor的使用,设置和获取内容,展示HTML无样式怎么办????console同步展示怎样写,Vue的配置在Vue3配置文件中的配置,是editor中的v-model绑定的值
文本-----wangEditor的使用,设置和获取内容,展示HTML无样式怎么办????console同步展示怎样写,Vue的配置在Vue3配置文件中的配置,是editor中的v-model绑定的值
|
4月前
|
JavaScript 数据安全/隐私保护 开发者
开源图片编辑器推荐-可用于海报编辑、商品设计、封面设计、标签设计等场景
推荐开源图片编辑器,基于fabric.js和Vue开发,适合海报、Logo等设计场景。拥有4.4K GitHub Stars,特性包括自定义字体、素材、模板,支持插件扩展、右键菜单及快捷键。提供图片滤镜、裁剪、拖拽、PSD导入、水印设置和分类素材管理。适用于非专业设计者,易于二次开发。
开源图片编辑器推荐-可用于海报编辑、商品设计、封面设计、标签设计等场景
|
3月前
|
JavaScript
【vue】 Tinymce 富文本编辑器 不想让上传的图片转换成base64,而是链接
【vue】 Tinymce 富文本编辑器 不想让上传的图片转换成base64,而是链接
227 0
|
3月前
|
JavaScript 前端开发
vue 富文本编辑器 quill (含代码高亮、自定义字体、汉化、鼠标悬浮提示、组件封装等)
vue 富文本编辑器 quill (含代码高亮、自定义字体、汉化、鼠标悬浮提示、组件封装等)
136 0
|
3月前
|
SQL JavaScript
vue 代码编辑器 vue-codemirror
vue 代码编辑器 vue-codemirror
53 0
|
5月前
|
存储 JavaScript 前端开发
笔.COOL,一个功能完备、使用便捷的在线HTML/CSS/JS以及Vue编辑器和作品分享平台
笔.COOL是一个新兴的在线 HTML/CSS/JS 及 Vue 编辑器,提供实时预览和云端存储功能。用户可以随时随地编写和保存代码,同时分享作品给他人预览和学习。它也是一个实用的 BUG 复现工具,支持嵌入编辑器到博客,促进代码交流。社区活跃,适合开发者展示作品、获取灵感和学习。