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设置IFrame高度自适应(兼容各主流浏览器)
Jun 05 Javascript
深入理解javascript作用域和闭包
Sep 23 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
Oct 17 Javascript
JS倒计时代码汇总
Nov 25 Javascript
基于jquery实现等比缩放图片
Dec 03 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
Dec 31 Javascript
详解vue-cli + webpack 多页面实例应用
Apr 25 Javascript
修改 bootstrap table 默认detailRow样式的实例代码
Jul 21 Javascript
jquery实现限制textarea输入字数的方法
Sep 06 jQuery
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
Apr 12 Javascript
vue实现滑动切换效果(仅在手机模式下可用)
Jun 29 Javascript
Vue使用Three.js加载glTF模型的方法详解
Jun 14 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开启gzip页面压缩实例
2013/06/09 PHP
解析PHP中ob_start()函数的用法
2013/06/24 PHP
php读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
PHP实现的迷你漂流瓶
2015/07/29 PHP
php 中的closure用法详解
2017/06/12 PHP
js获得网页背景色和字体色的方法
2014/03/21 Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
2014/06/05 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
2015/03/02 Javascript
使用jQuery实现更改默认alert框体
2015/04/13 Javascript
浅谈javascript中replace()方法
2015/11/10 Javascript
jQuery mobile在页面加载时添加加载中效果 document.ready 和window.onload执行顺序比较
2016/07/14 Javascript
在 Vue 项目中引入 tinymce 富文本编辑器的完整代码
2018/05/04 Javascript
vue裁切预览组件功能的实现步骤
2018/05/04 Javascript
TypeScript中使用getElementXXX()的示例代码
2019/09/12 Javascript
el-form 多层级表单的实现示例
2020/09/10 Javascript
python和shell变量互相传递的几种方法
2013/11/20 Python
Python scikit-learn 做线性回归的示例代码
2017/11/01 Python
Python并行分布式框架Celery详解
2018/10/15 Python
Python入门Anaconda和Pycharm的安装和配置详解
2019/07/16 Python
Python中xml和dict格式转换的示例代码
2019/11/07 Python
Django单元测试中Fixtures用法详解
2020/02/25 Python
Python基于class()实现面向对象原理详解
2020/03/26 Python
Python批量将图片灰度化的实现代码
2020/04/11 Python
Pycharm安装Qt Design快捷工具的详细教程
2020/11/18 Python
乌克兰设计师和品牌的服装:Love&Live
2020/04/14 全球购物
Linux如何为某个操作添加别名
2015/02/05 面试题
旷课检讨书大全
2014/01/21 职场文书
美国探亲签证邀请信
2014/02/05 职场文书
酒店管理求职信
2014/06/09 职场文书
学校四群教育实施方案
2014/06/12 职场文书
五心教育心得体会
2014/09/04 职场文书
2014年党风廉政建设工作总结
2014/11/19 职场文书
教师个人考察材料
2014/12/16 职场文书
教师个人年终总结
2015/02/11 职场文书
党支部意见范文
2015/06/02 职场文书
mysql优化
2021/04/06 MySQL