vue上传图片+粘贴图片两种方式切换

1.功能需求

点击切换是上传还是粘贴图片,并且在切换的时候清除对应的上传文件数据,如下图所示

2.实现思路

两个盒子,通过radio的值实现两者的切换,this指定数据大家自己在data里面添加即可

1.本地上传

利用element ui 的上传组件实现,保证一次只能上传一个图片,并且通过表单提交,代码如下:


<div v-show="radio === 1">
  <el-upload
     :class="{ disable: fileList }"
     action=""
     list-type="picture-card"
     :http-request="fileUpload"
     :on-remove="handleRemove"
   >
     <i class="el-icon-plus"></i>
  </el-upload>
</div>
// disable类名:在上传了一个文件以后将上传按钮隐藏,通过css样式
.disable {
  ::v-deep .el-upload--picture-card {
    display: none !important;
  }
}


// 移除文件事件
 handleRemove(file, fileList) {
    this.fileList = ""; // 文件移除上传按钮显示
 },
// 自定义上传事件,后续通过请求接口上传
 fileUpload(param) {
    //   console.log(param);
    this.fileList = param.file;
},

2.复制粘贴上传

后面复制的会覆盖前面的文件,并且控制图片的展示大小(等比例缩放),通过监听复制粘贴事件来实现,代码如下:

<div v-show="radio === 2">
   <div id="preview" class="pase-div" v-on:paste="handlePaste">
       <span>将图片按Ctrl+V 粘贴至此处</span>
   </div>
</div>
// css样式
.pase-div {
  width: 95%;
  min-height: 40px;
  border: 1px dashed #c0ccda;
  text-align: center;
}


 // 监听粘贴操作
 handlePaste(event) {
      const items = (event.clipboardData || window.clipboardData).items;
      let file = null;
      if (!items || items.length === 0) {
        this.$message.error("当前浏览器不支持本地");
        return;
      }
      // 搜索剪切板items
      for (let i = 0; i < items.length; i++) {
        if (items[i].type.indexOf("image") !== -1) {
          file = items[i].getAsFile();
          break;
        }
      }
      if (!file) {
        this.$message.error("粘贴内容非图片");
        return;
      }
      // 此时file就是我们的剪切板中的图片对象
      // 如果需要预览,可以执行下面代码
      const reader = new FileReader();
      reader.onload = (event) => {
      preview.innerHTML = `<img id="pase-img" src="${event.target.result}" style="width: 100%">`; // 添加style样式保证图片等比缩放
      };
      reader.readAsDataURL(file);
      this.pasteFile = file;
},

3.两者之间的切换实现

在切换radio的时候,去删除对应的节点和将数据置空,代码如下:

<el-radio-group v-model="radio" @change="changeRadio">
   <el-radio :label="1">本地上传</el-radio>
   <el-radio :label="2">粘贴上传</el-radio>
</el-radio-group>



// 改变图片上传方式---改变radio
changeRadio(val) {
   if (val === 1) {
     let node = document.getElementById("pase-img"); // 给添加的节点设置id,对应上图
     if (node) {
        let preview = document.getElementById("preview");
        preview.removeChild(node);
        preview.innerHTML = `<span>将图片按Ctrl+V 粘贴至此处</span>`;
        return;
       }
    } else {
       // 这里获取的是ul里面的li,否则在下次添加的时候由于ul节点被删除,无法再次添加图片
       let ulNode = document.getElementsByClassName("el-upload-list__item")[0]; 
       // console.log(ulNode);
        if (ulNode) {
        ulNode.parentNode.removeChild(ulNode);
        this.fileList = "";
        return;
       }
   }
},

4.参考来源

vue实现粘贴截图上传图片_jaysj的博客-CSDN博客_vue 粘贴图片

5.总结

对应的代码在上面,大家在需要的位置进行添加即可,也可根据需求去做调整,实现的思路应该有很多,大家如果有更好的实现方式欢迎在下方留言~~。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Vue是一种流行的JavaScript框架,用于构建用户界面。KindEditor是一个富文本编辑器,可以方便地在网页中编辑和展示富文本内容。图片上传是指将用户选择的图片文件上传到服务器。 在Vue中使用KindEditor进行图片上传的步骤如下: 1. 安装KindEditor:可以通过npm或者直接下载KindEditor的源代码进行安装。 2. 在Vue组件中引入KindEditor:可以通过import语句引入KindEditor的相关文件。 3. 在Vue组件中使用KindEditor:在需要使用富文本编辑器的地方,使用KindEditor提供的API进行初始化和配置。 4. 实现图片上传功能:通过配置KindEditor的图片上传接口,将用户选择的图片文件上传到服务器。 以下是一个简单的示例代码: ``` <template> <div> <textarea ref="editor"></textarea> <button @click="uploadImage">上传图片</button> </div> </template> <script> import KindEditor from 'kindeditor' export default { mounted() { KindEditor.create(this.$refs.editor, { uploadJson: '/uploadImage', // 图片上传接 allowFileManager: false // 是否允许文件管理 }) }, methods: { uploadImage() { // 获取编辑器中的图片文件 const images = KindEditor.editor(this.$refs.editor).images // 将图片文件上传到服务器 // ... } } } </script> ``` 相关问题: 1. Vue是什么? 2. KindEditor是什么? 3. 如何在Vue中使用KindEditor? 4. 如何实现图片上传功能? 5. 还有其他类似的富文本编辑器可以使用吗?
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值