本人已经使用vue.js半年多了,在做一些Html5页面的时候发现很多页面都是图片组成的,如果能有效的压缩图片的体积那么整个项目体积就会减少很多,这是为什么写这个简单东西的起点。

Webp 百度百科上已经讲清楚在保持原画质的情况呀体积可以压缩到原来的60%这是很牛逼的一件事。看看webp的兼容情况,下图是caniuse上面最新的webp支持情况

webp兼容情况

兼容情况还是不那么乐观,不过chrome和安卓阵营已经全部支持。所以我还是做了这件事。

Vue.js 的自定义指令系统十分强大是我做这件事的根本原因之一,所以我的设想是在一个指令中传入图片链接,然后在页面渲染的时候根据浏览器是否支持webp格式的图片选择下载那个图片,这里就需要判断浏览器是否支持webp了,这里我用到的是canvas方法,代码如下 var canUseWebp = (function() { var elem = document.createElement('canvas'); if (!!(elem.getContext && elem.getContext('2d'))) { return elem.toDataURL('image/webp').indexOf('data:image/webp') === 0; } else { return false; } })();

这时候就非常简单了指令在update的时候根据是否支持然后选择不同的图片 function update(el, option) { var attr = option.arg || 'src'; if (el.tagName.toLowerCase() === 'img' && option.value) { el.setAttribute(attr, option.value); } };

然而事情的这个时候发现一些小的图标不见了,原来我的webpack配置中设置了小于10k的图片使用base64编码,

所以最终我的更新代码是这样的 function update(el, option) { var attr = option.arg || 'src'; if (el.tagName.toLowerCase() === 'img' && option.value) { if (option.value.indexOf('data:image') < 0) { var tmp = option.value.substring(0, option.value.lastIndexOf('.')) + '.webp'; el.setAttribute(attr, canUseWebp ? tmp : option.value); } else { el.setAttribute(attr, option.value); } } };

这个时候vue.js 2.0发布了。我有针对 2.0版本做了支持,由于我的指令非常简单,所以代码很轻松 var isVueNext = Vue.version.split('.')[0] === '2'; if (isVueNext) { Vue.directive('webp', function(el, binding) { update(el, { arg: binding.arg, value: binding.value }); }) } else { Vue.directive('webp', { bind: function() {}, update: function(val, old) { update(this.el, { arg: this.arg, value: val }); }, unbind: function() {} }) } };

这样我的vue-webp指令就算完成了。

只有指令可不行,每次都要自己生成一份webp格式的图片,这太不友好了。我有查找一番,发现一个webp-loader可以在webpack打包和dev的时候自动生成相应的webp文件,太好了。使用原作者的webp-loader发现文件的hash不一样,我又用imagemin最新版本升级了一下,上传到npm叫webpn-loader(原谅我不会命名),

具体使用方法可以参考我的 Vue.js 2.0 后台项目 模板项目

谢谢大家,看到这里。欢迎各种star

