欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Vue实现图片与文字混输效果

程序员文章站 2022-03-31 14:08:44
本文转自: 用多了 jquery ,习惯了使用jquery的api操作 dom ,几乎忘记了原生js对dom操作,今天在项目中遇到了文字和图片混输的情况,第一个想到的办法是用 tex...

本文转自:

用多了 jquery ,习惯了使用jquery的api操作 dom ,几乎忘记了原生js对dom操作,今天在项目中遇到了文字和图片混输的情况,第一个想到的办法是用 textarea 实现,结果发现实现不了图片输入,然后想着找个富文本编辑器的插件实现,深思熟虑之后,我的需求好像也没那么复杂,不至于引用个插件,看了 掘金 的发布沸点功能,然后就模仿了其作法,于是就有了这篇文章的分享。先给大家展示下最后实现的效果:yum:

Vue实现图片与文字混输效果 

实现思路

  • 利用 div 的 contenteditable 属性,让div可编辑
  • 绑定 ref 属性,用于操作输入框元素
  • 图片点击时,获取图片地址,使用require转换图片地址
  • 创建img标签,赋值转换好的图片地址
  • 从 refs 对象中获取到输入框元素,赋值创建好的img标签

实现过程

声明div可编辑,监听回车键事件,关闭拼写检查,绑定ref方便获取当前元素

<div class="input-panel" ref="msginputcontainer" @keydown.enter.exact="sendmessage($event)"
  contenteditable="true" spellcheck="false"></div>

表情输入框绑定对应的事件

<div class="item-panel" v-for="item in this.emojilist" :key="item.info">
 <img :src="require(`../assets/img/emoji/${item.src}`)" :alt="item.info"
   @mouseover="emojiconversion($event,'over',item.src,item.hover,item.info)"
   @mouseleave="emojiconversion($event,'leave',item.src,item.hover,item.info)"
   @click="emojiconversion($event,'click',item.src,item.hover,item.info)">
</div>

实现表情框图片点击事件

emojiconversion: function (event, status, path, hoverpath, info) {
 if (status === "over") {
  event.target.src = require(`../assets/img/emoji/${hoverpath}`);
 } else if (status === "click") {
  console.log(hoverpath);
  // 表情输入
  const imgsrc = require(`../assets/img/emoji/${hoverpath}`);
  const imgtag = document.createelement("img");
  imgtag.src = imgsrc;
  imgtag.alt = info;
  this.$refs.msginputcontainer.appendchild(imgtag);
 } else {
  event.target.src = require(`../assets/img/emoji/${path}`);
 }
}

总结

以上所述是小编给大家介绍的vue实现图片与文字混输效果,希望对大家有所帮助