Vue实现base64编码图片间的切换功能


Posted in Javascript onDecember 04, 2019

前言

昨天在项目开发中遇到了一个需要展示多张图片到一个容器中的需求,每张图片在鼠标移入时都要更换图片路径,展示一个新的图片,由于每张图片大小都在2~6kb之间,webpack中配置了图片在10kb以内自动转换base64,所有就有了本篇文章的分享。先给大家展示下最后要实现的效果

Vue实现base64编码图片间的切换功能

实现思路

  • 给每个元素添加@mouserover事件和@mouseleave事件
  • 绑定函数,传用于识别当前参数的标识
  • 根据所传参数判断当前状态下应该显示什么图片

解析渲染

实现过程

从json文件中读取图片信息集合,循环渲染json文件中的图片,传当前元素和当前图片的一些信息过去

<div class="row-panel">
  <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)" @mouseleave="emojiConversion($event,'leave',item.src,item.hover)">
  </div>
</div>

引入json文件,并在data()中声明

import emoji from '../assets/json/emoji';

data() {
      return {
        emojiList:emoji,
        toolbarList:toolbar
      }
    }

实现鼠标移入移除替换图片的函数

// 表情框鼠标悬浮显示动态表情
  emojiConversion:function (event,status,path,hoverPath) {
    if(status==="over"){
      event.target.src = require(`../assets/img/emoji/${hoverPath}`);
    }else{
      event.target.src = require(`../assets/img/emoji/${path}`);
    }
  }

emoji.json
[
 {
  "name": "pout",
  "src": "1fix@2x.png",
  "info": "撇嘴",
  "hover": "1@2x.gif"
 },
 {
  "name": "porn",
  "src": "2fix@2x.png",
  "info": "色",
  "hover": "2@2x.gif"
 },
 {
  "name": "smile",
  "src": "14fix@2x.png",
  "info": "微笑",
  "hover": "14@2x.gif"
 },
 {
  "name": "smile",
  "src": "178fix@2x.png",
  "info": "滑稽",
  "hover": "178@2x.gif"
 }
]

踩坑过程

错误的使用require

// 这样直接在data中写文件路径没问题,可以正常渲染
emojiSrc:{
    "funny":require("../assets/img/emoji/178fix@2x.png"),
    "funnyNormal":require("../assets/img/emoji/178fix@2x.png"),
    "funnyHover":require("../assets/img/emoji/178@2x.gif"),
    "smile":require("../assets/img/emoji/14fix@2x.png"),
    "smileNormal":require("../assets/img/emoji/14fix@2x.png"),
    "smileHover":require("../assets/img/emoji/14@2x.gif"),
    "pout":require("../assets/img/emoji/1fix@2x.png"),
    "poutNormal":require("../assets/img/emoji/1fix@2x.png"),
    "poutHover":require("../assets/img/emoji/1@2x.gif"),
    "porn":require("../assets/img/emoji/2fix@2x.png"),
    "pornNormal":require("../assets/img/emoji/2fix@2x.png"),
    "pornHover":require("../assets/img/emoji/2@2x.gif"),
  }

渲染结果:

Vue实现base64编码图片间的切换功能

但是如果在json文件中写文件的路径,渲染结果(无法识别文件路径):

Vue实现base64编码图片间的切换功能

解决方案:使用模板字符串,json文件只写文件名,文件路径写在当前组件

require的正确使用方式

require(`../assets/img/emoji/${hoverPath}`);

总结

以上所述是小编给大家介绍的Vue实现base64编码图片间的切换功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
prototype1.4中文手册
Sep 22 Javascript
浅谈 jQuery 事件源码定位问题
Jun 18 Javascript
原生js和jquery实现图片轮播特效
Apr 23 Javascript
JavaScript对象属性检查、增加、删除、访问操作实例
Jul 08 Javascript
jQuery实现的简单拖拽功能示例
Sep 13 Javascript
JS调用某段SQL语句的方法
Oct 20 Javascript
Sequelize中用group by进行分组聚合查询
Dec 12 Javascript
用js将long型数据转换成date型或datetime型的实例
Jul 03 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
Aug 17 Javascript
微信小程序多音频播放进度条问题
Aug 28 Javascript
详解小程序rich-text对富文本支持方案
Nov 28 Javascript
浅谈layui使用模板引擎动态渲染元素要注意的问题
Sep 14 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
Dec 04 #Javascript
Vue实现图片与文字混输效果
Dec 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
You might like
php xml-rpc远程调用
2008/12/19 PHP
php中出现空白页的原因及解决方法汇总
2014/07/08 PHP
去掉destoon资讯内容页keywords关键字自带的文章标题的方法
2014/08/21 PHP
php+mysql实现用户注册登陆的方法
2015/01/03 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
2019/10/11 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
2007/02/09 Javascript
几个比较经典常用的jQuery小技巧
2010/03/01 Javascript
Extjs Ext.MessageBox.confirm 确认对话框详解
2010/04/02 Javascript
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
2010/08/27 Javascript
jQuery EasyUI API 中文文档 - ComboGrid 组合表格
2011/10/13 Javascript
javascript的原生方法获取数组中的最大(最小)值
2012/12/19 Javascript
JS获得浏览器版本和操作系统版本的例子
2014/05/13 Javascript
Javascript中With语句用法实例
2015/05/14 Javascript
javascript实现简单的全选和反选功能
2016/01/05 Javascript
理解javascript中的MVC模式
2016/01/28 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
2016/04/21 Javascript
jquery radio的取值_radio的选中_radio的重置方法
2016/09/20 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
2016/09/29 Javascript
Angular路由简单学习
2016/12/26 Javascript
详解angular路由高亮之RouterLinkActive
2018/04/28 Javascript
vue实现引入本地json的方法分析
2018/07/12 Javascript
vue实现鼠标移入移出事件代码实例
2019/03/27 Javascript
VUEX-action可以修改state吗
2019/11/19 Javascript
[57:22]完美世界DOTA2联赛PWL S2 FTD vs PXG 第二场 11.27
2020/12/01 DOTA
python实现TCP服务器端与客户端的方法详解
2015/04/30 Python
python通过zabbix api获取主机
2018/09/17 Python
浅谈Pycharm的项目文件名是红色的原因及解决方式
2020/06/01 Python
英国标准协会商店:BSI Shop
2019/02/25 全球购物
构造方法和其他方法的区别?怎么调用父类的构造方法
2013/09/22 面试题
小学生寒假家长评语
2014/04/16 职场文书
2015国庆节放假通知范文
2015/07/30 职场文书
公司客户答谢酒会祝酒词
2015/08/11 职场文书
2016读书月活动心得体会
2016/01/14 职场文书
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android