2011-08-23 20 views
0

我正在實現使用Mootools的拖放界面,其中創建了拖動元素的副本副本並使用鼠標移動。我希望用戶能夠使用鼠標滾輪來保持這個鬼元素。問題是,鬼本身正在吸收mousewheel事件,導致它不滾動它後面的頁面(在這種情況下,一個特定的div與滾動條)。處理元素背後的鼠標事件

在Firefox中,我通過將「pointer-events:none」樣式應用於ghost來解決這個問題,這會導致mousewheel事件像我想要的那樣通過。但似乎我需要針對IE的不同解決方案。我打算在ghost元素上捕捉mousewheel事件,並將它們轉發到容器div,但我似乎無法讓新事件觸發標準鼠標滾輪行爲(即滾動div)。有誰知道我能做到這一點?

這裏就是我在談論的一個非常簡單的例子:http://jsfiddle.net/jqL8Z/3/

需要注意的是,如果你鼠標滾輪在「拖動元素」,頁面不滾動。這是因爲滾動是主div的溢出的一部分,而拖動框不是該div的成員,所以它的鼠標事件將起泡到主體。我不想讓它成爲div的成員,因爲那樣當它在div外面拖動時它就會隱形。

我試過下面的代碼捕獲並重定向事件:

textClone.addEvent('mousewheel', function(e) { 
     var mouseWheelEvent = document.createEvent('MouseEvents'); 
     mouseWheelEvent.initMouseEvent('mousewheel', true, true, window, e.detail, e.screenX, e.screenY, e.clientX, e.clientY, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, e.button, e.relatedTarget); 
     treeDiv.dispatchEvent(mouseWheelEvent); 
    }); 

,但沒有運氣,有什麼地方人仍下落不明。

+0

[ppointer-events](https://developer.mozilla.org/en/CSS/pointer-events)也許? –

+0

我不明白,我可以使用sortables,拖動一個項目,然後鼠標滾動頁面w/o任何限制,直到我找到放棄它的地方。 http://jsfiddle.net/dimitar/Wzrt7/ –

+0

我應該澄清,這是我拖動的div元素,所以這可能是爲什麼它阻止mousewheel事件。我想用一個更簡單的元素作爲鬼魂可能是一個選項。 –

回答

0

我最終做的是改變我的拖放邏輯,以將鬼部分保持在鼠標側面而不是下面。這樣它就不會捕獲任何鼠標事件。

0

通過調用頁面的鼠標滾輪事件來響應div的鼠標滾輪事件可能會實現您的目標。

+0

這基本上是我想要做的,但fireEvent()只觸發自定義處理程序。看起來像dispatchEvent()可以做到這一點,但它不適合我,我更新了一個例子。 –