简单的拖放应用程序,其中mc从一个父mc中拖出,然后放到另一个父mc中。
一切正常,直到我向mc添加了两个文本框--一个是由代码设置的不可选动态文本框(一个标签),另一个是用户可以修改的可选择输入文本。
文本框引起了一些问题:
当用户悬停在mc中包含文本字段(甚至是不可选择的文本??)的部分时,
不确定,但也许我需要在mc中创建一个覆盖区域,这是点击检测到的拖动吗?
还有其他建议吗?
下面是代码的相关部分:
var itemArray:Array = [
{iname:"police",ititle:"POLICE OFFICER"},
{iname:"insurance_assessor",ititle:"INSURANCE ASSESSOR"},
{iname:"estimator",ititle:"ESTIMATOR"}
];
for (var i:int=0; i < itemArray.length; i++)
{
var itemname:String = itemArray[i].iname;
var curritem:MovieClip = MovieClip(scrollitems.getChildByName(itemname));
if (curritem != null)
{
curritem.ititle.text = itemArray[i].ititle;
curritem.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
curritem.addEventListener(MouseEvent.MOUSE_UP, dropIt);
curritem.buttonMode = true;
}
}
function pickUp(event:MouseEvent):void
{
var dragIt:MovieClip = MovieClip(event.target); //type casting
var dragPoint:Point = dragIt.parent.localToGlobal(new Point(dragIt.x,dragIt.y));
dragIt.parent.removeChild(dragIt); // remove item from current parent mc
stage.addChild(dragIt); //temp add to stage
dragIt.x = dragPoint.x;
dragIt.y = dragPoint.y;
dragIt.startDrag();
}发布于 2010-11-13 10:34:33
您遇到的问题是,Textfield是mouseEnabled。label字段mouseEnabled属性应该设置为false,对于其他TextField,我可以想到两种解决方案。
发布于 2012-07-31 13:59:58
只需将事件侦听器(focus_in & out)添加到文本字段,生成函数并删除focus_in上拖放的事件,并在focus_out上返回它们。如下所示:
drag.textFieldName.addEventListener(FocusEvent.FOCUS_IN, setFIn);
drag.textFieldName.addEventListener(FocusEvent.FOCUS_OUT, setFOut);
function setFIn(focus:FocusEvent):void {
var item = focus.target.parent;
item.removeEventListener(MouseEvent.MOUSE_DOWN, MCdrag_press);
item.removeEventListener(MouseEvent.MOUSE_UP, MCdrag_release);
}
function setFOut(focus:FocusEvent):void {
var item = focus.target.parent;
item.addEventListener(MouseEvent.MOUSE_DOWN, MCdrag_press);
item.addEventListener(MouseEvent.MOUSE_UP, MCdrag_release);
}如果用户接触到文本区域,它不会错误地拖动它,甚至会显示闪存错误。干杯
发布于 2012-06-13 17:27:36
问题产生于这样一个事实: MOUSE_DOWN用于开始编辑TextFields并开始拖动您的MovieClip。因此,如果您能够区分单击对象是否为TextField,则可以摆脱这种模糊,如下所示:
var curritem:MovieClip = new MovieClip();
curritem.Width = 125;
curritem.Height = 25;
var fontFormat:TextFormat = new TextFormat( );
fontFormat.font = "Arial";
var tf:TextField = new TextField();
tf.type = TextFieldType.INPUT;
tf.setTextFormat(fontFormat);
tf.text = "Some Text";
curritem.addChild(tf);
curritem.addEventListener(MouseEvent.MOUSE_DOWN, startMove);
curritem.addEventListener(MouseEvent.MOUSE_UP, stopMove);
function startMove(act:MouseEvent):void
{
if (getQualifiedClassName(act.target) == "flash.text::TextField")
{
trace("text is down");
act.target.parent.startDrag();
}
else
{
trace("movieclip is down");
act.target.startDrag();
}
}
function stopMove(act:MouseEvent):void
{
if (getQualifiedClassName(act.target) == "flash.text::TextField")
{
trace("text is up");
act.target.parent.stopDrag();
}
else
{
trace("movieclip is up");
act.target.stopDrag();
}
}https://stackoverflow.com/questions/4171912
复制相似问题