UNPKG

@~lisfan/vue-upyun-image-format

Version:

vue过滤器插件-又拍云图片处理工具:默认以指定的策略规则进行了处理优化

150 lines (113 loc) 4.05 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>utils/webp-features-support.js - Documentation</title> <script src="scripts/prettify/prettify.js"></script> <script src="scripts/prettify/lang-css.js"></script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="styles/prettify.css"> <link type="text/css" rel="stylesheet" href="styles/jsdoc.css"> </head> <body> <input type="checkbox" id="nav-trigger" class="nav-trigger" /> <label for="nav-trigger" class="navicon-button x"> <div class="navicon"></div> </label> <label for="nav-trigger" class="overlay"></label> <nav> <h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#install">install</a></li><li><a href="global.html#image-format">image-format</a></li></ul> </nav> <div id="main"> <h1 class="page-title">utils/webp-features-support.js</h1> <section> <article> <pre class="prettyprint source linenums"><code>/** * @file 检测webp特性的支持程度 */ import validation from '@~lisfan/validation' import Logger from '@~lisfan/logger' const logger = new Logger({ name: 'webp-features', debug: false }) // 将检测结果存储在sessionStorage中,期间只检测一次,避免重复求值 const storageName = 'WEBP_FEATURES' const WEBP_FEATURES = JSON.parse(global.sessionStorage.getItem(storageName)) || { lossy: undefined, lossless: undefined, animation: undefined } const IMAGES_SOURCE = { // 有损图片 lossy: "data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA", // 无损图片 lossless: "data:image/webp;base64,UklGRhoAAABXRUJQVlA4TA0AAAAvAAAAEAcQERGIiP4HAA==", // 支持alpha通道图片 // alpha: // "data:image/webp;base64,UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAARBxAR/Q9ERP8DAABWUDggGAAAABQBAJ0BKgEAAQAAAP4AAA3AAP7mtQAAAA==", // 动态webp图片 animation: "data:image/webp;base64,UklGRlIAAABXRUJQVlA4WAoAAAASAAAAAAAAAAAAQU5JTQYAAAD/////AABBTk1GJgAAAAAAAAAAAAAAAAAAAGQAAABWUDhMDQAAAC8AAAAQBxAREYiI/gcA" } /** * 检测webp特性的支持程度 * @ignore * @param {string} feature - 特性值 * @returns {Promise} */ function checkWebpFeatures(feature) { return new Promise((resolve, reject) => { let $image = new Image() $image.onload = function () { ($image.width > 0) &amp;&amp; ($image.height > 0) ? resolve(true) : reject(false) } $image.onerror = function () { reject(false) } $image.src = IMAGES_SOURCE[feature] }) } // 发起检测 Object.entries(WEBP_FEATURES).forEach(([feature, isSupport]) => { // 如果已经从缓存中先进知了支持结果,则不再处理 if (validation.isBoolean(isSupport)) { logger.log('sessionStorage already existed test result:', feature, isSupport) return } logger.log(`checking webp ${feature} feature`) checkWebpFeatures(feature).then(() => { WEBP_FEATURES[feature] = true logger.log(`so lucky! support ${feature} feature`) }).catch(() => { WEBP_FEATURES[feature] = false logger.log(`sorry! unsupport ${feature} feature`) }).finally(() => { // 存储检测成功后的结果 global.sessionStorage.setItem(storageName, JSON.stringify(WEBP_FEATURES)) }) }) export default { /** * 是否支持对应的webp特性 * * @param {string} feature - 特性值 * @returns {boolean} */ support(feature) { return WEBP_FEATURES[feature] } } </code></pre> </article> </section> </div> <br class="clear"> <footer> Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Tue Nov 07 2017 17:34:19 GMT+0800 (CST) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme. </footer> <script>prettyPrint();</script> <script src="scripts/linenumber.js"></script> </body> </html>