You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在窗口调整至目标尺寸后再执行耗时函数?

解决窗口尺寸调整时仅在稳定后执行耗时函数的方案

核心思路是防抖(Debounce):每次触发<Configure>事件时,取消之前待执行的延迟任务,重新设置新的延迟,只有当延迟期间没有新事件触发时,才执行目标函数。

具体实现代码如下:

set originalWidth 500
set originalHeight 500
# 存储延迟任务的ID,用于后续取消操作
set config_after_id ""

bind .l <Configure> [list procConfig %W %w %h]

proc procConfig {W w h} {
    global config_after_id originalWidth originalHeight

    # 取消之前未执行的延迟任务
    if {$config_after_id ne ""} {
        after cancel $config_after_id
        set config_after_id ""
    }

    # 仅当尺寸与原始值不同时,设置新的延迟执行任务
    if {($w != $originalWidth) || ($h != $originalHeight)} {
        # 延迟时间可按需调整(示例为200毫秒)
        set config_after_id [after 200 [list myfunction "arg1" "arg2"]]
    }
}

关键说明:

  • 用全局变量config_after_id追踪延迟任务,每次触发调整事件时先取消旧任务,避免myfunction在调整过程中频繁执行。
  • 延迟时间可根据实际场景调整(200ms是兼顾响应速度和防抖效果的常用值)。
  • 若窗口最终回到原始尺寸,不会触发myfunction,符合初始逻辑要求。

你之前的递归after方案会持续轮询执行,反而会导致函数频繁触发,而防抖方案仅在用户停止调整窗口后执行一次,效率更高。

内容的提问来源于stack exchange,提问作者Mkn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 10:43:09