javascript - 自然窗口调整大小事件会使 Chrome 中的布局无效,而强制窗口调整大小则不会。

标签 javascript jquery google-chrome

演示:http://jsfiddle.net/calvintennant/NrJ8T/show/

当我通过执行以下操作强制调整窗口大小时: $(window).resize() 我的监听器被调用,一切都很好。但是,如果我实际调整窗口大小,我会在同一帧内调用多个调整大小事件。

强制调整大小期间的时间线: timeline

自然调整大小期间的时间线: timeline

这是 Chrome 中的错误,还是我误解了什么?

最佳答案

正如 @avram-lavinsky 所指出的,调整大小事件可以在每帧中多次调用。

Chrome Developer Tools

使用请求动画帧更新了示例(首先参见此处 https://developer.mozilla.org/en-US/docs/Web/Reference/Events/resize ):
http://jsfiddle.net/calvintennant/v69WW/

# HTML 
<div class="box-1"></div>
<div class="box-2"></div>
<div class="box-3"></div>

# CSS  
html, body {
    margin: 0;
}
.box-1 {
    background: #00F;
    bottom: 0;
    position: absolute;
    width: 100%;
}
.box-2 {
    background: #0F0;
    height: 30px;
    position: relative;
}
.box-3 {
    background: #F0F;
    height: 66px;
    position: relative;
}

# JS
var box1 = $('.box-1');
var box2 = $('.box-2');
var box3 = $('.box-3');
var drawing = false;
var resizeFired = false;
var requestAnimationFrame = window.requestAnimationFrame ||
    window.mozRequestAnimationFrame ||
    window.webkitRequestAnimationFrame;

$(window).resize(function() {
    // set resizedFired to true and execute drawResize if it's not already running
    if (drawing === false) {
        resizeFired = true;
        drawResize();
    }
});

function drawResize() {
    var height;
    // render friendly resize loop
    if (resizeFired === true) {
        resizeFired = false;
        drawing = true;

        height = $(window).height();
        height -= $(box2).height();
        height -= $(box3).height();
        $(box1).height(height);

        requestAnimationFrame(drawResize);
    } else {
        drawing = false;
    }
}
$(window).resize();

关于javascript - 自然窗口调整大小事件会使 Chrome 中的布局无效,而强制窗口调整大小则不会。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18664229/

相关文章:

javascript - 获取promise中的返回函数值

javascript - 如何从javascript中的url中删除查询字符串数组

jquery tablesorter - 508 合规性

javascript - Chrome 13 中全局定义的位置

javascript - 如何使用 Javascript 更改 chrome 浏览器选项卡的颜色?

javascript - 如何使用jquery显示ajax模式弹出窗口?

javascript - if (xmlhttp.readyState == 4 && xmlhttp.status == 200) 此条件不起作用

javascript - 滚动时粘性标题跳转

javascript - 正则表达式值的 JSON.parse() 问题

javascript - 如何将 AWS Lambda 中的示例从 javascript 转换为 Java?