簡體   English   中英

如何暫時禁用我未添加的 javascript 事件偵聽器?

[英]How can I temporarily disable a javascript event listener I didn't add?

我正在使用 Adobe Animate 創建 HTML5 菜單。

當您導出項目時,它會根據您在 Animate 中選擇的設置將一堆 javascript 添加到生成的 HTML 文件中。

對於我的項目,我需要它具有響應性,因此我檢查了 Adobe Animate 中的響應設置。 這會將如下所示的代碼添加到我生成的 HTML 文件中:

AdobeAn.makeResponsive(true,'both',false,1,[canvas,anim_container,dom_overlay_container]);
...
an.makeResponsive = function(isResp, respDim, isScale, scaleType, domContainers) {
    window.addEventListener('resize', resizeCanvas);
    resizeCanvas();
    function resizeCanvas() {
        // Code to resize the canvas
    }
    ...
}

因此,它基本上是在 window object 中為“調整大小”事件添加一個事件偵聽器。 我想要做的是能夠在運行時禁用響應能力。

這似乎很容易通過以下方式完成:

window.removeEventListener('resize', resizeCanvas);

並重新添加:

window.addEventListener('resize', resizeCanvas);

但問題是我的代碼遵循所有 adobe 代碼,沒有對 resizeCanvas function 的引用。 顯然,如果不引用它,就無法從 window 中刪除事件偵聽器,甚至無法列出當前附加到 window 的事件偵聽器。

我可以手動修改 Adobe 生成的代碼,並添加一個引用我可以使用的 resizeCanvas 的全局變量,但如果我這樣做,那么每次我對我的 Adobe Animate 項目進行更改並發布(生成output html),我需要 go 並在結果文件中手動修改該代碼,這是不切實際的。 即使我制作了執行此操作的腳本,Adobe Animate 也無法在 Publish 上運行腳本,因此我必須記住每次發布時都運行它。

有什么方法可以讓我從 window 中刪除resize偵聽器而不引用 resizeCanvas,或者以某種方式列出附加到 window 的事件偵聽器,以便我可以獲得對 resizeCanvas 的引用?

如果做不到這一點,我可以使用其他任何 JS 技巧來完成這項工作嗎?

我可以在 Adobe 的代碼之前或之后添加 JS 代碼(因為我可以修改用於生成結果文件的 HTML 模板)但不能直接修改他們的代碼。

問題是你沒有引用resizeCanvas function,它是在makeResponsive function的閉包里面定義的。

這個答案在這里How to find event listeners on a DOM node when debug or from the JavaScript code? 確實避免了對 add addEventListener 方法的入侵,該方法創建了一種訪問事件的方式。

對我來說聞起來有點時髦,但可能會給你你想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM