日期:2014-05-17 浏览次数:20884 次
// UA.core为浏览器核心,取值为trident,webkit,gecko,presto或undefined
// UA.ie为ie浏览器版本号,取值5,6,7,8,9...
// 如何判断浏览器本文不再描述,可以参考https://github.com/kissyteam/kissy/blob/master/src/ua/base.js
// 或者也可采用其他特征来区分浏览器
var rotate = (function() {
switch (UA.core) {
case 'trident' :
return UA.ie < 9 ? return function(dom, angle) {
var rad = angle * (Math.PI / 180),
filter = dom.filters.item('DXImageTransform.Microsoft.Matrix');
filter.Dx = (1 - Math.cos(Math.PI / 4 + rad) / Math.cos(Math.PI / 4)) * 0.5 * (dom.offsetWidth - 1);
filter.Dy = (1 - Math.sin(Math.PI / 4 + rad) / Math.cos(Math.PI / 4)) * 0.5 * (dom.offsetHeight - 1);
filter.M11 = Math.cos(rad);
filter.M12 = -1 * Math.sin(rad);
filter.M21 = Math.sin(rad);
filter.M22 = filter.M11;
filter.Enabled = true;
} : return function(dom, angle) {
dom.style.msTransform = 'rotate(' + angle + 'deg)';
};
case 'webkit' :
return function(dom, angle) {
dom.style.webkitTransform = 'rotate(' + angle + 'deg)';
};
case 'gecko' :
return function(dom, angle) {
dom.style.MozTransform = 'rotate(' + angle + 'deg)';
};
case 'presto' :
return function(dom, angle) {
dom.style.OTransform = 'rotate(' + angle + 'deg)';
};
default:
return function(dom, angle) {
dom.style.transform = 'rotate(' + angle + 'deg)';
};
}
})();
// 使用方法:
/**
* 跨浏览器绕中心旋转
* @param dom HTMLElement
* @param angle 旋转的角度(顺时针方向)
*/
rotate(dom, angle);