-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsrcsetfill.js
More file actions
63 lines (54 loc) · 1.66 KB
/
Copy pathsrcsetfill.js
File metadata and controls
63 lines (54 loc) · 1.66 KB
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
(function ( w ) {
w.srcsetfill = function () {
var images = document.getElementsByTagName('img'),
srcsets = {},
winWidth = w.document.documentElement.clientWidth,
infinityThreshold = 200;
var buildSet = function (sets) {
for (var si=0; si<sets.length; si++) {
var set = sets[si].replace(/^[\s]/, '').split(' ');
var setw = parseInt(set[1],10);
if (!set[1]) { setw = 'infinity'; }
srcsets[setw] = set[0];
}
};
var getLargestSize = function (set) {
var largest = 0;
for (var size in srcsets) {
largest = ( srcsets.hasOwnProperty(size) && parseInt(size,10) > largest ) ? size : largest;
}
return parseInt(largest,10);
};
for ( var i=0; i<images.length; i++ ){
if ( images[i].getAttribute('srcset') ) {
var sets = images[i].getAttribute('srcset').split(',');
buildSet(sets);
var largestSize = getLargestSize(srcsets);
var imgsrc = '';
for (var size in srcsets) {
if ( srcsets.hasOwnProperty(size) ) {
if (winWidth >= size && size !== 'infinity') {
imgsrc = srcsets[size];
} else if ( size === 'infinity' && winWidth > (largestSize+infinityThreshold) ) {
imgsrc = srcsets[size];
}
}
}
images[i].src = imgsrc;
}
}
};
// Run on resize and domready (w.load as a fallback)
if( w.addEventListener ){
w.addEventListener( "resize", w.srcsetfill, false );
w.addEventListener( "DOMContentLoaded", function(){
w.srcsetfill();
// Run once only
w.removeEventListener( "load", w.srcsetfill, false );
}, false );
w.addEventListener( "load", w.srcsetfill, false );
}
else if( w.attachEvent ){
w.attachEvent( "onload", w.srcsetfill );
}
})(this);