2017-07-24 47 views
1

尋找在「mouseup」事件之後拖動元素的解決方案。將「dragstart」事件附加到「mouseup」以獲得可拖動的體驗

正如你所知道的拖動發生時,它會收到「mousedown」和「mousemove」事件。

如何通過「mouseup」事件實現拖動? (點擊實現時)?

https://codepen.io/pklauzinski/pen/rxroyL

// Implement drag and drop for the image 
$('.box').on('mousedown', function(e) { 
    var $this = $(this), 
     $window = $(window), 
     mouseX = e.pageX, 
     mouseY = e.pageY, 
     width = $this.outerWidth(), 
     height = $this.outerHeight() 
     elemX = $this.offset().left + width - mouseX, 
     elemY = $this.offset().top + height - mouseY; 

    e.preventDefault(); 
    $window.on('mousemove.drag', function(e2) { 
     $this.offset({ 
      left: e2.pageX + elemX - width, 
      top: e2.pageY + elemY - height 
     }); 
    }).one('mouseup', function() { 
     $window.off('mousemove.drag'); 
    }); 
}); 
+0

問題是爲什麼?這對於大多數用戶來說是意想不到的行爲,您將如何停止拖動? – adeneo

+0

我會停止拖動「mousedown」。 –

+0

但是,當鼠標再次被釋放時,這是一個點擊,並拖動回來。除非按下鼠標按鈕,否則總是有可拖動的東西似乎很奇怪。 – adeneo

回答

0

您可以隨時使用$('.box').on('click', function(e) {方法......,可以做到,但要記住,你將不得不添加其他用戶點擊或雙擊禁用,也,這是相當怪異的行爲

我的意思

示例說明

// Implement drag and drop for the image 
$('.box').on('click', function(e) { 
    var $this = $(this), 
     $window = $(window), 
     mouseX = e.pageX, 
     mouseY = e.pageY, 
     width = $this.outerWidth(), 
     height = $this.outerHeight() 
     elemX = $this.offset().left + width - mouseX, 
     elemY = $this.offset().top + height - mouseY; 

    e.preventDefault(); 
    $window.on('mousemove.drag', function(e2) { 
     $this.offset({ 
      left: e2.pageX + elemX - width, 
      top: e2.pageY + elemY - height 
     }); 
    }).one('mousedown', function() { 
     $window.off('mousemove.drag'); 
    }); 
}); 

這是我會怎麼做,雖然

// Implement drag and drop for the image 
$('.box').on('mousedown', function(e) { 
    var $this = $(this), 
     $window = $(window), 
     mouseX = e.pageX, 
     mouseY = e.pageY, 
     width = $this.outerWidth(), 
     height = $this.outerHeight() 
     elemX = $this.offset().left + width - mouseX, 
     elemY = $this.offset().top + height - mouseY; 

    e.preventDefault(); 
    $window.on('mousemove.drag', function(e2) { 
     $this.offset({ 
      left: e2.pageX + elemX - width, 
      top: e2.pageY + elemY - height 
     }); 
    }).one('click', function() { 
     $window.off('mousemove.drag'); 
    }); 
}); 
相關問題