我正在反对offsetWidth属性的奇怪(我认为) 这是场景:
我已经得到了一个 span 标签,在我的js中,在某一点我执行css3转换 这个元素,如:
el.set('styles', {
'transform':'scale('+scale+', '+scale+')', /* As things would be in a normal world */
'-ms-transform':'scale('+scale+', '+scale+')', /* IE 9 */
'-moz-transform':'scale('+scale+', '+scale+')', /* Moz */
'-webkit-transform':'scale('+scale+', '+scale+')', /* Safari / Chrome */
'-o-transform':'scale('+scale+')' /* Oprah Winfrey */
});
w = el.getWidth();
console.log('after scaling: ' + w);
此时日志会返回模糊值,就像它不知道该说什么一样 有什么建议吗?
答案 0 :(得分:36)
getBoundingClientRect()
会为我返回正确的值。
答案 1 :(得分:4)
转换不会影响内在的CSS属性,因此您可以看到正确的行为。你需要查看当前转换矩阵 - 从getComputedStyle()。webkitTransform返回,以便弄清楚有多大的东西被缩放。
更新:在Firefox 12及更高版本和Chrome / Safari中 - 正如Alex在下面所述,您可以使用getBoundingClientRect()来考虑应用于元素的任何变换
规模转换从50%/ 50%开始,因为这是默认&正确的行为。如果您希望它从原点开始,则需要设置transform-origin:0%0%;
答案 2 :(得分:0)
我认为span标签有display:block
?转换只适用于块元素。当我转到控制台并加载jquery时(只是为了方便)并执行此操作:
$('span#foo').css({"-webkit-transform": "scale(2.0, 2.0)"})
$('span#foo').css('display','block').css({"-webkit-transform": "scale(2.0, 2.0)"})
突然它发生了变化,并且offsetHeight增加了。令人失望的是,偏移高度从16变为19,而不是32(尽管视觉外观是尺寸的两倍并且可能是准确的) - 但至少它确实像宣传的那样工作。
答案 3 :(得分:-1)
getBoundingClientRect()对我不起作用(在Chrome 49中)。
这个答案让我找到了解决问题的另一个方法:https://stackoverflow.com/a/7894886/1699320
function getStyleProp(elem, prop){
if(window.getComputedStyle)
return window.getComputedStyle(elem, null).getPropertyValue(prop);
else if(elem.currentStyle) return elem.currentStyle[prop]; //IE
}
getStyleProp(element, 'zoom') //gives zoom factor to use in calculations