html+js写一个可编辑的元素 支持直接向上粘贴文本或图片

有一说一来讲 CSDN 博客的编辑器还是非常厉害的

能够完美设配图片与文字的粘贴与输入

但其实 如果做个捡漏版的 js也可以完成

但这里 为了方便 我选择了vue2的环境

参考代码如下

html 复制代码
<template>
  <div class="editable-div" contenteditable="true" @paste="handlePaste" ref="editableDiv"></div>
</template>

<script>
export default {
  methods: {
    handlePaste(event) {
      event.preventDefault();

      const clipboardData = (event.clipboardData || event.originalEvent.clipboardData);
      let items = clipboardData.items;
      let dedalock = 1;
      const target = this.$refs.editableDiv;
      for (const item of items) {
        if(dedalock == 2) {
          break
        }else if(dedalock == 1) {
          dedalock = 2;
        }
        if (item.kind === 'file' && item.type.indexOf('image/') !== -1) {
          const file = item.getAsFile();
          const reader = new FileReader();

          reader.onload = () => {
            const img = document.createElement('img');
            img.src = reader.result;
            target.appendChild(img);
          };

          reader.readAsDataURL(file);
        } else if (item.kind === 'string') {
          debugger
          item.getAsString((text) => {
            const regex = /<img src="(.*?)"/;
            const match = text.match(regex);

            if (match) {
              const img = document.createElement('img');
              img.src = match[1];
              target.appendChild(img);
            } else {
              console.log(text);
              document.execCommand('insertText', false, text);
            }
          });
        }
      }
    }
  }
};
</script>

<style scoped>
.editable-div {
  border: 1px solid #ccc;
  padding: 10px;
  min-height: 100px;
}
</style>

我们运行项目

因为 contenteditable 单纯的输入内容肯定是没问题的

然后 我复制一段文本

粘贴进去

文本已经没有任何问题

然后我们来试图片

我们先试截个图

然后粘贴进去

直接进来 也是没有任何问题

然后 我们可以试试在百度图片上复制一个

然后拿过去粘贴

也是没有任何问题

当然 因为是手写的js 没有任何工具 BUG肯定会比较多 大家可能也需要自己慢慢完善

相关推荐
IT_陈寒13 分钟前
Vue的computed属性怎么突然不更新了?
前端·人工智能·后端
时寒的笔记14 分钟前
day13~14核心案例某采招网
开发语言·javascript·ecmascript
智商不够_熬夜来凑22 分钟前
【Picker】单选多选
前端·javascript·vue.js
米饭不加菜1 小时前
Typora 原生流程图语法完全指南(Flowchart.js)
前端·javascript·流程图
scan7241 小时前
langgraphy条件边
前端·javascript·html
冰小忆2 小时前
类变量在继承场景下的初始化规则是怎样的?
java·前端·数据库
用户938515635072 小时前
《JS 对象知识地图:10 个小节,从字面量到原型链全覆盖》
javascript
YAwu112 小时前
JavaScript this 底层机制剖析
前端·javascript
tedcloud1232 小时前
wifi-densepose部署教程:构建无线人体感知系统
服务器·javascript·网络·typescript·ocr
用户852495071842 小时前
帮你搞清楚对付js里对象的小妙招^_^
javascript