Actionscript 3 拖动包含可单击子项的容器3
我有一个容器,其中包含需要向其注册单击事件的子容器。容器是可拖动的,子容器不应干扰拖动或被拖动触发 我正绞尽脑汁想如何做到这一点。感谢您的帮助 如果对象已移动,则通过删除任何单击处理程序,这是最接近的。这看起来很混乱Actionscript 3 拖动包含可单击子项的容器3,actionscript-3,flash,event-handling,Actionscript 3,Flash,Event Handling,我有一个容器,其中包含需要向其注册单击事件的子容器。容器是可拖动的,子容器不应干扰拖动或被拖动触发 我正绞尽脑汁想如何做到这一点。感谢您的帮助 如果对象已移动,则通过删除任何单击处理程序,这是最接近的。这看起来很混乱 box.addEventListener(MouseEvent.MOUSE_DOWN, dragit); box.circle.addEventListener(MouseEvent.CLICK, circleclick); function dragit(e:MouseEve
box.addEventListener(MouseEvent.MOUSE_DOWN, dragit);
box.circle.addEventListener(MouseEvent.CLICK, circleclick);
function dragit(e:MouseEvent)
{
box.startDrag();
box.addEventListener(MouseEvent.MOUSE_UP, stopdrag);
}
function stopdrag(e:Event)
{
if(box.x != 0)
{
box.circle.removeEventListener(MouseEvent.CLICK, circleclick);
}
box.stopDrag();
}
function circleclick(e:MouseEvent):void
{
trace('clicked');
}
类似于下面的内容对我很有用,你可以从任何地方拖动容器,包括子容器,我添加了一个抑制单击标志以防止单击。如果容器是从子容器拖动的,你可以使用它,也可以不使用它,这取决于你的应用程序
package
{
public class Main extends Sprite
{
private var container:Sprite = new Sprite();
private var suppressClick:Boolean = false;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
container.graphics.beginFill(0xff0000, 1);
container.graphics.drawRect(0, 0, 500, 500);
container.graphics.endFill();
addChild(container);
container.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
var child:Sprite = new Sprite();
child.graphics.beginFill(0x00ff00, 1);
child.graphics.drawRect(0, 0, 50, 50);
child.graphics.endFill();
child.addEventListener(MouseEvent.CLICK, onChildClick);
child.x = 100;
child.y = 100;
container.addChild(child);
}
private function onMouseDown(e:MouseEvent):void
{
suppressClick = false;
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
container.startDrag();
}
private function onMouseMove(e:MouseEvent):void
{
suppressClick = true;
}
private function onMouseUp(e:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
container.stopDrag();
}
private function onChildClick(e:MouseEvent):void
{
if(!suppressClick)
trace("child clicked");
}
}
}
类似于下面的内容对我很有用,你可以从任何地方拖动容器,包括子容器,我添加了一个抑制单击标志以防止单击。如果容器是从子容器拖动的,你可以使用它,也可以不使用它,这取决于你的应用程序
package
{
public class Main extends Sprite
{
private var container:Sprite = new Sprite();
private var suppressClick:Boolean = false;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
container.graphics.beginFill(0xff0000, 1);
container.graphics.drawRect(0, 0, 500, 500);
container.graphics.endFill();
addChild(container);
container.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
var child:Sprite = new Sprite();
child.graphics.beginFill(0x00ff00, 1);
child.graphics.drawRect(0, 0, 50, 50);
child.graphics.endFill();
child.addEventListener(MouseEvent.CLICK, onChildClick);
child.x = 100;
child.y = 100;
container.addChild(child);
}
private function onMouseDown(e:MouseEvent):void
{
suppressClick = false;
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
container.startDrag();
}
private function onMouseMove(e:MouseEvent):void
{
suppressClick = true;
}
private function onMouseUp(e:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
container.stopDrag();
}
private function onChildClick(e:MouseEvent):void
{
if(!suppressClick)
trace("child clicked");
}
}
}
你能根据你已经尝试过的内容发布你的代码或伪代码吗?点击是鼠标向下+鼠标向上。但是,当您注册鼠标按下或鼠标向上时,您将无法再获得单击。如果你的鼠标移动超过一定距离(你必须根据你的项目来决定移动什么),你可以拖动鼠标。你可以根据你已经尝试过的内容发布你的代码或伪代码吗?单击是鼠标向下+鼠标向上。但是,当您注册鼠标按下或鼠标向上时,您将无法再获得单击。如果你的鼠标移动超过一定距离(你必须根据你的项目来决定移动的距离),你有一个拖拽。因此,如果鼠标在下鼠标后移动,你只有开始拖拽。一旦鼠标移动,你就设置suppressClick标志,如果suppressClick仍然为假,那么click函数只会触发商品。。。我想我能做到。我一放下鼠标就给startDrag打电话,但如果光标不移动,则不会发生拖动,当收到鼠标向上时,会调用停止拖动,因此不会拖动任何内容。因此,如果鼠标在鼠标向下移动后移动,则只有开始拖动鼠标,并且一旦鼠标移动,则设置SupersClick标志,如果suppressClick仍然为false,则单击功能才会触发其商品。。。我想我可以做到这一点。我在鼠标一放下就调用了
startDrag
,但如果光标不移动,则不会发生拖动,当收到鼠标向上时,会调用停止拖动,因此不会拖动任何东西。