2016-11-09 25 views
0

我目前正在使用帶有javascript/html前端的LeapMotion項目。我想用LeapMotion控制整個應用程序(包括點擊,點擊和拖動等)。但是,我遇到了一些問題。Javascript單擊頁面上的模擬

我想觸發一個MouseEvent("click"),但是,我不想觸發特定元素上的事件(如here所述)。這是因爲我不想「手動」檢查我的LeapMotion光標結束了哪個元素,並調用它的觸發器。相反,我想觸發一個更「純」的點擊事件,其中javascript決定了被點擊的內容。是這樣的可能嗎?如果沒有,是否有任何合理的解決方法?

提前致謝!

編輯: 一些更多的信息。我目前可以在我的代碼中確定何時需要基於LeapMotion的數據觸發點擊事件。我的問題是,我需要一種方法來觸發頁面上的點擊事件。目前,我找到的解決方案可以創建一個MouseEvent,但他們必須在特定的div/element/etc中調用它。我想觸發一個更「全局」的MouseEvent,這樣我就可以在頁面上觸發它而不是特定的元素。

+0

像[this](http://stackoverflow.com/questions/29555044/javascript-global-onclick-listener)? –

+0

我需要觸發和「全局點擊」事件,所以相反(我認爲?)。我會在上面添加更多信息。 – BrandonM

+1

@KevinKloet看起來更像是一個監聽點擊事件的函數,而不是模擬它。他希望使用JavaScript來檢測當計算機沒有將驅動程序註冊爲定點設備的外部指針設備懸停在某個元素上時。 – Crowes

回答

0

對於將來會有類似問題的人,這裏是我最終解決這個問題的方法。

LeapMotion正在更新屏幕中「光標」對象的位置。當我確定點擊正由用戶執行時,我執行以下操作:

  1. 獲取光標的位置(一些計算進入此以引用光標,而不是頂部的中心和左側偏移javascript會給你)
  2. 使用document.elementFromPoint(x, y)我檢索到遊標當前懸停的元素(如果有元素相互重疊,可能需要進行一些解析)。
  3. 按如下所示創建MouseEvent並將其分派給元素。

    var evt = new MouseEvent("mousedown", function(){ 
        view: window, 
        cancelable: true, 
        clientX: x, 
        clientY: y 
    }); 
    element.dispatchEvent(evt); 
    

我也應該注意到,我需要鼠標按下區分,鼠標鬆開,單擊,和mousemove事件。因此,在確定要發送哪個事件時有一些邏輯。不過,我只能通過它的位置(在mousedown事件調用中)檢索元素,以便在點擊時容忍用戶手中的某些移動。

這不是最好的解決方案,但它工作得很好。希望這有助於!