2017-07-26 45 views
2

當元素被拖動時,是否有方法檢測mouseleave?單擊鼠標時的Javascript mouseleave

我嘗試拖放和元素,如果它在視口之外,以顯示包含div的元素的彈出窗口。

的鼠標離開時我不只是開除;噸拖動元素,但如果我嘗試將鼠標離開外拖不點擊該窗口內的作品,不會觸發

所以鼠標離開。 老鼠離開點擊doens't工作對我來說。

function verifyMouseLeave(el) 
{ 
    console.log(document.onmouseleave); 
    document.onmouseleave = function(){ 
     console.log("Mouse Out!"); 
     isMouseOver = true; 
    } 

    document.onmousedown = function(){ 
     console.log("Mouse Down!"); 
     isMouseDown = true; 
    } 

    if(isMouseOver == true && isMouseDown == true) 
    { 
     showPopup(); 
     el.remove(); 
     isMouseOver =false; 
     isMouseDown = false; 
    } 
} 

所以我舉例說三個div,我想將它們移到視口之外。 當我開始拖動div並在窗口周圍移動並釋放它時,我希望它保持與初始位置相同的位置。但是,如果我將它拖出窗口,我想從這裏刪除它並顯示一個彈出窗口。

非常感謝。

+0

請給我們一個[MCVE],所以我們可以看到這個問題。 – ItamarG3

+0

做一個片段,解釋你的問題。 – Durga

+0

拖動+點擊?的mouseenter +拖動? –

回答

0

嘗試使用.mouseleave()
綁定一個事件處理程序,當鼠標離開某個元素或觸發該元素上的該處理程序時觸發。

https://api.jquery.com/mouseleave/

+0

這是一個好主意,發佈一個示例代碼,顯示您的建議如何實現。 – ItamarG3

1

如果你指的HTML5 d & d,你有沒有從MOZ規範讀了? https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API

--else--

這裏和實例從小事我瞭解你的代碼,你不應該綁定到文檔,而是包裝元素。其次事件應該在驗證功能之外。因爲功能工作是檢查兩個事件是否同時被觸發。在這裏,工作代碼:

var isMouseLeave, isMouseDown; 
var body = document.getElementById("body") 

body.onmouseout = function(){ 
    console.log("Mouse Out!"); 
    isMouseLeave = true; 
    verifyMouseLeave(); 
} 

body.onmousedown = function(){ 
    console.log("Mouse Down!"); 
    isMouseDown = true; 
} 

function verifyMouseLeave(el){ 
    if(isMouseLeave == true && isMouseDown == true){ 
     console.log("Show Pop Up") 
     isMouseOver = false; 
     isMouseDown = false; 
    } 
} 

例子:

https://jsfiddle.net/194a5672/