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

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

兼容状况仍是不那么乐观,不过chrome和安卓阵营已经所有支持。因此我仍是作了这件事。git

Vue.js 的自定义指令系统十分强大是我作这件事的根本缘由之一,因此个人设想是在一个指令中传入图片连接,而后在页面渲染的时候根据浏览器是否支持webp格式的图片选择下载那个图片,这里就须要判断浏览器是否支持webp了,这里我用到的是canvas方法,代码以下github

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的时候根据是否支持而后选择不一样的图片web

function update(el, option) {

var attr = option.arg || 'src';

if (el.tagName.toLowerCase() === 'img' && option.value) {

el.setAttribute(attr, option.value);

}

};

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

因此最终个人更新代码是这样的chrome

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版本作了支持,因为个人指令很是简单,因此代码很轻松npm

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 后台项目 模板项目canvas

谢谢你们,看到这里。欢迎各类star浏览器

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. js插件---IUpload文件上传插件(包括图片)

    js插件---IUpload文件上传插件(包括图片) 一.总结 一句话总结:上传插件找到真正上传位置的代码,这样就可以知道整个上传插件的逻辑了, 找资料还是github+官方 1.如何在js中找到真正 ...

  10. cropper.js 图像旋转问题_JavaScript开源良心插件,纯前端网页图片剪裁插件——cropperjs...

    介绍 cropperjs是一款基于JavaScript的网页端图片裁剪插件,可能相对于图片预览来说,图片的裁剪使用场景貌似并不是很多,但是图片预览插件又要比裁剪插件容易找到,而且从实现难度上来说也不及 ...

最新文章

  1. 7 虚拟磁盘恢复虚拟机
  2. python能做软件开发吗-python代码能做成软件吗
  3. 【Python刷题】_8
  4. English Debate Sample with Immigration with Closing Opposition Member and Whip
  5. 漫画算法:最小栈的实现
  6. 诊断虚拟机频繁 OOM 的问题
  7. ArcEngine坐标操作那些事
  8. 计算年龄案例(JS)
  9. VMware下Ubuntu 18.04关机后无法上网
  10. 专注于分享,米狗网!
  11. 基于迁移学习的mini-imagenet数据分类实践
  12. 如何自学html5 web前端工程师培训视频教程
  13. 三相异步电动机的公式
  14. XCTF练习题---MISC---simple_transfer
  15. android 入门记录
  16. uni-app获取省市区详细位置信息
  17. 6-5 奇数值结点链表 (20分)
  18. 杭电计算机线上复试,线上复试实锤?在线复试技巧拿走不谢!
  19. 第6章 冷眼看“学而无用”——《逆袭大学》连载
  20. html字体及颜色设置

热门文章

  1. 2021-05-01微信小程序存储数据的几种方式
  2. CorelDRAW2022矢量绘图软件老牌的矢量图形制作工具
  3. python办公自动化——批量合并工作簿案例
  4. java的程序员工资一般多少_JAVA程序员工资一般是多少
  5. keil5工程函数无法跳转到函数定义解决方法
  6. C. Minimum Notation #823 div2
  7. 阿里巴巴字体库使用方法
  8. 阿里巴巴面试算法题目:25匹赛马,5个跑道,也就是说每次有5匹马可以同时比赛。问最少比赛多少次可以知道跑得最快的5匹马
  9. Windows10无法启动windows安全中心服务怎么办?
  10. 阿里云Blink快速入门