Javascript窗口调整可能的竞争条件
Javascript window resize possible race condition
给定以下测试用例,预期行为是在调整浏览器窗口大小时,浅蓝色元素与红色父元素的大小完全匹配。
<html>
<head>
<script src="https://code.jquery.com/jquery-1.11.1.min.js"/></script>
<style type="text/css">
#viewport{
width: 100%;
height: 30%;
background-color: red;
}
#child{
background-color: lightblue;
}
</style>
</head>
<body>
<div id="viewport"><div id='child'></div></div>
<script>
window.addEventListener( 'resize', function(){
var width = $('#viewport').innerWidth();
var height = $('#viewport').innerHeight();
$('#child').css('height', height+'px');
$('#child').css('width', width+'px');
});
</script>
</body>
</html>
chrome 36.0.1985.143的实际行为是,有时(尤其是在较小的窗口尺寸下)子元素的高度比父元素低5倍和/或宽1倍。如果$('#child').css('width', width+'px');
被注释掉,则问题停止发生。
据报道,这个问题并没有发生在firefox上。
似乎也发现了类似的问题http://thewebivore.com/using-settimeout-win-race-condition-changing-views/然而,我无法通过暂停来缓解它<10ms,这不是真正的解决方案。
我已经把你的示例代码插入了小提琴中,我似乎还有很多其他问题。
然而,如果我使用vh
和vw
而不是%
,我会得到更好的结果:
#viewport {
width: 100vw;
height: 30vh;
background-color: red;
}
#child {
background-color: lightblue;
}
小提琴在这里。。。
相关文章:
- 如何解决取消抖动的用户输入上的竞争条件
- JavaScript 中的竞争条件
- Chrome扩展 chrome.storage 如何同时进行大量获取和设置并避免竞争条件
- 修复在执行http获取请求angularJS时的竞争条件
- JavaScript img.oner更改源-竞争条件时出错
- 使用jQuery提交表单时的竞争条件
- Firefox启动的扩展,在顶级中导入时的竞争条件
- Javascript-在检查对象属性是否存在时避免异步竞争条件
- 使用独立的 AngularJS 控制器修复竞争条件
- jQuery 事件的竞争条件
- 可能的 JavaScript ajax 调用竞争条件
- JS AJAX 提前键入结果排序/竞争条件
- JavaScript 承诺和竞争条件
- 具有多个“数据”事件处理程序和竞争条件的 NodeJS 流
- 在Javascript中竞争条件可能吗?(例如:我想原子地获取和设置值)
- 如何使用getter和setter方法创建一个Angular工厂而不遇到竞争条件
- 如何使用javascript使异步ajax半同步以避免竞争条件
- Koa.js在竞争条件下产生值
- 用于循环ajax潜在竞争条件的Javascript
- 可能的PHP/Javascript竞争条件