【发布时间】:2012-11-19 07:26:27
【问题描述】:
在考虑向 Chromium 提交错误时寻找解决方法 -
如果一个元素有一个过渡,getComputedStyle 不会返回您期望它返回的内容,直到过渡结束。
长和短 - 如果我有一个高度为 24 像素的元素,并且添加一个类使其高度为 80 像素(带有过渡到和从),并且两个高度都在样式表中定义 - 如果我设置了类并检查getComputedStyle,它仍然给我非类高度,直到过渡结束。
我在这里谈论的一个示例:
<html>
<head>
<style>
#foo {
display: inline-block;
background-color: red;
height: 24px;
padding: 4px 0;
width: 200px;
-webkit-transition-property: height;
-webkit-transition-timing-function: linear;
-webkit-transition-duration: 300ms;
}
#foo.changed {
height: 80px;
}
</style>
</head>
<body>
<div id="foo"></div>
<p>before: <span id="before"></span></p>
<p>after: <span id="after"></span></p>
<script type="text/javascript">
var foo
function checkFoo(e) {
foo.classList.toggle('changed');
document.getElementById('before').innerText = window.getComputedStyle(foo, null).getPropertyValue("height");
};
window.addEventListener('load', function() {
foo = document.getElementById('foo');
foo.addEventListener('webkitTransitionEnd', function(e){
document.getElementById('after').innerText = window.getComputedStyle(foo, null).getPropertyValue("height");
});
foo.addEventListener('click', checkFoo, false);
});
</script>
</body>
</html>
此示例的小提琴:http://jsfiddle.net/bobbudd/REeBN/
(注意:这个小提琴只能在 webkit 中工作,不管你信不信,它是我们的目标浏览器——但我也在 Firefox 中测试并遇到了同样的问题)
问题是,我有多种情况需要在transitionEnd 发生之前知道最终样式(有些人可能会说“计算”样式)。
或者我猜这是一个更大问题的一部分——有很多不同的方法可以知道元素在特定时刻的高度,getComputedStyle 是否应该得到样式表(或样式属性)所说的内容属性应该是?
在你问我是否可以将最终数字放入 JS 之前,答案是(很遗憾)不能。
谁能想到在过渡结束之前获得这个最终值的方法?
【问题讨论】:
-
我不太清楚这个问题。我从中得到的是在元素被实际触发之前你想要一些值?
-
no - 元素已经被触发,所以我期待新值(80px),但在过渡结束之前它不会给我那个新值。我需要一种方法来在触发发生后立即获取它,但在过渡结束之前。
标签: javascript dom-events css-transitions