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 相关文章推荐
JS 显示当前日期与时间的代码
Mar 24 Javascript
使用jQuery插件创建常规模态窗口登陆效果
Aug 23 Javascript
js实现微信分享代码
Oct 11 Javascript
jQuery Dialog 打开时自动聚焦的解决方法(两种方法)
Nov 24 Javascript
React-router中结合webpack实现按需加载实例
May 25 Javascript
Vue 2.5 Level E 发布了: 新功能特性一览
Oct 24 Javascript
一些手写JavaScript常用的函数汇总
Apr 16 Javascript
在Vue中使用icon 字体图标的方法
Jun 14 Javascript
微信小程序获取当前位置和城市名
Nov 13 Javascript
解决pycharm双击但是无法打开的情况
Oct 31 Javascript
javascript实现时钟动画
Dec 03 Javascript
JS中循环遍历数组的四种方式总结
Jan 23 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缓存函数的使用说明
2013/05/10 PHP
php实现将任意进制数转换成10进制的方法
2015/04/17 PHP
PHP 微信扫码支付源代码(推荐)
2016/11/03 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
javascript 添加和移除函数的通用方法
2009/10/20 Javascript
Jquery通过Ajax方式来提交Form表单的具体实现
2013/11/07 Javascript
深入浅析JavaScript中的Function类型
2016/07/09 Javascript
input获取焦点时底部菜单被顶上来问题的解决办法
2017/01/24 Javascript
vue如何实现observer和watcher源码解析
2017/03/09 Javascript
Angularjs修改密码的实例代码
2017/05/26 Javascript
基于JS实现移动端左滑删除功能
2017/07/28 Javascript
vue源码入口文件分析(推荐)
2018/01/30 Javascript
微信小程序switch开关选择器使用详解
2018/01/31 Javascript
详解JavaScript中的数组合并方法和对象合并方法
2018/05/11 Javascript
vue-router中scrollBehavior的巧妙用法
2018/07/09 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
ant design vue嵌套表格及表格内部编辑的用法说明
2020/10/28 Javascript
微信小程序实现可长按移动控件
2020/11/01 Javascript
原生JS实现京东查看商品点击放大
2020/12/21 Javascript
[00:31]DOTA2荣耀之路7:Miracle-空血无敌斩
2018/05/31 DOTA
python抓取京东商城手机列表url实例代码
2013/12/18 Python
Python3读取文件常用方法实例分析
2015/05/22 Python
简要讲解Python编程中线程的创建与锁的使用
2016/02/28 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
2018/07/13 Python
python numpy之np.random的随机数函数使用介绍
2019/10/06 Python
django框架cookie和session用法实例详解
2019/12/10 Python
IE兼容css3圆角的实现代码
2011/07/21 HTML / CSS
使用CSS禁止textarea调整大小功能的方法
2015/03/13 HTML / CSS
CSS3中Transition动画属性用法详解
2016/07/04 HTML / CSS
施华洛世奇美国官网:SWAROVSKI美国
2018/02/08 全球购物
介绍信范文
2015/01/31 职场文书
校长师德表现自我评价
2015/03/05 职场文书
首席执行官观后感
2015/06/03 职场文书
mysql 数据插入优化方法之concurrent_insert
2021/07/01 MySQL
mysql 生成连续日期及变量赋值
2022/03/20 MySQL
Python使用PyYAML库读写yaml文件的方法
2022/04/06 Python