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程序 入门者学习
Jul 09 Javascript
js 文件引入实现代码
Apr 23 Javascript
javascript 禁用IE工具栏,导航栏等等实现代码
Apr 01 Javascript
标题过长使用javascript按字节截取字符串
Apr 24 Javascript
基于JavaScript实现Tab选项卡切换效果
Nov 24 Javascript
jquery实现焦点轮播效果
Feb 23 Javascript
利用js定义一个导航条菜单
Mar 14 Javascript
JavaScript循环_动力节点Java学院整理
Jun 28 Javascript
详解基于 axios 的 Vue 项目 http 请求优化
Sep 04 Javascript
vuejs选中当前样式active的实例
Aug 22 Javascript
微信小程序实现的一键连接wifi功能示例
Apr 24 Javascript
JQuery表单元素取值赋值方法总结
May 12 jQuery
环形加载进度条封装(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
调整优化您的LAMP应用程序的5种简单方法
2011/06/26 PHP
CodeIgniter图像处理类的深入解析
2013/06/17 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
2013/11/26 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
2015/12/22 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
2017/10/06 PHP
js处理自己不能定义二维数组的方法详解
2014/03/03 Javascript
javascript处理表单示例(javascript提交表单)
2014/04/28 Javascript
JavaScript显示表单内元素数量的方法
2015/04/02 Javascript
JQuery中DOM事件合成用法实例分析
2015/06/13 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
Javascript实现商品秒杀倒计时(时间与服务器时间同步)
2015/09/16 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
2015/12/13 Javascript
详解vue.js组件化开发实践
2016/12/14 Javascript
解决微信内置浏览器返回上一页强制刷新问题方法
2017/02/05 Javascript
js实现分页功能
2017/05/24 Javascript
jQuery 开发之EasyUI 添加数据的实例
2017/09/26 jQuery
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
vue 组件中添加样式不生效的解决方法
2018/07/06 Javascript
vue使用Font Awesome的方法步骤
2019/02/26 Javascript
python显示天气预报
2014/03/02 Python
Python向日志输出中添加上下文信息
2017/05/24 Python
详解Python with/as使用说明
2018/12/13 Python
Python 正则表达式匹配字符串中的http链接方法
2018/12/25 Python
python numpy中cumsum的用法详解
2019/10/17 Python
django自带的权限管理Permission用法说明
2020/05/13 Python
localStorage 设置过期时间的方法实现
2018/12/21 HTML / CSS
英国现代市场:ARKET
2019/04/10 全球购物
大学四年职业生涯规划书范文
2014/01/02 职场文书
开办加工厂创业计划书
2014/01/03 职场文书
《莫泊桑拜师》教学反思
2014/04/23 职场文书
化工专业自荐书
2014/06/16 职场文书
2016年小学生迎国庆广播稿
2015/12/18 职场文书
2019广播稿怎么写
2019/04/17 职场文书
「月刊Comic Alive」2022年5月号封面公开
2022/03/21 日漫
Java字符串逆序方法详情
2022/03/21 Java/Android