【问题标题】:Access createjs functions outside the animatecc script在 animatecc 脚本之外访问 createjs 函数
【发布时间】:2023-03-26 09:40:01
【问题描述】:

我现在在这个问题上搜索了很长一段时间,似乎没有解决这个问题的方法。但是,在结案之前,我想在这里说明问题,作为最后一步,以确保我没有遗漏任何内容。 问题:我有一个嵌入 iframe 元素中的 adobean animatecc 图形。该图形是由我目前工作的一家公司的编辑创建的。我的主管现在希望我从这个创建的 animatecc 图形之外停止动画。所以基本上我想访问 Ticker 元素,它保存有关 fps 速率的信息,以便更改它的值,从而让动画停止。 无论如何,从 adobe 工具生成该图形后,似乎无法介入该图形。你们中有人遇到过同样的问题并且能够解决吗?

如果有人有任何解决方案或建议来解决这个问题,那将是非常有帮助的。

在此先感谢各位, 祝你有美好的一天。

【问题讨论】:

    标签: javascript frame-rate createjs


    【解决方案1】:

    如果您在同一个域中,您应该能够访问嵌入的 iframe 上下文。

    var context = document.getElementById("iframe").contentWindow;
    

    从那里它应该像重置 Ticker 一样简单。 createjs 对象是窗口中的全局对象,所有 CreateJS 内容都驻留于此。

    context.createjs.Ticker.reset();
    

    您还提到了降低帧速率——可能也可以:

    context.createjs.Ticker.timingMode = "interval"; // Required as RAF can't change framerate
    context.createjs.Ticker.framerate = 0.0001; // 0 will cause a division by 0 error probably
    

    最后一点:Ticker 确实支持“暂停”,但它实际上并没有停止滴答,而是由开发人员根据 Ticker 事件来实现暂停。

    希望有帮助!

    【讨论】:

      【解决方案2】:

      好吧, 一如既往,在发布问题后,我现在找到了一个可行的解决方案,我想我会在这里分享它,以防有人遇到类似问题。

      解决方案:

      在 iframe 渲染 animatecc 图形后,您就有了一个可以使用的 adobean 对象 adobean = document.getElementsByTagName("iframe")[0].contentWindow.AdobeAn

      这个对象有一个函数getComposition,它可以让你得到animatecc element的一些组件。

      一个组件是舞台组件,可以通过getStage() 调用来检索它。舞台本身有子节点,其中之一是 tickEnabled 布尔属性。

      adobean.getComposition(adobean.bootcompsLoaded[0]).getStage().children[0].tickEnabled = false;
      这行代码可视化了我刚刚描述的内容。当将该值设置为 false 时,动画将停止。

      重要的是您等待 iframe 直到它被加载,否则这个 adobean 将是未定义的。

      所以我希望这可能对你们中的一个人有所帮助,它肯定会为我节省一周的研究时间。

      祝你有美好的一天!

      【讨论】:

      • 很高兴你解决了它。我的回答可能是更好的“官方”方法,但这也是动态控制或修改 Animate 内容的好方法 :)
      猜你喜欢
      • 2019-07-06
      • 2016-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-30
      • 2018-09-23
      • 2014-04-09
      相关资源
      最近更新 更多