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 相关文章推荐
奇妙的js
Sep 24 Javascript
JQuery 小练习(实例代码)
Aug 07 Javascript
JavaScript中神奇的call()方法
Mar 12 Javascript
javascript判断数组内是否重复的方法
Apr 21 Javascript
jQuery树形控件zTree使用小结
Aug 02 Javascript
动态生成的DOM不会触发onclick事件的原因及解决方法
Aug 06 Javascript
利用Javascript实现BMI计算器
Aug 16 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
Feb 15 Javascript
JS实现简单的选择题测评系统代码思路详解(demo)
Sep 03 Javascript
jQuery实现定时隐藏对话框的方法分析
Feb 12 jQuery
node版本管理工具n包使用教程详解
Nov 09 Javascript
vue-router 前端路由之路由传值的方式详解
Apr 30 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如何编写易读的代码
2007/07/10 PHP
解析php类的注册与自动加载
2013/07/05 PHP
php include类文件超时问题处理
2015/02/06 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
2015/10/09 PHP
浅谈PHP命令执行php文件需要注意的问题
2016/12/16 PHP
PHP中Notice错误常见解决方法
2017/04/28 PHP
PHP getNamespaces()函数讲解
2019/02/03 PHP
PHP命名空间用法实例分析
2019/09/04 PHP
用php实现分页效果的示例代码
2020/12/10 PHP
js类中获取外部函数名的方法与代码
2007/09/12 Javascript
JS+XML 省份和城市之间的联动实现代码
2009/10/14 Javascript
js实现鼠标点击文本框自动选中内容的方法
2015/08/20 Javascript
JavaScript缓冲运动实现方法(2则示例)
2016/01/08 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
深入理解JS继承和原型链的问题
2016/12/17 Javascript
jQuery UI仿淘宝搜索下拉列表功能
2017/01/10 Javascript
浅谈Vue.js 组件中的v-on绑定自定义事件理解
2017/11/17 Javascript
react-router v4如何使用history控制路由跳转详解
2018/01/09 Javascript
jQuery实现轮播图及其原理详解
2020/04/12 jQuery
node和vue实现商城用户地址模块
2018/12/05 Javascript
jQuery操作cookie的示例代码
2019/06/05 jQuery
[51:06]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS Liquid
2018/03/30 DOTA
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
Python下Fabric的简单部署方法
2015/07/14 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
2019/04/11 Python
简单了解Python多态与属性运行原理
2020/06/15 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
2020/06/18 Python
flask开启多线程的具体方法
2020/08/02 Python
Python中的特殊方法以及应用详解
2020/09/20 Python
芬兰设计商店美国:Finnish Design Shop US
2019/03/25 全球购物
实习生单位鉴定意见
2013/12/04 职场文书
儿园租房协议书范本
2014/12/02 职场文书
单身证明范本
2015/06/15 职场文书
Java 超详细讲解ThreadLocal类的使用
2022/04/07 Java/Android
MongoDB修改oplog大小的四种方法
2022/04/11 MongoDB