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 相关文章推荐
海量经典的jQuery插件集合
Jan 12 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
Oct 11 Javascript
JavaScript Promise启示录
Aug 12 Javascript
详解AngularJS中的表格使用
Jun 16 Javascript
全面解析Bootstrap中transition、affix的使用方法
May 30 Javascript
JavaScript 字符串常用操作小结(非常实用)
Nov 30 Javascript
vue-resource 拦截器使用详解
Feb 21 Javascript
详解搭建es6+devServer简单开发环境
Sep 25 Javascript
微信小程序实现页面分享onShareAppMessage
Aug 12 Javascript
Vue+ElementUI项目使用webpack输出MPA的方法
Aug 27 Javascript
vue+layui实现select动态加载后台数据的例子
Sep 20 Javascript
vue基础知识--axios合并请求和slot
Jun 04 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高级对象构建 多个构造函数的使用
2012/02/05 PHP
ThinkPHP使用心得分享-分页类Page的用法
2014/05/15 PHP
php使用crypt()函数进行加密
2017/06/08 PHP
Javascript 检测、添加、移除样式(className)函数代码
2009/09/08 Javascript
js实现无限级树形导航列表效果代码
2015/09/23 Javascript
跟我学习javascript的this关键字
2020/05/28 Javascript
不得不分享的JavaScript常用方法函数集(上)
2015/12/23 Javascript
JS动态计算移动端rem的解决方案
2016/10/14 Javascript
Bootstrap选项卡动态切换效果
2016/11/28 Javascript
jQuery排序插件tableSorter使用方法
2017/02/10 Javascript
原生js 封装get ,post, delete 请求的实例
2017/08/11 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
JS计算距当前时间的时间差实例
2017/12/29 Javascript
JavaScript设计模式之调停者模式实例详解
2018/02/03 Javascript
解决vue中post方式提交数据后台无法接收的问题
2018/08/11 Javascript
JS实现方形抽奖效果
2018/08/27 Javascript
JS判断数组里是否有重复元素的方法小结
2019/05/21 Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
2019/07/16 Javascript
Vue两种组件类型:递归组件和动态组件的用法
2020/08/06 Javascript
python中cPickle用法例子分享
2014/01/03 Python
python实现汽车管理系统
2018/11/30 Python
Python中super函数用法实例分析
2019/03/18 Python
python networkx 根据图的权重画图实现
2019/07/10 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
python tkinter之顶层菜单、弹出菜单实例
2020/03/04 Python
python单元测试框架pytest的使用示例
2020/10/07 Python
python 进程池pool使用详解
2020/10/15 Python
html5 touch事件实现触屏页面上下滑动(一)
2016/03/10 HTML / CSS
Html5 页面适配iPhoneX(就是那么简单)
2019/09/05 HTML / CSS
汉森批发:Hansen Wholesale
2018/05/24 全球购物
香港中原电器网上商店:Chung Yuen
2019/06/26 全球购物
创业计划书中要认真思考的问题
2013/12/28 职场文书
九一八事变演讲稿
2014/09/05 职场文书
班主任经验交流材料
2014/12/16 职场文书
2015年加油站站长工作总结
2015/05/27 职场文书
Windows7下FTP搭建图文教程
2022/08/05 Servers