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 相关文章推荐
随窗体滑动的小插件sticky源码
Jun 21 Javascript
JQuery在页面中添加和除移DOM示例代码
Jun 24 Javascript
js 数值转换为3位逗号分隔的示例代码
Feb 19 Javascript
JavaScript参数个数可变的函数举例说明
Oct 10 Javascript
使用Node.js实现HTTP 206内容分片的教程
Jun 23 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
Dec 03 Javascript
详解JavaScript正则表达式之RegExp对象
Dec 13 Javascript
JS正则表达式修饰符global(/g)用法分析
Dec 27 Javascript
基于Vue实现timepicker
Apr 25 Javascript
AngularJS实时获取并显示密码的方法
Feb 06 Javascript
element el-input directive数字进行控制
Oct 11 Javascript
Element Backtop回到顶部的具体使用
Jul 27 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
几种显示数据的方法的比较
2006/10/09 PHP
php中HTTP_REFERER函数用法实例
2014/11/21 PHP
PHP实现动态web服务器方法
2015/07/29 PHP
php实现xml与json之间的相互转换功能实例
2016/07/07 PHP
详解php语言最牛掰的Laravel框架
2017/11/20 PHP
firefox下对ajax的onreadystatechange的支持情况分析
2009/12/14 Javascript
js 通用javascript函数库整理
2011/08/14 Javascript
浅谈JavaScript超时调用和间歇调用
2015/08/30 Javascript
去除字符串左右两边的空格(实现代码)
2016/05/12 Javascript
深究AngularJS中$sce的使用
2017/06/12 Javascript
vue-image-crop基于Vue的移动端图片裁剪组件示例
2018/08/28 Javascript
微信小程序和百度的语音识别接口详解
2019/05/06 Javascript
node.js的http.createServer过程深入解析
2019/06/06 Javascript
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
基于vuex实现购物车功能
2021/01/10 Vue.js
[04:19]完美世界携手游戏风云打造 卡尔工作室模型介绍篇
2013/04/24 DOTA
用Python脚本来删除指定容量以上的文件的教程
2015/05/04 Python
python使用scrapy发送post请求的坑
2018/09/04 Python
python提取照片坐标信息的实例代码
2019/08/14 Python
python3实现绘制二维点图
2019/12/04 Python
TensorFlow内存管理bfc算法实例
2020/02/03 Python
Python计算公交发车时间的完整代码
2020/02/12 Python
python实现文法左递归的消除方法
2020/05/22 Python
Python读取二进制文件代码方法解析
2020/06/22 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
2020/11/25 Python
莫斯科珠宝厂官方网站:Miuz
2020/09/19 全球购物
海量信息软件测试笔试题
2015/08/08 面试题
即兴演讲稿
2014/01/04 职场文书
党员查摆问题及整改措施
2014/10/10 职场文书
2014年质检员工作总结
2014/11/18 职场文书
2014年惩防体系建设工作总结
2014/12/01 职场文书
鸟的天堂导游词
2015/01/31 职场文书
2015年毕业生实习评语
2015/03/25 职场文书
室外天线与收音机天线杆接合方法
2022/04/05 无线电
Win11远程连接不上怎么办?Win11远程桌面用不了的解决方法
2022/08/05 数码科技
详解CSS3浏览器兼容
2022/12/24 HTML / CSS