flash中的createjs按钮不工作

flash中的createjs按钮不工作,flash,canvas,easeljs,createjs,Flash,Canvas,Easeljs,Createjs,我正在尝试使用createJs将flash转换为html5,但是,按钮并没有被触发,请检查下面的代码 这里是jsiddle链接,onclick和类似事件不久前就被弃用了,因此取决于它针对的是哪个版本的CreateJS,它们将不起作用。请改用EventDispatcher方法: this.ReplayBtn = new lib.replayBtn(); this.ReplayBtn.on("click", handleClick, this); function handleClick(event

我正在尝试使用createJs将flash转换为html5,但是,按钮并没有被触发,请检查下面的代码


这里是jsiddle链接,
onclick
和类似事件不久前就被弃用了,因此取决于它针对的是哪个版本的CreateJS,它们将不起作用。请改用EventDispatcher方法:

this.ReplayBtn = new lib.replayBtn();
this.ReplayBtn.on("click", handleClick, this);
function handleClick(event) {
  console.log("clicked");
  this.gotoAndPlay("animate");
}
请注意,初始代码的作用域可能也不起作用,因为JavaScript不维护函数作用域-因此
这将是
窗口
。使用
on()
方法的第三个参数将解决此问题

如果您的CreateJS的较旧版本没有()上的
,则可以使用:

this.ReplayBtn.addEventListener("click", handleClick.bind(this));

干杯。

不久前,
onclick
和类似的事件被弃用,因此取决于这是针对哪个版本的CreateJS,它们将不起作用。请改用EventDispatcher方法:

this.ReplayBtn = new lib.replayBtn();
this.ReplayBtn.on("click", handleClick, this);
function handleClick(event) {
  console.log("clicked");
  this.gotoAndPlay("animate");
}
请注意,初始代码的作用域可能也不起作用,因为JavaScript不维护函数作用域-因此
这将是
窗口
。使用
on()
方法的第三个参数将解决此问题

如果您的CreateJS的较旧版本没有()上的
,则可以使用:

this.ReplayBtn.addEventListener("click", handleClick.bind(this));

干杯。

快速编辑以修复您在上一个答案评论中发布的小提琴。

var createjs
在小提琴中的位置不好,并且引起了一些问题。它可以在本地为您工作,但不能在JSFIDLE上工作。此“固定”版本显示您的初始问题


剩下的问题是,您的映像正在跨域加载,导致单击时出错。这是因为EaselJS鼠标交互需要像素访问,但跨域图像会使画布“脏”,从而阻止它。您可以在控制台中看到错误,看起来您甚至将错误复制到了Flash时间线中,因此您一定看到了它

未捕获发生错误。这很可能是由于安全问题 本地或跨域读取画布像素数据的限制 图像

使用您所指向的CDN无法真正解决这个问题,因为它不发送必要的跨源标题。此外,旧版本的PreloJS不支持跨源

我对您的代码进行了快速修订,从一个支持跨源请求的源(我的测试域)手动预加载图像,并使其正常工作。需要对CreateJS生成的代码进行一些黑客攻击才能使其正确预加载,但请注意,库的较新版本支持这一点并没有问题。

此外,我还对您的框架脚本进行了一些更改:

  • 把核心逻辑,如舞台滴答声和设置在你的框架0是不可取的。该阶段已在HTML文件中更新,因此请使用该阶段。将JavaScript外部化到FLA之外也很好
  • 我绑定了你的点击处理程序,就像我在前面的回答中提到的那样。这将确保在正确的范围内调用函数:
  • this.ReplayBtn.onClick=clickHandler.bind(this)

  • 您定义和调用
    animateCall
    函数的方式可能有效,但它确实是特定的。因为您已经在该片段上定义了函数,所以只需在该范围内调用它。框架脚本的作用域为它们所在的剪辑:
  • this.animateCall()

  • 调用
    animateCall
    时,将转到“animate”标签,即第0帧。这会导致第0帧脚本再次被调用(从Flash外部化JS的另一个原因)。我暂时把
    gotoAndPlay
    注释掉了
    希望有帮助

    进行了快速编辑,以修复您在上一个答案的评论中发布的小提琴。

    var createjs
    在小提琴中的位置不好,并且引起了一些问题。它可以在本地为您工作,但不能在JSFIDLE上工作。此“固定”版本显示您的初始问题


    剩下的问题是,您的映像正在跨域加载,导致单击时出错。这是因为EaselJS鼠标交互需要像素访问,但跨域图像会使画布“脏”,从而阻止它。您可以在控制台中看到错误,看起来您甚至将错误复制到了Flash时间线中,因此您一定看到了它

    未捕获发生错误。这很可能是由于安全问题 本地或跨域读取画布像素数据的限制 图像

    使用您所指向的CDN无法真正解决这个问题,因为它不发送必要的跨源标题。此外,旧版本的PreloJS不支持跨源

    我对您的代码进行了快速修订,从一个支持跨源请求的源(我的测试域)手动预加载图像,并使其正常工作。需要对CreateJS生成的代码进行一些黑客攻击才能使其正确预加载,但请注意,库的较新版本支持这一点并没有问题。

    此外,我还对您的框架脚本进行了一些更改:

  • 把核心逻辑,如舞台滴答声和设置在你的框架0是不可取的。该阶段已在HTML文件中更新,因此请使用该阶段。将JavaScript外部化到FLA之外也很好
  • 我绑定了你的点击处理程序,就像我在前面的回答中提到的那样。这将确保在正确的范围内调用函数:
  • this.ReplayBtn.onClick=clickHandler.bind(this)

  • 您定义和调用
    animateCall
    函数的方式可能有效,但它确实是特定的。因为您已经在该片段上定义了函数,所以只需在该范围内调用它。框架脚本的作用域为它们所在的剪辑:
  • this.animateCall()

  • 调用
    animateCall
    时,将转到“animate”标签