flash中的createjs按钮不工作
我正在尝试使用createJs将flash转换为html5,但是,按钮并没有被触发,请检查下面的代码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
这里是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”标签