我正在尝试使用createJs将flash转换为html5,但是,按钮没有被触发,请按downloading sample file here.检查代码
this.ReplayBtn = new lib.replayBtn();
this.ReplayBtn.onClick = function() {
console.log("clicked");
this.gotoAndPlay("animate");
}
这是jsFiddle链接jsfiddle.net/asimkh/sLbgrx08/1
答案 0 :(得分:0)
onclick
和类似事件已被弃用了一段时间,因此根据这个目标的CreateJS版本,他们不会工作。改为使用EventDispatcher方法:
this.ReplayBtn = new lib.replayBtn();
this.ReplayBtn.on("click", handleClick, this);
function handleClick(event) {
console.log("clicked");
this.gotoAndPlay("animate");
}
请注意,初始代码的范围可能也不起作用,因为JavaScript不维护函数范围 - 因此this
将为Window
。使用on()
方法的第3个参数可以解决这个问题。
如果你有一个没有on()
的旧版CreateJS,你可以使用:
this.ReplayBtn.addEventListener("click", handleClick.bind(this));
干杯。
答案 1 :(得分:0)
快速编辑以修复您在上一个答案的评论中发布的小提琴。 https://jsfiddle.net/lannymcnie/sLbgrx08/20/
var createjs
在小提琴中处于不利地位,导致一些问题。它本来适合你,而不是jsfiddle。这个“固定”版本显示您的初始问题。
剩下的问题是您的图片是跨域加载的,当您点击时会导致错误。这是因为EaselJS鼠标交互需要像素访问,但跨域图像使画布“脏”,这会阻止它。您可以在控制台中看到错误,看起来您甚至将错误复制到Flash时间轴中,因此您必须已经看过它。
未捕获发生错误。这很可能是出于安全考虑 使用本地或跨域读取画布像素数据的限制 图像。
你无法使用你指向的CDN来解决这个问题,因为它不会发送必要的跨源头文件。此外,旧版本的PreloadJS不支持跨源。
我快速修改了你的代码,从支持跨源请求(我的测试域)的源手动预加载图像,并使其正常工作。对CreateJS生成的代码进行了一些黑客攻击以使其正确预加载,但请注意,较新版本的库支持这一点没有问题。 https://jsfiddle.net/lannymcnie/sLbgrx08/22/
此外,我对您的框架脚本进行了一些更改:
this.ReplayBtn.onClick = clickHandler.bind(this);
animateCall
函数的方式可能有效,但它确实具体。由于您已在该剪辑上定义了该函数,因此只需在该范围内调用它即可。框架脚本的范围限定为它们所在的剪辑: this.animateCall();
animateCall
时,您将转到“animate”标签,即第0帧。这会导致第0帧脚本再次被调用(另一个原因是从Flash外部化您的JS)。我暂时评论了gotoAndPlay
。 希望有所帮助。
答案 2 :(得分:0)
我检查了你的按钮。它不适用于主.jpg。所以不要让你的.jpg位图到movieclip。你需要重新创建另一个0不透明度的矩形并命名为" ReplayBtn"