IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> quill富文本编辑器quill粘贴图片上传服务器 -> 正文阅读

[JavaScript知识库]quill富文本编辑器quill粘贴图片上传服务器

强大的富文本编辑器:quill
github:32k start++,:https://github.com/quilljs/quill

quill粘贴图片上传服务器

<link href="//cdn.quilljs.com/1.3.6/quill.snow.css" rel="stylesheet">

<div id="editor" style="height: 370px">
	<p>Hello World!</p>
</div>
<script src="//cdn.quilljs.com/1.3.6/quill.min.js"></script>
<script>
var toolbarOptions = [
            ['bold', 'italic', 'underline', 'strike'],        // toggled buttons
            ['blockquote', 'code-block'],

            [{'header': 1}, {'header': 2}],               // custom button values
            [{'list': 'ordered'}, {'list': 'bullet'}],
            [{'script': 'sub'}, {'script': 'super'}],      // superscript/subscript
            [{'indent': '-1'}, {'indent': '+1'}],          // outdent/indent
            [{'direction': 'rtl'}],                         // text direction

            [{'size': ['small', false, 'large', 'huge']}],  // custom dropdown
            [{'header': [1, 2, 3, 4, 5, 6, false]}],

            [{'color': []}, {'background': []}],          // dropdown with defaults from theme
            [{'font': []}],
            [{'align': []}],
            ['image'],

            ['clean']                                         // remove formatting button
        ];
        var editor = new Quill('#editor', {
            modules: {toolbar: toolbarOptions},
            theme: 'snow',
        });

		// 粘贴图片上传服务器
		editor.root.addEventListener("paste", (e) => {
            console.log(e)
            console.log(this)
            const clipboardData = e.clipboardData
            // support cut by software & copy image file directly
            const isImage = clipboardData.types.length && clipboardData.types.join('').includes('Files');
            if (!isImage) {
                return;
            }
            // only support single image paste
            const file = clipboardData.files[0];
            if (!file || !file.name || !(file.name.toLowerCase().indexOf(".png") !== -1 || file.name.toLowerCase().indexOf(".gif") !== -1
                || file.name.toLowerCase().indexOf(".jpg") !== -1)) {
                console.log('粘贴的不是图片')
                return;
            }
            var formData = new FormData;
            formData.append('file', file)
            // 在此执行上传
            $.ajax({
                data: formData,
                processData: false,//不做处理
                contentType: false,//不做处理
                sync: false,
                url: '/file/up/img',
                type: 'post',
                success(data) {
                    console.log(data)
                    if (data.code==0){
                        const range = editor.getSelection(true);
                        editor.insertEmbed(range.index, 'image', data.data);
                    }else {
                        layer.msg(data.msg)
                    }

                }
            })
        })
        editor.clipboard.addMatcher('IMG', (node, delta) => {
            const Delta = Quill.import('delta')
            // 忽略base64插入操作
            return new Delta().insert('')
        })
</script>

在这里插入图片描述

上传图片到服务器返回url处理

完整代码

<link href="//cdn.quilljs.com/1.3.6/quill.snow.css" rel="stylesheet">
<script src="//cdn.quilljs.com/1.3.6/quill.min.js"></script>

<div id="editor" style="height: 370px">
	<p>Hello World!</p>
</div>

<input id="opImg" style="display: none;" type="file" onchange="addImg(this)"
       accept="image/gif,image/jpeg,image/jpg,image/png,image/svg">
<script>
    var editor,$
    function addImg(e) {
        const upImg = e.files[0];
        console.log(editor)
        var formData = new FormData;
        formData.append('file', upImg)
        $.ajax({
            data: formData,
            processData: false,//不做处理
            contentType: false,//不做处理
            sync: false,
            url: '/file/up/img',
            type: 'post',
            success(data) {
                console.log(data)
                if (data.code == 0) {
                    const range = editor.getSelection(true);
                    editor.insertEmbed(range.index, 'image', data.data);
                } else {
                    layer.msg(data.msg)
                }
            }
        })
    }
    function imageHandler(e) {
        // 在此执打开图片选择,行同步上传
        /*const range = this.quill.getSelection(true);
        this.quill.insertEmbed(range.index, 'image', 'http://localhost:8080/res/images/logo.png');*/
        document.getElementById('opImg').click()
    }

    layui.use(['layer', 'jquery', 'form'], function () {
        $ = layui.jquery
        var layer = layui.layer
            , form = layui.form
        var toolbarOptions = [
            ['bold', 'italic', 'underline', 'strike'],        // toggled buttons
            ['blockquote', 'code-block'],

            [{'header': 1}, {'header': 2}],               // custom button values
            [{'list': 'ordered'}, {'list': 'bullet'}],
            [{'script': 'sub'}, {'script': 'super'}],      // superscript/subscript
            [{'indent': '-1'}, {'indent': '+1'}],          // outdent/indent
            [{'direction': 'rtl'}],                         // text direction

            [{'size': ['small', false, 'large', 'huge']}],  // custom dropdown
            [{'header': [1, 2, 3, 4, 5, 6, false]}],

            [{'color': []}, {'background': []}],          // dropdown with defaults from theme
            [{'font': ['宋体']}],
            [{'align': []}],
            ['image'],

            ['clean']                                         // remove formatting button
        ];
        editor = new Quill('#editor', {
            modules: {
                toolbar: {
                    container: toolbarOptions,
                    handlers: {
                        image: imageHandler
                    }
                }
            },
            theme: 'snow',
        });

        editor.root.addEventListener("paste", (e) => {
            console.log(e)
            console.log(this)
            const clipboardData = e.clipboardData
            // support cut by software & copy image file directly
            const isImage = clipboardData.types.length && clipboardData.types.join('').includes('Files');
            if (!isImage) {
                return;
            }
            // only support single image paste
            const file = clipboardData.files[0];
            if (!file || !file.name || !(file.name.toLowerCase().indexOf(".png") !== -1 || file.name.toLowerCase().indexOf(".gif") !== -1
                || file.name.toLowerCase().indexOf(".jpg") !== -1 || file.name.toLowerCase().indexOf(".jpeg") !== -1)) {
                console.log('粘贴的不是图片')
                return;
            }
            console.log(file)
            var formData = new FormData;
            formData.append('file', file)
            // 在此执行上传
            $.ajax({
                data: formData,
                processData: false,//不做处理
                contentType: false,//不做处理
                sync: false,
                url: '/file/up/img',
                type: 'post',
                success(data) {
                    console.log(data)
                    if (data.code == 0) {
                        const range = editor.getSelection(true);
                        editor.insertEmbed(range.index, 'image', data.data);
                    } else {
                        layer.msg(data.msg)
                    }

                }
            })
        })
        editor.clipboard.addMatcher('IMG', (node, delta) => {
            const Delta = Quill.import('delta')
            return new Delta().insert('')
        })
    });
</script>

在这里插入图片描述

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-24 09:20:29  更:2022-04-24 09:21:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:02:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码