|
|
require('./webp-support');
|
|
|
|
|
|
const $ = require('yoho-jquery');
|
|
|
const imgSrcHandle = require('./img-src-handle');
|
|
|
|
|
|
require('jquery-lazyload');
|
|
|
|
|
|
const defaultQuality = 60;
|
|
|
|
|
|
/**
|
|
|
* 图片链接处理
|
|
|
*/
|
|
|
const imgSrcHandle = (imgUrl, params) => {
|
|
|
if (!imgUrl) {
|
|
|
return imgUrl;
|
|
|
}
|
|
|
|
|
|
let splits = imgUrl.split('?');
|
|
|
let url = splits[0];
|
|
|
let query = splits[1] || '';
|
|
|
|
|
|
if (!query || query === 'imageslim') {
|
|
|
if (window.supportWebp) {
|
|
|
url += `?imageView2/0/interlace/1/format/webp/q/${params.q}`;
|
|
|
} else {
|
|
|
let extQuery = params.q === defaultQuality ? '?imageslim' : `?imageView2/0/interlace/1/q/${params.q}`;
|
|
|
|
|
|
url += extQuery;
|
|
|
}
|
|
|
imgUrl = url;
|
|
|
} else if (/imageView2/.test(query)) {
|
|
|
if (!/\/q\/\d+/.test(query)) {
|
|
|
imgUrl += `/q/${params.q}`;
|
|
|
} else {
|
|
|
imgUrl = imgUrl.replace(/\/q\/\d+/g, '/q/' + params.q);
|
|
|
}
|
|
|
|
|
|
if (window.supportWebp && !/format\//i.test(query)) {
|
|
|
imgUrl += '/format/webp';
|
|
|
}
|
|
|
|
|
|
if (window.supportWebp && (/format\/png/i.test(query) || /format\/jpg/i.test(query))) {
|
|
|
imgUrl = imgUrl.replace(/format\/png/i, 'format/webp').replace(/format\/jpg/i, 'format/webp');
|
|
|
}
|
|
|
} else if (/imageMogr2/.test(query)) {
|
|
|
if (!/\/quality\/\d+/.test(query)) {
|
|
|
imgUrl += `/quality/${params.q}`;
|
|
|
} else {
|
|
|
imgUrl = imgUrl.replace(/\/quality\/\d+/g, '/quality/' + params.q);
|
|
|
}
|
|
|
|
|
|
if (window.supportWebp && !/format\//.test(query)) {
|
|
|
imgUrl += '/format/webp';
|
|
|
}
|
|
|
|
|
|
if (window.supportWebp && (/format\/png/i.test(query) || /format\/jpg/i.test(query))) {
|
|
|
imgUrl = imgUrl.replace(/format\/png/i, 'format/webp').replace(/format\/jpg/i, 'format/webp');
|
|
|
}
|
|
|
}
|
|
|
return imgUrl;
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* 图片链接预处理后使用原生 lazyload
|
|
|
*/
|
|
|
const rawLazyload = (selector, options) => {
|
|
|
let $imgs;
|
|
|
let params = {
|
|
|
threshold: 700 * 3 // 一页大概700 ,提前加载三、四页
|
|
|
};
|
|
|
let imgParams = {
|
|
|
q: options && options.q || defaultQuality
|
|
|
threshold: 700 * 2 // 一页大概700 ,提前加载三、四页
|
|
|
};
|
|
|
|
|
|
if (selector instanceof $) {
|
...
|
...
|
@@ -81,7 +22,7 @@ const rawLazyload = (selector, options) => { |
|
|
|
|
|
const imgsProcess = () => {
|
|
|
$imgs.each((index, elem) => {
|
|
|
$(elem).attr('data-original', imgSrcHandle($(elem).data('original'), imgParams));
|
|
|
$(elem).attr('data-original', imgSrcHandle($(elem).data('original'), options));
|
|
|
});
|
|
|
$imgs.lazyload(params);
|
|
|
};
|
...
|
...
|
|