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 相关文章推荐
JavaScript实际应用:innerHTMl和确认提示的使用
Jun 22 Javascript
jQuery html() in Firefox (uses .innerHTML) ignores DOM changes
Mar 05 Javascript
jQuery控制输入框只能输入数值的小例子
Mar 20 Javascript
jQuery的3种请求方式$.post,$.get,$.getJSON
Mar 28 Javascript
jquery 插件实现瀑布流图片展示实例
Apr 03 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
Oct 27 Javascript
Bootstrap CSS布局之表单
Dec 17 Javascript
js 数据存储和DOM编程
Feb 09 Javascript
jquery实现数字输入框
Feb 22 Javascript
原生JS实现图片网格式渐显、渐隐效果
Jun 05 Javascript
vue 中url 链接左边的小图标更改问题
Dec 30 Javascript
Nuxt的路由配置和参数传递方式
Nov 06 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&amp;mysql(六)
2006/10/09 PHP
PHP中文URL编解码(urlencode()rawurlencode()
2010/07/03 PHP
php图片的裁剪与缩放生成符合需求的缩略图
2013/01/11 PHP
深入分析PHP优化及注意事项
2016/07/04 PHP
PHP通过get方法获得form表单数据方法总结
2018/09/12 PHP
解决 FireFox 下[使用event很麻烦] 的问题.
2006/08/22 Javascript
JavaScript 对话框和状态栏使用说明
2009/10/25 Javascript
javascript 模式设计之工厂模式学习心得
2010/04/27 Javascript
JavaScript 对象模型 执行模型
2010/10/15 Javascript
HTML中的setCapture和releaseCapture使用介绍
2012/03/21 Javascript
使用js操作cookie的一点小收获分享
2013/09/03 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
微信小程序 HTTPS报错整理常见问题及解决方案
2016/12/14 Javascript
基于jQuery实现瀑布流页面
2017/04/11 jQuery
javascript 判断一个对象为数组的方法
2017/05/03 Javascript
JS实现的3des+base64加密解密算法完整示例
2018/05/18 Javascript
vue中的ref和$refs的使用
2018/11/22 Javascript
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
微信小程序一周时间表功能实现
2019/10/17 Javascript
JS PHP字符串截取函数实现原理解析
2020/08/29 Javascript
[04:26]DOTA2上海特锦赛小组赛第二日 TOP10精彩集锦
2016/02/27 DOTA
[01:01:52]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第二场 1月9日
2021/03/11 DOTA
[06:45]DOTA2-DPC中国联赛 正赛 Magma vs LBZS 选手采访
2021/03/11 DOTA
Python subprocess模块详细解读
2018/01/29 Python
pytorch对梯度进行可视化进行梯度检查教程
2020/02/04 Python
使用OpenCV实现道路车辆计数的使用方法
2020/07/15 Python
SQL中where和having的区别
2012/06/17 面试题
延安红色之旅心得体会
2014/10/07 职场文书
节约用电通知
2015/04/25 职场文书
介绍信范文大全
2015/05/07 职场文书
2015年学校医务室工作总结
2015/07/20 职场文书
2015年政教主任工作总结
2015/07/23 职场文书
采购部2015年度工作总结
2015/07/24 职场文书
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python
Redis高并发防止秒杀超卖实战源码解决方案
2021/11/01 Redis
《战锤40K:暗潮》跳票至9月 公布新宣传片
2022/04/03 其他游戏