webp的js插件_Vuejs webp图片支持,插件开发过程~ - 简书相关推荐

  1. ImageLightbox.js – 响应式的图片 Lightbox 插件

    ImageLightbox.js 是一款很简洁的用于显示图片灯箱效果(Lightbox)的插件,没有字幕,导航按钮或默认背景.如果默认功能不够用的话,你可以很容易地自定义 JavaScript 函数扩 ...

  2. 知乎ajax采集,胖鼠采集WordPress插件教程-WP自动采集和发布简书,微信公众号,知乎等任意网站...

    WordPress本来是一个博客,但是由于功能强大.用户众多,发展到现在Wordpress已经成为了一个CMS平台了,甚至有一些企业建站都用了Wordpress,真的是无处不在.Wordpress用于 ...

  3. yy 服务器维护中 图片无法显示,解决简书图片不显示问题“系统维护中,图片暂时无法加载”...

    天突然发现之前的文章图片全部都这样了,我还以为图片丢了! 9949918-5bfb96c2b65b9c7e.png 但是其实图片还是可以访问的 配合 Chrome,Safari 扩展程序 Tamper ...

  4. html图片分类插件,360度图片全景插件JS Cloudimage 360

    JS Cloudimage 360 View 是一种简单的交互式资源,可用于提供产品的虚拟浏览. 使用方法 第 1 步:安装 在正文标记中的body内容之后,将带有 CDN 链接的脚本标记添加到 js ...

  5. web图片裁切插件 cropper.js 详细介绍

    cropper.js一个用来处理图片的插件,可以使用它来实现图片的各种模式下的裁切效果,当我们在做一个上传头像或者上传图片功能的时候,需要用户裁切出用户想要的图片位置就可以利用这个插件来实现','cr ...

  6. js大屏导出图片_超大图片全屏动态展示js插件

    intense-images是一款非常实用的超大图片全屏动态展示js插件.该图片查看插件可以全屏显示超大图片,可以使用鼠标来和图片进行交互,上下左右移动鼠标会相应的移动图片,对于超大图片的展示是非常好 ...

  7. html中剪切图片所用插件,简单功能强大的jQuery图片剪裁插件Image Cropper

    插件描述:相信很多朋友都在大型的网站,如新浪微博.QQ微博上看到过头像裁图工具,感觉很高大尚吧,今天朋友们有福了,今天就来说一说一款这么高大尚的插件cropper,cropper是一款使用简单且功能强 ...

  8. html图片自动剪裁,jQuery简单且功能强大的图片剪裁插件

    cropper是一款使用简单且功能强大的图片剪裁jQuery插件.该图片剪裁插件支持图片放大缩小,支持鼠标滚轮操作,支持图片旋转,支持触摸屏设备,支持canvas,并且支持跨浏览器使用. croppe ...

  9. 简单粗暴的移动端图片浏览插件demo

    使用方法: 首先引入 jQuery <script src="./fly-zomm-img.min.js"></script> 再引入 图片浏览插件 < ...

  10. webp的js插件_网页webp解决方案

    背景说明 某个国际化项目.前端用的技术栈是vue全家桶,使用nuxt-ssr渲染. 项目遇到的问题 项目中用到了大量的产品图片和比较大的banner图片.因为服务器在国外,也没有对静态服务器有相应的配 ...

最新文章

  1. 中科院韩先培:预训练模型怎样成为下一代知识图谱
  2. shell 练习(13) —— 监控 httpd 进程数是否异常
  3. index.html文件作用,MEAN JS – 主要的html文件(index.html)位于何处
  4. C++ 十进制转其他进制
  5. ITK:提取二进制图像中斑点的内部和外部边界
  6. java二维码生成技术
  7. ABAP应用服务器的HTTP响应状态码(Status Code)
  8. shell的交互式和非交互式登录
  9. 阿里云史上最大技术升级:面向万物智能的飞天2.0
  10. webpack入坑指南
  11. 怎么升级Android Studio版本,Android studio 2 版本升级 Android studio 3 版本注意事项
  12. 微信小程序中使用 web-view 内嵌 H5 时,登录问题的处理方法
  13. Acronisnbsp;Truenbsp;Image进行…
  14. 使用 ffmpeg 进行视频(ts)合并
  15. 如何用excel做正交分析_利用Excel进行正交设计及分析
  16. Relational Knowledge Distillation解读
  17. webpack调用vue中报错, [WDS] Disconnected!解决方法
  18. 老大让我优化数据库,我上来就分库分表,他过来就是一jio
  19. vue页面接收后端传递数值后保留两位小数
  20. [c#] DirectoryInfo.GetDirectories() 能扫描读取到文件夹,目录里却不存在。

热门文章

  1. 7-7 六度空间 C语言
  2. goldwave简单使用
  3. mysql 求季度产量平均值
  4. 思科交换机端口模式配置 端口安全配置 思科模拟器
  5. 解决flume整合kafka报错Attempt to heart beat failed since member id is not valid, reset it and try to re-jo
  6. IIS网站中下载.bat文件
  7. JAVA中黄金分割点的问题
  8. 机械革命bios升级_¥1500买6年前神舟老战神,3内存+4硬盘升级潜力强,鲁大师15万!...
  9. 座位安排(seat)
  10. macOSX下格式化外接固态硬盘