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 相关文章推荐
c#和Javascript操作同一json对象的实现代码
Jan 17 Javascript
Javascript页面添加到收藏夹的简单方法
Aug 07 Javascript
node.js中的fs.chmodSync方法使用说明
Dec 18 Javascript
快速学习jQuery插件 Cookie插件使用方法
Dec 01 Javascript
关于Bootstrap弹出框无法调用问题的解决办法
Mar 10 Javascript
前端程序员必须知道的高性能Javascript知识
Aug 24 Javascript
javascript中BOM基础知识总结
Feb 14 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
Sep 29 Javascript
详解一个小实例理解js原型和继承
Apr 24 Javascript
小程序最新获取用户昵称和头像的方法总结
Sep 23 Javascript
重置Redux的状态数据的方法实现
Nov 18 Javascript
浅谈vue 多个变量同时赋相同值互相影响
Aug 05 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 7中不要做的10件事
2016/09/18 PHP
如何用PHP做到页面注册审核
2017/03/02 PHP
php设计模式之适配器模式原理、用法及注意事项详解
2019/09/24 PHP
使用jQuery同时控制四张图片的伸缩实现代码
2013/04/19 Javascript
js setTimeout opener的用法示例详解
2013/10/23 Javascript
javascript实现动态统计图开发实例
2015/11/21 Javascript
jquery自定义表格样式
2015/11/23 Javascript
javascript作用域链(Scope Chain)用法实例解析
2015/11/30 Javascript
纯js代码制作的网页时钟特效【附实例】
2016/03/30 Javascript
JS简单实现仿百度控制台输出信息效果
2016/09/04 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
layui radio性别单选框赋值方法
2018/08/15 Javascript
记一次webapck4 配置文件无效的解决历程
2018/09/19 Javascript
使用jQuery动态设置单选框的选中效果
2018/12/06 jQuery
JS实现图片轮播效果实例详解【可自动和手动】
2019/04/04 Javascript
node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)
2019/04/10 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
2019/04/26 Javascript
使用Vue-Awesome-Swiper实现旋转叠加轮播效果&amp;平移轮播效果
2019/08/16 Javascript
[51:07]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
详解Python中for循环的使用
2015/04/14 Python
Python实现数通设备端口使用情况监控实例
2015/07/15 Python
漂亮的Django Markdown富文本app插件的实现
2019/01/02 Python
python二进制读写及特殊码同步实现详解
2019/10/11 Python
Python直接赋值及深浅拷贝原理详解
2020/09/05 Python
html5小程序飞入购物车(抛物线绘制运动轨迹点)
2020/10/19 HTML / CSS
荷兰优雅女装网上商店:Heine
2016/11/14 全球购物
欧尚俄罗斯网上超市:Auchan俄罗斯
2018/05/03 全球购物
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
维也纳通行证:Vienna PASS
2019/07/18 全球购物
JAVA招聘远程笔试题
2015/07/23 面试题
Unix如何在一行中运行多个命令
2015/05/29 面试题
卫校中专生个人自我评价
2013/09/19 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
话题作文之诚信
2019/11/28 职场文书
MySQL不使用order by实现排名的三种思路总结
2021/06/02 MySQL
解决pytorch 损失函数中输入输出不匹配的问题
2021/06/05 Python