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创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
Jun 28 Javascript
JQuery获取当前屏幕的高度宽度的实现代码
Jul 12 Javascript
关于jQuery判断元素是否存在的问题示例探讨
Jul 21 Javascript
jquery中post方法用法实例
Oct 21 Javascript
探寻Javascript执行效率问题
Nov 12 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
Aug 12 Javascript
JavaScript 七大技巧(一)
Dec 13 Javascript
ES6深入理解之“let”能替代”var“吗?
Jun 28 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
Jul 03 jQuery
微信小程序实现底部导航
Nov 05 Javascript
vue鼠标悬停事件实例详解
Apr 01 Javascript
微信小程序点击view动态添加样式过程解析
Jan 21 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与SQL注入攻击[一]
2007/04/17 PHP
php通过Chianz.com获取IP地址与地区的方法
2015/01/14 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
2017/02/08 PHP
JavaScript 私有成员分析
2009/01/13 Javascript
jQuery UI AutoComplete 自动完成使用小记
2010/08/21 Javascript
基于Jquery的简单图片切换效果
2011/01/06 Javascript
js判断undefined类型,undefined,null, 的区别详细解析
2013/12/16 Javascript
js function定义函数的几种不错方法
2014/02/27 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
JavaScript每天必学之基础知识
2016/09/17 Javascript
MUI 上拉刷新/下拉加载功能实例代码
2017/04/13 Javascript
详解从零搭建 vue2 vue-router2 webpack3 工程
2017/11/22 Javascript
微信小程序实现保存图片到相册功能
2018/11/30 Javascript
原来JS还可以这样拆箱转换详解
2019/02/01 Javascript
Vue 的双向绑定原理与用法揭秘
2020/05/06 Javascript
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
python操作CouchDB的方法
2014/10/08 Python
Python使用gensim计算文档相似性
2016/04/10 Python
python字符串的常用操作方法小结
2016/05/21 Python
python队列通信:rabbitMQ的使用(实例讲解)
2017/12/22 Python
Django框架的中的setting.py文件说明详解
2018/10/15 Python
python实现定时发送qq消息
2019/01/18 Python
python 实现二维字典的键值合并等函数
2019/12/06 Python
TensorFlow实现保存训练模型为pd文件并恢复
2020/02/06 Python
自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码
2020/03/30 Python
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
暑期实践思想汇报
2014/01/06 职场文书
化学系大学生自荐信范文
2014/03/01 职场文书
就业协议书怎么填
2014/04/11 职场文书
音乐教师求职信范文
2015/03/20 职场文书
导游词之澳门玫瑰圣母堂
2019/12/03 职场文书
如何利用JavaScript实现二叉搜索树
2021/04/02 Javascript
Pytest allure 命令行参数的使用
2021/04/18 Python
MySQL 分页查询的优化技巧
2021/05/12 MySQL
分布式Redis Cluster集群搭建与Redis基本用法
2022/02/24 Redis
浅谈Vue的computed计算属性
2022/03/21 Vue.js