为啥我的动作脚本事件没有触发?

Posted

技术标签:

【中文标题】为啥我的动作脚本事件没有触发?【英文标题】:Why is my action script event not firing?为什么我的动作脚本事件没有触发? 【发布时间】:2017-12-23 20:56:39 【问题描述】:

目前,我正在尝试添加将演示文稿的所有幻灯片捕获到图像并将它们保存到磁盘的功能。它现在可以在捕获第一页的地方工作,然后我希望在加载第二页以捕获该页面时触发异步事件,依此类推。这是我添加事件侦听器的地方,但我不确定是否应该使用stagethis

                  import flash.events.Event;
                  private var jpgEncoder:JPGEncoder;
                  // ...

                    private function init():void
                            // ...
                            // Add async event to capture second page after loading
                            stage.loaderInfo.addEventListener(Event.COMPLETE,onLoadComplete);
                           // ...
                    
                    private function onPrintButtonClicked():void 
                            // screen capture code
                            jpgEncoder = new JPGEncoder(90);

                            // Page 1 capture
                            bitmapData1 = new BitmapData(stage.width, stage.height);
                            bitmapData1.draw(stage, new Matrix());

                            // move to next page
                            var curPage:Page = PresentationModel.getInstance().getCurrentPage();
                            if (curPage != null) 
                                LOGGER.debug("Go to next page. Current page [0]", [curPage.id]);
                                pageCount++;
                                dispatchEvent(new GoToNextPageCommand(curPage.id));
                             else 
                                LOGGER.debug("Go to next page. CanNOT find current page.");
                            
                    


                    private function onLoadComplete(e:Event)
                    
                            // Get page 2 capture
                            bitmapData2 = new BitmapData(stage.width, stage.height);
                            bitmapData2.draw(stage, new Matrix());

                            // Copy two pages to one bitmap
                            var rect1:Rectangle = new Rectangle(0, 0, stage.width, stage.height);
                            var pt1:Point = new Point(0, 0);
                            bitmapData3 = new BitmapData(stage.width, stage.height * 2);
                            bitmapData3.copyPixels(bitmapData1, rect1, pt1)
                            var rect2:Rectangle = new Rectangle(0, 0, stage.width, stage.height);
                            var pt2:Point = new Point(0, stage.height);
                            bitmapData3.copyPixels(bitmapData2, rect2, pt2)

                            // Convert to image
                            var img:ByteArray = jpgEncoder.encode(bitmapData3);
                            var file:FileReference = new FileReference();
                            file.save(img, "capture1.jpg");
                    

有没有人知道为什么永远不会调用 OnLoadComplete 函数?仅供参考,这里是完整的源代码:https://github.com/john1726/bigbluebutton/blob/master/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml

TIA

【问题讨论】:

选项 1:您不调用 init 方法。选项 2:当您添加侦听器时,整部电影已经加载完毕,您错过了该事件。 模拟鼠标点击按钮,也许吧。 【参考方案1】:

    请注意,我发现 init() 方法中的阶段仍然为空,因此引发了异常:

    stage.loaderInfo.addEventListener(Event.COMPLETE,onLoadComplete);
    

    另外,在解决了那个阶段错误之后,我发现我使用这个工具收到了这个错误:https://github.com/capilkey/Vizzy-Flash-Tracer

    错误 #2176:某些操作(例如显示弹出窗口的操作)只能在用户交互时调用,例如通过鼠标单击或按钮按下。

因此解决方案是重新设计 UI,以便按下按钮来准备文件并按下第二个按钮以实际保存图像,或者设置它们 mouseup 和 mousedown 事件以调用不同的函数:

s:Button mouseDown="prepare_PDF()" mouseUp="save_PDF()"

来源:Flex's FileReference.save() can only be called in a user event handler -- how can I get around this?

谢谢!

【讨论】:

以上是关于为啥我的动作脚本事件没有触发?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的复选框更改事件没有被触发?

为啥小弟我的canvas的鼠标事件不会触发

为啥我的 jQuery 脚本没有在 Wordpress 中触发?

为啥我的验证事件没有在 C# 中触发?

为啥我的事件监听器没有在 laravel 5 中触发?

只能通过 unsafeWindow 从 TamperMonkey 脚本触发鼠标悬停事件 - 为啥?