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实现的UBB编码函数
Mar 09 Javascript
LazyForm jQuery plugin 定制您的CheckBox Radio和Select
Oct 24 Javascript
解析javascript 数组以及json元素的添加删除
Jun 26 Javascript
jquery选择器使用详解
Apr 08 Javascript
Jquery Post处理后不进入回调的原因及解决方法
Jul 15 Javascript
js onmousewheel事件多次触发问题解决方法
Oct 17 Javascript
C++中的string类的用法小结
Aug 07 Javascript
jquery调整表格行tr上下顺序实例讲解
Jan 09 Javascript
angularjs 源码解析之injector
Aug 22 Javascript
JavaScript中双向数据绑定详解
May 03 Javascript
原生js实现拖拽移动与缩放效果
Aug 24 Javascript
vue 使用原生组件上传图片的实例
Sep 08 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简介
2006/10/09 PHP
10款PHP开源商城系统汇总介绍
2015/07/23 PHP
Symfony2实现在doctrine中内置数据的方法
2016/02/05 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
PHP实现一个多功能购物网站的案例
2017/09/13 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
2017/10/19 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
2019/01/17 PHP
PHP常用函数之格式化时间操作示例
2019/10/21 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
基于JQuery的列表拖动排序实现代码
2013/10/01 Javascript
jquery sortable的拖动方法示例详解
2014/01/16 Javascript
小白谈谈对JS原型链的理解
2016/05/03 Javascript
JavaScript中自带的 reduce()方法使用示例详解
2016/08/10 Javascript
JS Canvas定时器模拟动态加载动画
2016/09/17 Javascript
概述BootStrap中role=&quot;form&quot;及role作用角色
2016/12/08 Javascript
微信小程序商城项目之商品属性分类(4)
2017/04/17 Javascript
vue.js选中动态绑定的radio的指定项
2017/06/02 Javascript
基于es6三点运算符的使用方法(实例讲解)
2017/10/12 Javascript
JSON是什么?有哪些优点?JSON和XML的区别?
2019/04/29 Javascript
javascript如何实现create方法
2019/11/04 Javascript
微信小程序监听用户登录事件的实现方法
2019/11/11 Javascript
详解小程序横屏方案对比
2020/06/28 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
2020/12/01 Javascript
vue 授权获取微信openId操作
2020/11/13 Javascript
[55:02]2014 DOTA2国际邀请赛中国区预选赛 HGT VS Orenda
2014/05/21 DOTA
[02:54]辉夜杯主赛事第二日败者组 iG.V赛后采访
2015/12/26 DOTA
跟老齐学Python之有点简约的元组
2014/09/24 Python
go语言计算两个时间的时间差方法
2015/03/13 Python
Python实现的数据结构与算法之队列详解
2015/04/22 Python
Tensorflow 卷积的梯度反向传播过程
2020/02/10 Python
Python中断多重循环的几种方式详解
2020/02/10 Python
Python3合并两个有序数组代码实例
2020/08/11 Python
早会主持词
2014/03/17 职场文书
ktv好的活动方案
2014/08/15 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书
python 如何将两个实数矩阵合并为一个复数矩阵
2021/05/19 Python