Skip to content

Commit c02712a

Browse files
committed
Improve vendor prefix detection logic
1 parent 47d53ac commit c02712a

File tree

3 files changed

+43
-35
lines changed

3 files changed

+43
-35
lines changed

jquery.stellar.js

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,10 @@
4848
setLeft: function($elem, val) { $elem.css('margin-left', val); }
4949
},
5050
transform: {
51-
getTop: function($elem) { return ($elem.css(vendorPrefix + 'transform') !== 'none' ? parseInt($elem.css(vendorPrefix + 'transform').match(/(-?[0-9]+)/g)[5], 10) * -1 : 0); },
51+
getTop: function($elem) { return (getComputedStyle($elem[0])[vendorPrefix('transform')] !== 'none' ? parseInt(getComputedStyle($elem[0])[vendorPrefix('transform')].match(/(-?[0-9]+)/g)[5], 10) * -1 : 0); },
5252
setTop: function($elem, val) { setTransform($elem, val, 'Y'); },
5353

54-
getLeft: function($elem) { return ($elem.css(vendorPrefix + 'transform') !== 'none' ? parseInt($elem.css(vendorPrefix + 'transform').match(/(-?[0-9]+)/g)[4], 10) * -1 : 0); },
54+
getLeft: function($elem) { return (getComputedStyle($elem[0])[vendorPrefix('transform')] !== 'none' ? parseInt(getComputedStyle($elem[0])[vendorPrefix('transform')].match(/(-?[0-9]+)/g)[4], 10) * -1 : 0); },
5555
setLeft: function($elem, val) { setTransform($elem, val, 'X'); }
5656
}
5757
},
@@ -68,20 +68,24 @@
6868
},
6969

7070
vendorPrefix = (function() {
71-
var ua = navigator.userAgent,
72-
prefix = '';
73-
74-
if (/WebKit/.test(ua)) {
75-
prefix = '-webkit-';
76-
} else if (/Firefox/.test(ua)) {
77-
prefix = '-moz-';
78-
} else if (window.opera) {
79-
prefix = '-o-';
80-
} else if (/MSIE/.test(ua)) {
81-
prefix = '-ms-';
71+
var prefixes = /^(Moz|Webkit|Khtml|O|ms|Icab)(?=[A-Z])/,
72+
style = document.getElementsByTagName('script')[0].style,
73+
prefix = '',
74+
prop;
75+
76+
for (prop in style) {
77+
if (prefixes.test(prop)) {
78+
prefix = prop.match(prefixes)[0];
79+
break;
80+
}
8281
}
8382

84-
return prefix;
83+
if ('WebkitOpacity' in style) { prefix = 'Webkit'; }
84+
if ('KhtmlOpacity' in style) { prefix = 'Khtml'; }
85+
86+
return function(property) {
87+
return prefix + (prefix.length > 0 ? property.charAt(0).toUpperCase() + property.slice(1) : property);
88+
};
8589
}()),
8690

8791
supportsBackgroundPositionXY = document.createElement('div').style.backgroundPositionX !== undefined,
@@ -113,12 +117,12 @@
113117
}()),
114118

115119
setTransform = function($elem, val, dimension /* 'X' or 'Y' */) {
116-
var currentTransform = $elem.css(vendorPrefix + 'transform');
120+
var currentTransform = getComputedStyle($elem[0])[vendorPrefix('transform')];
117121

118122
if (currentTransform === 'none') {
119-
$elem.css(vendorPrefix + 'transform', 'translate' + dimension + '(' + val + 'px)');
123+
$elem[0].style[vendorPrefix('transform')] = 'translate' + dimension + '(' + val + 'px)';
120124
} else {
121-
$elem.css(vendorPrefix + 'transform', replaceNthOccurence(currentTransform, /(-?[0-9]+[.]?[0-9]*)/g, (dimension === 'X' ? 5 : 6), val));
125+
$elem[0].style[vendorPrefix('transform')] = replaceNthOccurence(currentTransform, /(-?[0-9]+[.]?[0-9]*)/g, (dimension === 'X' ? 5 : 6), val);
122126
}
123127
},
124128

0 commit comments

Comments
 (0)