【发布时间】:2010-11-13 09:52:33
【问题描述】:
简单的拖放应用程序,其中 mc 从一个父 mc 拖出并放入另一个父 mc。
一切正常,直到我向 mc 添加了 2 个文本框——一个是由代码设置的不可选择的动态文本框(标签),另一个是用户可以修改的可选输入文本。
文本框会导致一些问题:
- 当用户将鼠标悬停在包含文本字段(甚至是不可选择的文本??)的 mc 部分上时,手指光标消失
- 当用户试图通过无意中单击并拖动两个文本区域内的任意位置来拖动 mc 时,会导致此错误:TypeError: Error #1034: Type Coercion failed: cannot convert flash.text::TextField@2374a381 to flash.display.MovieClip(两个文本框出现相同的错误)
- 输入文本框可能会让用户感到困惑——他们如何有时单击拖动有时单击修改?我认为输入文本需要清楚地是 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();
}
【问题讨论】:
标签: flash actionscript-3 drag-and-drop