2017-07-24 5 views
1

Vous cherchez une solution pour faire glisser un élément après l'événement "mouseup".Attachez l'événement "dragstart" à "mouseup" pour obtenir une expérience dragable

Comme vous le savez, un glissement se produit lorsqu'il reçoit des événements "mousedown" et "mousemove".

Comment puis-je obtenir un glissement avec l'événement «mouseup»? (Lorsque le clic est réalisé)?

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

La question est pourquoi? C'est un comportement inattendu pour la plupart des utilisateurs, et comment arrêteriez-vous de faire glisser? – adeneo

+0

J'arrêterais de glisser sur "mousedown". –

+0

Mais lorsque la souris est relâchée, c'est un clic, et le glissement est de nouveau activé. Il semble étrange d'avoir toujours quelque chose à glisser, sauf si le bouton de la souris est enfoncé. – adeneo

Répondre

0

Vous pouvez toujours utiliser la méthode $('.box').on('click', function(e) { ... qui pourrait le faire, mais gardez à l'esprit que vous devez ajouter un autre sur clic ou désactiver doubleclick, il est également tout à fait une comportement bizarre

explication de l'échantillon de ce que je veux dire

// 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'); 
    }); 
}); 

Voici comment je le ferais bien

// 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'); 
    }); 
});