actionscript-3 – 如何“取消”Flex中的拖动?
一旦我调用了DragManager.acceptDrag,有没有办法“不接受”拖动?假设我有一个可以接受拖放的视图,但仅限于某些区域.一旦用户拖动其中一个区域,我就调用DragManager.acceptDrag(this)(来自DragEvent.DRAG_OVER处理程序),但如果用户移出此区域,我想将拖动的状态更改为不接受并显示DragManager.NONE反馈.但是,调用DragManager.acceptDrag(null)和DragManager.showFeedback(DragManager.NONE)似乎都没有任何效果.一旦我接受了拖动设置反馈类型我似乎无法改变它.
只是为了说清楚:用户应该能够放下的区域不是组件甚至是显示对象,实际上它们只是文本字段文本中的范围(如选择).如果他们是他们自己的组件我可以通过让他们每个人单独接受拖动事件来解决它.我想我可以创建漂浮在文本上的代理组件来模拟它,但如果没有必要,我宁愿不这样做. 我已经设法让它现在在AIR和浏览器中工作,但只能将代理组件放在文本范围之上,你应该能够丢弃东西.这样我得到了正确的反馈,并且在拖动出口处自动取消了下降. 这是关于AIR中D& D的最奇怪的事情: DragManager.doDrag(initiator,source,event,dragImage,offsetX,offsetY); 在基于浏览器的Flex中,offsetX和offsetY应该是负数(所以说文档,它工作正常).但是,在AIR中运行完全相同的代码时,必须使偏移量为正.相同的数字,但积极的.这非常非常奇怪. 我已经测试了更多以及@maclema的工作原理,但是如果你在AIR中运行则不行.看起来AIR中的拖放是不同的.这真的非常奇怪,因为不仅反馈没有正确显示,也不可能不接受,但坐标也完全关闭.我只是在浏览器而不是AIR中尝试我的应用程序,拖放完全被打破. 另外,跳过dragEnter处理程序在AIR中运行良好,但在浏览器中运行时会破坏所有内容. 解决方法
你只使用dragEnter方法吗?如果您在仍然拖动同一组件的同时尝试拒绝拖动,则需要同时使用dragEnter和dragOver方法.
看看这个例子: <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Script> <![CDATA[ import mx.core.DragSource; import mx.managers.DragManager; import mx.events.DragEvent; private function onDragEnter(e:DragEvent):void { if ( e.target == lbl ) { if ( e.localX < lbl.width/2 ) { trace("accept"); DragManager.acceptDragDrop(this); } else { DragManager.acceptDragDrop(null); } } } private function doStartDrag(e:MouseEvent):void { if ( e.buttonDown ) { var ds:DragSource = new DragSource(); ds.addData("test","text"); DragManager.doDrag(btn,ds,e); } } ]]> </mx:Script> <mx:Label id="lbl" text="hello world!" left="10" top="10" dragEnter="onDragEnter(event)" dragOver="onDragEnter(event)" /> <mx:Button id="btn" x="47" y="255" label="Button" mouseMove="doStartDrag(event)"/> </mx:Application> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |