首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GWT onResize和鼠标释放

GWT onResize和鼠标释放
EN

Stack Overflow用户
提问于 2013-01-18 02:48:45
回答 2查看 648关注 0票数 1

我有一个window resizeHandler,它工作得很好。除了我只对窗口的最终尺寸感兴趣之外,换句话说,我只对释放鼠标按钮时窗口的尺寸感兴趣。有没有办法可以监听窗口鼠标事件?

我已经写了一段代码来实现我的目标,但我更喜欢更明显的东西。resizeRequestId是一个字段:

代码语言:javascript
复制
private void processResize() {

    final Timer timer = new Timer() {
    final Size windowSize = getWindowDimention();

    final int requestId = ++resizeRequestId;

    @Override
        public void run() {
            final boolean isLatestRequest = requestId == resizeRequestId;
        if (isLatestRequest) {
                //DO SOMETHING WITH windowSize
            }
        }
    };
    timer.schedule(100);
}
EN

回答 2

Stack Overflow用户

发布于 2013-01-18 03:07:03

浏览器不会传递发生在页面外部的事件,窗口调整大小也会计入页面外部。也就是说,您仍然可以获得用于调整整个浏览器窗口大小的钩子:

代码语言:javascript
复制
Window.addResizeHandler(new ResizeHandler() {
  public void onResize(ResizeEvent event) {
    //get, process window resize behavior
  }
});

对于一些浏览器和一些大小调整,当鼠标移动时,你会得到很多事件,而对于其他浏览器,你只会得到一个完整的事件。例如,在firefox中,角落的调整大小句柄发送所做的所有更改,而边框仅在用户释放鼠标时处理每个发送。最小化和最大化窗口也会导致单个事件。

票数 1
EN

Stack Overflow用户

发布于 2013-01-18 21:42:07

科林是对的。

此外,如果你做了很多“调整大小”的计算(例如forceLayout),添加一个计时器是一个好主意。这样计算就会每...十分之一秒触发一次?

代码语言:javascript
复制
final Timer resizeTimer = new Timer() {
    @Override
    public void run() {
        mainPanel.forceLayout();
    }
};
Window.addResizeHandler(new ResizeHandler() {
    public void onResize(ResizeEvent event) {
        int height = event.getHeight();
        mainPanel.setHeight(height + "px");
        resizeTimer.cancel();
        resizeTimer.schedule(100);
    }
});

就这样

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14386019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档