Просмотр полной версии : DragEvent
sobaka11
26.10.2006, 13:49
У меня есть кнопка на которой висит DragEnter listener. Проблема следующая: когда прокручиваешь экран событие DragEnter срабатывает не на самой кнопке, а в том месте где она располагалась до прокрутки. Т.е. если кнопка была вверху экрана, а потом переместилась в р-те прокрутки вниз, то DragEnter Event сработает именно вверху. Кто-нибудь сталкивался с такой проблемой? В чём причина этой ошибки?
Скорее всего режим transparent и Firefox =)
Я писал когда-то http://dev.etcs.ru/blog/shit/firefox-i-transparent/
Во всяком случае, симптомы очень похожи, из той же серии.
sobaka11
26.10.2006, 16:22
В эксплорере тоже самое. Вот нашел пример, похоже у других тоже такие ошибки были. http://140.130.204.31/Coordinator.html
Еще вот повесил DragEnter event на меню, но этот event даже без прокрутки срабатывает не над меню, а сбоку от него. Может это баги Flexа?
Нет, тут похоже просто проблема в координатах, это не проблема браузера…
sobaka11
26.10.2006, 19:24
Вот код приложения:
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
// Import the Menu control.
import mx.controls.Menu;
import mx.events.MenuEvent;
import mx.events.DragEvent;
import mx.managers.DragManager;
import mx.core.UIComponent;
private var myMenu:Menu;
// Create and display the Menu control.
private function createAndShow():void {
// The third parameter sets the showRoot property to false.
// You must set this property in the createMenu method, not later.
myMenu = Menu.createMenu(null, myMenuData, false);
myMenu.labelField="@label";
myMenu.show(300, 200);
myMenu.addEventListener(DragEvent.DRAG_ENTER, handleDragEnter);
}
private function handleDragEnter(event:DragEvent):void
{
event.preventDefault();
var dropTarget : UIComponent = UIComponent(event.currentTarget);
DragManager.acceptDragDrop(dropTarget);
DragManager.showFeedback(DragManager.COPY);
// myMenu.show(10, 10);
}
]]>
</mx:Script>
<!-- Define the menu data. -->
<mx:XML format="e4x" id="myMenuData">
<root>
<menuitem label="MenuItem A" >
<menuitem label="SubMenuItem A-1" enabled="False"/>
<menuitem label="SubMenuItem A-2"/>
</menuitem>
<menuitem label="MenuItem B" type="check" toggled="true"/>
<menuitem label="MenuItem C" type="check" toggled="false"/>
<menuitem type="separator"/>
<menuitem label="MenuItem D" >
<menuitem label="SubMenuItem D-1" type="radio" groupName="one"/>
<menuitem label="SubMenuItem D-2" type="radio" groupName="one"
toggled="true"/>
<menuitem label="SubMenuItem D-3" type="radio" groupName="one"/>
</menuitem>
</root>
</mx:XML>
<mx:VBox>
<!-- Define a Button control to open the menu -->
<mx:Button id="myButton" label="Open Menu" dragEnter="createAndShow()" click="createAndShow()"/>
</mx:VBox>
<mx:DataGrid dragEnabled="true">
<mx:ArrayCollection>
<mx:Object Artist="Pavement" Price="11.99"
Album="Slanted and Enchanted" />
<mx:Object Artist="Pavement"
Album="Brighten the Corners" Price="11.99" />
</mx:ArrayCollection>
<mx:columns>
<mx:DataGridColumn dataField="Album" />
<mx:DataGridColumn dataField="Price" />
</mx:columns>
</mx:DataGrid>
</mx:Application>
Если протянуть элемент из датагрида над кнопкой, то откроется меню. На меню весит слушатель(DragEnter). По идее он должен срабатывать, если чтото протаскивается над ним. Но над самим меню он не срабатывает, а срабатывает справа и ниже от меню(т.е. крестик становится зелёным). Как это исправить?
Мммм, проверь координаты в DragEvent
sobaka11
26.10.2006, 21:26
Не совсем понял: что нужно проверить в координатах? Просто DragEnter срабатывает не над меню и курсор меняется на зелёный не над меню. Значит очевидно надо что-то делать до этого ивента, чтобы курсор становился зелёным над меню.
Если просто .show(), то показывает там, где нужно, кстати.
Указал в качестве parent object DataGrid, но меню всё равно показывает слева вверху… Что-то не так.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.