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 相关文章推荐
jQuery 注意事项 与原因分析
Apr 24 Javascript
Javascript 中 null、NaN和undefined的区别总结
Apr 10 Javascript
Javascript实现动态菜单添加的实例代码
Jul 05 Javascript
使用js 设置url参数
Jul 08 Javascript
简介JavaScript中substring()方法的使用
Jun 06 Javascript
jQuery实现输入框下拉列表树插件特效代码分享
Aug 27 Javascript
JavaScript动态设置div的样式的方法
Dec 26 Javascript
js实现5秒倒计时重新发送短信功能
Feb 05 Javascript
vue.js中引入vuex储存接口数据及调用的详细流程
Dec 14 Javascript
基于Vuejs的搜索匹配功能实现方法
Mar 03 Javascript
灵活使用console让js调试更简单的方法步骤
Apr 23 Javascript
javascript中的闭包概念与用法实践分析
Jul 26 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
PHP4和PHP5性能测试和对比 测试代码与环境
2007/08/17 PHP
php 获取客户端的真实ip
2009/11/30 PHP
基于php split()函数的用法详解
2013/06/05 PHP
php foreach正序倒序输出示例代码
2014/07/01 PHP
thinkPHP3.2简单实现文件上传的方法
2016/05/16 PHP
PHP简单读取xml文件的方法示例
2017/04/20 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
详解PHP中的 input属性(隐藏 只读 限制)
2017/08/14 PHP
JS 删除字符串最后一个字符的实现代码
2014/02/20 Javascript
javascript模拟post提交隐藏地址栏的参数
2014/09/03 Javascript
AngularJS中过滤器的使用与自定义实例代码
2016/09/17 Javascript
AngularJS ng-repeat数组有重复值的解决方法
2016/10/23 Javascript
Angular2学习笔记——详解NgModule模块
2016/12/02 Javascript
Google 爬虫如何抓取 JavaScript 的内容
2017/04/07 Javascript
vue2.0 自定义日期时间过滤器
2017/06/07 Javascript
JS库particles.js创建超炫背景粒子插件(附源码下载)
2017/09/13 Javascript
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
小程序关于请求同步的总结
2019/05/05 Javascript
Promise扫盲贴
2019/06/24 Javascript
利用 JavaScript 实现并发控制的示例代码
2020/12/31 Javascript
Python程序中用csv模块来操作csv文件的基本使用教程
2016/03/03 Python
Python爬虫DOTA排行榜爬取实例(分享)
2017/06/13 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
Django框架实现的分页demo示例
2019/05/25 Python
使用Python函数进行模块化的实现
2019/11/15 Python
jupyternotebook 撤销删除的操作方式
2020/04/17 Python
python实现批处理文件
2020/07/28 Python
Farnell德国:电子元器件供应商
2018/07/10 全球购物
中国一家综合的外贸B2C电子商务网站:DealeXtreme(DX)
2020/03/10 全球购物
戴森比利时官方网站:Dyson BE
2020/10/03 全球购物
计算机专业个人求职自荐信
2013/09/21 职场文书
五一家具促销方案
2014/01/10 职场文书
公务员政审个人鉴定
2014/02/25 职场文书
幼儿园大班见习报告
2014/10/31 职场文书
无锡灵山大佛导游词
2015/02/09 职场文书
会计工作能力自我评价
2015/03/05 职场文书