1909/080
Flash关于Mouse的onMouseDown事件
blueidea所发贴:http://bbs.blueidea.com/thread-2886519-1-1.html
问题是这样的:
有2个swf文件swf1跟swf2,swf1里边有个按钮时加载swf2的,
swf1的代码如下:
btn.onRelease=function(){
mc.loadMovie("swf2.swf");
}
swf2的代码是
var mouseListener:Object = new Object();
mouseListener.onMouseDown= function() {
trace("1111111111111");
};
Mouse.addListener(mouseListener);
想要时间的效果是在swf1里加载swf2.swf后每次按下鼠标就trace 1111111111111,但是有个问题
如果多次点击(假设是N次)btn加载swf2.swf的话,swf1里边按一次鼠标会trace出来N个1111111111111;
那么,怎么解决这个问题?
根据调试发现,是因为swf1在家在swf2的时候,未清除swf2里的Object mouseListener,导致mouseListener对象越来越多,
所以swf1里点一下就出很多1111111111111。
本来跟同事也是有考虑到这个问题,不过采用了加载前unloadMovie跟removeListener,结果发现把swf1里的鼠标事件也给去掉了……
下边是网友libins提供的解决方法:
btn.onRelease = function() {
// if (mc._height>0) {
mc.unloadMovie("swf2.swf");
trace(_root.mc.mouseListener);
Mouse.removeListener(mc.mouseListener);
// } else {
mc.loadMovie("swf2.swf");
//}
};
在加载swf2.swf前,先unload然后删除变量mouseListener,呵呵,原来问题出在Mouse.removeListener(mc.mouseListener);
原本我们在处理的时候没有指定mc,Mouse.removeListener(mouseListener),删除了所有的mouseListener。
虽然问题就这样解决了,但是有个很奇怪的问题。
在家在swf2.swf的时候,swf2.swf每次都会Var一个变量mouseListener,swf里允许多个名为mouseListener的变量存在?