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入门教程(3) js面向对象
Jan 31 Javascript
利用javascript/jquery对上传文件格式过滤的方法
Jul 25 Javascript
js运动框架_包括图片的淡入淡出效果
May 11 Javascript
JS去除数组重复值的五种不同方法
Sep 06 Javascript
使用命令对象代替switch语句的写法示例
Feb 28 Javascript
AngularJS自定义服务与fliter的混合使用
Nov 24 Javascript
详解javascript立即执行函数表达式IIFE
Feb 13 Javascript
ES6新特性一: let和const命令详解
Apr 20 Javascript
在iFrame子页面里实现模态框的方法
Aug 17 Javascript
微信小程序首页的分类功能和搜索功能的实现思路及代码详解
Sep 11 Javascript
微信小程序连续签到7天积分获得功能的示例代码
Aug 20 Javascript
react 路由Link配置详解
Nov 11 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时的4个配置修改说明
2015/10/19 PHP
PHP微信刮刮卡 附微信接口
2016/07/22 PHP
laravel 根据不同组织加载不同视图的实现
2019/10/14 PHP
InnerHtml和InnerText的区别分析
2009/03/13 Javascript
Javascript JSQL,SQL无处不在,
2010/05/05 Javascript
关于js datetime的那点事
2011/11/15 Javascript
javascript获得服务器端控件的ID的实现代码
2011/12/28 Javascript
深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
2012/01/15 Javascript
ScrollDown的基本操作示例
2013/06/09 Javascript
JavaScript获取XML数据附示例截图
2014/03/05 Javascript
js身份证判断方法支持15位和18位
2014/03/18 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
2014/04/16 Javascript
jquery实现下拉框多选方法介绍
2017/01/03 Javascript
template.js前端模板引擎使用详解
2017/10/10 Javascript
layui实现动态和静态分页
2018/04/28 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
详解nodejs http请求相关总结
2019/03/31 NodeJs
微信小程序实现下拉框功能
2019/07/16 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
2019/10/21 Javascript
vue-cli4.x创建企业级项目的方法步骤
2020/06/18 Javascript
[55:03]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.20
2020/11/20 DOTA
Python随机生成均匀分布在三角形内或者任意多边形内的点
2017/12/14 Python
Django中的CBV和FBV示例介绍
2018/02/25 Python
python基于C/S模式实现聊天室功能
2019/01/09 Python
python编写俄罗斯方块
2020/03/13 Python
Python3开发环境搭建详细教程
2020/06/18 Python
python3排序的实例方法
2020/10/20 Python
CSS3媒体查询Media Queries基础学习教程
2016/02/29 HTML / CSS
css3实现动画的三种方式
2020/08/24 HTML / CSS
Lands’ End英国官方网站:高质量男女服装
2017/10/07 全球购物
新大陆软件面试题
2016/11/24 面试题
大一学生职业生涯规划
2014/03/11 职场文书
2015年村计划生育工作总结
2015/04/28 职场文书
子女赡养老人协议书
2016/03/23 职场文书
解决Pytorch半精度浮点型网络训练的问题
2021/05/24 Python
OpenCV绘制圆端矩形的示例代码
2021/08/30 Python