2013-01-10 2 views
1

Je travaille avec le jQuery UI Draggable widget. Cela fonctionne bien sauf que j'ai maintenant besoin d'ajouter le défilement automatique. C'est, tout en faisant glisser, je veux faire défiler la fenêtre du navigateur lorsque la souris est en haut ou en bas de la fenêtre. J'ai beaucoup d'expérience en faisant des choses comme ça en C et en C + +. Je voudrais définir un drapeau pour indiquer qu'une opération de glisser est en cours. Dans le gestionnaire de message de déplacement de souris, je définirais un minuteur. Et dans le gestionnaire de la minuterie, je ferais défiler la fenêtre dans la direction appropriée. Je voudrais éteindre la minuterie lorsque la souris a quitté la zone "de déclenchement". J'utiliserais une minuterie pour que le défilement soit régulier même si la souris ne bougeait pas.Mise en œuvre du défilement automatique avec l'interface utilisateur JQuery Dragable Widget

Quelqu'un peut-il offrir quelques suggestions sur la façon dont je commencerais avec ceci en utilisant jQuery et le widget Draggable? Y a-t-il un gestionnaire de déplacement de souris? Puis-je savoir si la souris est en haut ou en bas de la fenêtre? Et puis-je faire défiler la fenêtre du navigateur? Et qu'en est-il des problèmes de minuterie? Une pensée est d'afficher des superpositions pour les zones «trigger», mais mes compétences jQuery sont quelque peu limitées. Ou, mieux encore, je suis sûr que quelqu'un a déjà fait quelque chose comme ça. Des exemples?

Remarque: Le widget Draggable prend en charge le défilement automatique, mais il fait défiler un élément conteneur. J'ai besoin de faire défiler la fenêtre du navigateur.

EDIT

J'ai essayé de régler l'option de confinement "document", mais il n'a eu aucun effet notable.

$('.drag-handle').draggable({ 
    axis: "y", 
    containment: "document", 
    scroll: true, 
    helper: buildHelper 
}); 
+0

Je ne suis pas très familier avec draggable, mais avez-vous essayé avec l'option de confinement mis en document ou autre valeur? http://api.jqueryui.com/draggable/#option-containment – frozenkoi

+0

J'ai juste essayé d'ajouter ceci. (Mettez mon code réel dans ma question.) Mais cela ne semble pas avoir d'effet. Merci. –

Répondre

3

Fondamentalement, il fonctionne avec votre code: http://jsfiddle.net/DgzAH mais l'utilisateur doit toujours se déplacer légèrement la souris pour activer le défilement automatique.

j'ai écrit un code à ce sujet il y a quelques mois pour faire défiler un div lorsque l'élément traîne sans déplacer la souris:

Scroll div when element is dragging without moving mouse

L'idée est de vérifier l'emplacement de l'élément traîné et créer une fonction setInterval lorsque la La position de l'événement de déplacement est située à 70 px de la bordure de mon div. Dans votre cas, l'enveloppe de la page ou directement le body: http://jsfiddle.net/pPn3v/22/

+0

Merci, je pense que c'est la bonne approche. Cependant, cela ne fonctionne pas tout à fait pour moi. J'ai posté une page de test et décrit le problème plus en détail dans la nouvelle question [Comportement Odd Draggable après la mise en œuvre du défilement automatique] (http://stackoverflow.com/questions/14300659/odd-draggable-behavior-after-implementing- défilement automatique). –

Questions connexes