-
-
Notifications
You must be signed in to change notification settings - Fork 199
/
progressive-background.js
42 lines (31 loc) · 1.18 KB
/
progressive-background.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import stackblur from 'stackblur-canvas';
/*
* Progressive background images
*/
export default () => {
const imgToCanvas = (img) => {
const canvas = document.createElement('canvas');
canvas.width = img.naturalWidth;
canvas.height = img.naturalHeight;
canvas.getContext('2d').drawImage(img, 0, 0);
return canvas;
};
findAll(document, '.progressive-background').forEach((element) => {
const sdSrc = element.dataset.sd;
const hdSrc = element.dataset.hd;
const bgPrefix = element.dataset.bgPrefix ? `${element.dataset.bgPrefix}, ` : '';
const sd = new Image();
const hd = new Image();
sd.src = sdSrc;
on(sd, 'load', () => {
const canvas = imgToCanvas(sd);
stackblur.canvasRGB(canvas, 0, 0, canvas.width, canvas.height, 10);
element.style['background-image'] = `${bgPrefix}url(${canvas.toDataURL('image/png')})`;
// Load high quality version after low quality one
hd.src = hdSrc;
on(hd, 'load', () => {
element.style['background-image'] = `${bgPrefix}url(${hd.src})`;
});
});
});
};