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


Posted in Javascript onDecember 04, 2019

本文转自:https://juejin.im/post/5de26d39e51d455da17be1e3

用多了 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实现图片与文字混输效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
开发跨浏览器javascript常见注意事项
Jan 01 Javascript
javascript函数以及基础写法100多条实用整理
Jan 13 Javascript
js实现左侧网页tab滑动门效果代码
Sep 06 Javascript
javascript与jquery中的this关键字用法实例分析
Dec 24 Javascript
javascript实现计时器的简单方法
Feb 21 Javascript
Bootstrap开发实战之第一次接触Bootstrap
Jun 02 Javascript
Bootstrap3 Grid system原理及应用详解
Sep 30 Javascript
Vim快速合并行及vim 将文件所有行合并到一行
Nov 27 Javascript
如何将HTML字符转换为DOM节点并动态添加到文档中详解
Aug 19 Javascript
Layui tree 下拉菜单树的实例代码
Sep 21 Javascript
在vue-cli中引入lodash.js并使用详解
Nov 13 Javascript
详解Node.js如何处理ES6模块
May 15 Javascript
环形加载进度条封装(Vue插件版和原生js版)
Dec 04 #Javascript
element-ui 远程搜索组件el-select在项目中组件化的实现代码
Dec 04 #Javascript
在vue和element-ui的table中实现分页复选功能
Dec 04 #Javascript
vue项目中极验验证的使用代码示例
Dec 03 #Javascript
jQuery轮播图功能制作方法详解
Dec 03 #jQuery
JS实现的雪花飘落特效示例
Dec 03 #Javascript
vue中实现高德定位功能
Dec 03 #Javascript
You might like
纯php生成随机密码
2015/10/30 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
thinkPHP3.2.2框架行为扩展及demo示例
2018/06/19 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
2019/05/13 PHP
jquery获取焦点和失去焦点事件代码
2013/04/21 Javascript
JS组件系列之Bootstrap Icon图标选择组件
2016/01/28 Javascript
javascript 广告移动特效的实现代码
2016/06/25 Javascript
IE8兼容Jquery.validate.js的问题
2016/12/01 Javascript
使用Node.js实现简易MVC框架的方法
2017/08/07 Javascript
Three.js实现绘制字体模型示例代码
2017/09/26 Javascript
vue路由 遍历生成复数router-link的例子
2019/10/30 Javascript
JS实现移动端可折叠导航菜单(现代都市风)
2020/07/07 Javascript
[56:41]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs OG
2018/04/01 DOTA
Swift 3.0在集合类数据结构上的一些新变化总结
2016/07/11 Python
matplotlib savefig 保存图片大小的实例
2018/05/24 Python
python3转换code128条形码的方法
2019/04/17 Python
Python比较配置文件的方法实例详解
2019/06/06 Python
Pycharm 2019 破解激活方法图文详解
2019/10/11 Python
Python namedtuple命名元组实现过程解析
2020/01/08 Python
python中提高pip install速度
2020/02/14 Python
Python通过socketserver处理多个链接
2020/03/18 Python
Python Pivot table透视表使用方法解析
2020/09/11 Python
详解python程序中的多任务
2020/09/16 Python
Can a struct inherit from another struct? (结构体能继承结构体吗)
2016/09/25 面试题
求职信的要素有哪些呢
2013/12/26 职场文书
总经理助理工作职责
2014/02/06 职场文书
《威尼斯的小艇》教学反思
2014/02/17 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
与美同行演讲稿
2014/09/13 职场文书
渠道运营商合作协议书范本
2014/10/06 职场文书
领导干部“四风”查摆问题个人整改措施
2014/10/28 职场文书
2014年小学少先队工作总结
2014/12/18 职场文书
公司人事任命通知
2015/04/20 职场文书
海洋天堂观后感
2015/06/05 职场文书
护理心得体会范文
2016/01/22 职场文书
Golang jwt身份认证
2022/04/20 Golang