Découvrez cette solution.
Elle est basée sur le fait que si un navigateur prend en charge les transformations, la valeur de
window.getComputedStyle(el).getPropertyValue('transform')
sera une chaîne contenant la matrice de transformation, lorsqu'une transformation 3D est appliquée à l'élément el
. Sinon, elle sera undefined
ou la chaîne 'none'
, comme c'est le cas pour Opera 12.02.
Il fonctionne sur tous les principaux navigateurs.
Le code:
function has3d() {
if (!window.getComputedStyle) {
return false;
}
var el = document.createElement('p'),
has3d,
transforms = {
'webkitTransform':'-webkit-transform',
'OTransform':'-o-transform',
'msTransform':'-ms-transform',
'MozTransform':'-moz-transform',
'transform':'transform'
};
// Ajoutez-le au corps pour obtenir le style calculé.
document.body.insertBefore(el, null);
for (var t in transforms) {
if (el.style[t] !== undefined) {
el.style[t] = "translate3d(1px,1px,1px)";
has3d = window.getComputedStyle(el).getPropertyValue(transforms[t]);
}
}
document.body.removeChild(el);
return (has3d !== undefined && has3d.length > 0 && has3d !== "none");
}