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

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-modulequill-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

资料参考:图片缩放

  • 11
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Aholic

整理不易、多谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值