This time I will bring you the plug-in development of Vuejs webp that supports images. What are the precautions for Vuejs webp plug-in development? The following is a practical case, let's take a look.
I have been using vue.js for more than half a year. When I was making some Html5 pages, I found that many pages were composed of pictures. If the size of the pictures could be effectively compressed, the size of the entire project would be reduced a lot. This This is the starting point for why I wrote this simple thing. Webp Baidu Encyclopedia has made it clear that the volume can be compressed to 60% of the original while maintaining the original image quality. This is a very cool thing. Take a look at the compatibility of webp. The picture below shows the latest webp support on caniusewebp compatibilityvar 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; } })();
function update(el, option) { var attr = option.arg || 'src'; if (el.tagName.toLowerCase() === 'img' && option.value) { el.setAttribute(attr, option.value); } };
So my final updated code is like this
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); } } };
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() {} }) } };
Only instructions are not enough. You have to generate a picture in webp format yourself every time, which is too unfriendly. I did some searching and found that a webp-loader can automatically generate the corresponding webp file during webpack packaging and dev, which is great. Using the original author's webp-loader, I found that the hash of the file was different. I upgraded it with the latest version of imagemin, uploaded it to npm and called it webpn-loader (forgive me for not naming it),
js knowledge about BOM operations
js regular expression 10 application examples
The above is the detailed content of Vuejs webp supports image plug-in development. For more information, please follow other related articles on the PHP Chinese website!