2009-04-08 9 views
11

Je peux configurer un élément comme draggable en invoquantJquery ui, appelez commencer glisser manuellement dans l'interface utilisateur JQuery

$("#drag").draggable(); 

Mais est-il un moyen de démarrer et d'arrêter les fonctions de glisser manuellement d'une autre fonction? Ie

someOtherFunction = function() { 
    $("#drag").startdrag(); 
} 
yetAnotherFunction = function() { 
    $("#drag").stopdrag(); 
} 
+0

peut-être vous êtes intéressé par scrollTo parce que je ne beleive draggable peut déplacer un objet sans interaction de la souris? – TStamper

+0

Je n'ai jamais dit que je ne voulais pas utiliser la souris. Je dois invoquer le glisser en dehors de la div car il devrait être initié à partir d'un fichier Flash en utilisant FScommand. – Jan

Répondre

12

Les réponses ci-dessus semblent trop compliquées.

$('.nonDraggableObjectWhichTriggersDrag').mousedown(function(e) { 
    $('.draggableObject').trigger(e); 
}); 
+0

Je ne suis pas tout à fait sûr que cela aurait fonctionné dans mon projet original (puisqu'il impliquait Flash et 'fsCommand'), mais c'est le plus proche d'une solution de travail qui a été postée. Dans le projet, j'ai fini par mettre le draghandler au-dessus du fichier Flash, et placer les divs sur les boutons flash appelant les commandes flash via 'fsCommand'. Pas joli mais ça a marché. – Jan

+1

Ne fonctionne pas pour moi. – wh1t3cat1k

+1

+1 - Je sais que ce commentaire est un peu en retard mais 'triggerHandler (e)' devrait probablement être utilisé à la place. Quand j'ai utilisé 'trigger', je me suis retrouvé avec un débordement de pile à cause de la façon dont j'avais d'autres fonctions/DOM connectées. Le changer en 'triggerHandler' a résolu ce problème car il n'y avait pas de bulles. 'triggerHandler' sera également plus efficace. –

1

Le début du glissement est démarré via un script qui examine les événements de la souris. souris vers le bas suivie d'un mouvement de souris. Si vous pouvez simuler ces mouvements de la souris via Javascript (je ne sais pas où, comment, ou même si c'est possible), alors il devrait déclencher le début d'un glisser.

Remarque: je viens de trouver que YUI a un moyen de simuler les mouvements de la souris et les clics de souris. Check out http://developer.yahoo.com/yui/yuitest/#useractions

+0

Cela semble trop complexe. Peut-être que ce serait plus facile à accomplir avec d'autres bibliothèques, alors? Peut-être prototype.js ou quelque chose de similaire? – Jan

+0

Allez-y. Si un prototype peut simuler des mouvements de souris, alors il sera aussi "difficile" qu'avec yui. – DMCS

1

pour arrêter le vous glisser suffit de revenir faux dans le rappel en faisant glisser, quelque chose comme ceci:

$("#unlock-handle").draggable({axis:'x', containment:'parent', drag:onDrag}); 

... 

var onDrag = function(e) {  
    if ($(this).position().left > 200) return false; 
}; 

Hope it helps :-)

1

Je ne ai pas trouvé un moyen de déclenchement glisser manuellement, mais j'ai trouvé une solution de contournement pour ma situation similaire.

J'ai eu cette situation avec deux images qui se chevauchent (voir l'image ci-dessous), toutes deux partiellement transparentes. Dans le démarrage (événement) de draggable, je voulais vérifier si elle atteignait les pixels transparents. Si oui, j'ai regardé en dessous pour un autre élément pour voir si celui-ci a été touché. Et si c'était le cas, je voulais initier son glissement.

enter image description here

Solution? Je réorganiser les images sur mousemove, et draggable est ensuite déclenché pour cette image la plus haute.

Pour la sélection d'éléments pixel précis, voir mon autre réponse: registering clicks on an element that is under another element