2010-11-01 4 views
8

J'ai un élément sur mon site qui est librement redimensionnable. Ceci est fait par 4 poignées sur les bords. En survolant ces poignées et en redimensionnant l'élément, je veux montrer les flèches de redimensionnement respectives.curseur personnalisé en dehors de la fenêtre du navigateur

Actuellement, j'ai implémenté ce comportement en définissant le style de curseur css du corps/racine à ces flèches. Le problème à ce sujet est la limite à la zone client de la fenêtre du navigateur. Ce serait visuellement plus cohérent et moins confus, si le curseur fléché serait visible partout alors que la souris est maintenue enfoncée. Google Maps fait la même chose avec le curseur de la main tout en déplaçant la carte. Donc, ma question est de savoir comment réaliser cet effet par moi-même.

Ma source de courant (pertinente):

function startObjectScaling(e){ 
    e.stopPropagation(); 
    e.preventDefault(); 
    document.documentElement.style.cursor = this.style.cursor; 
    window.addEventListener("mouseup", stopObjectScaling, false); 
} 

function stopObjectScaling(e){ 
    e.stopPropagation(); 
    document.documentElement.style.cursor = ''; 
    window.removeEventListener("mouseup", stopObjectScaling); 
} 

[...] 

var tg = document.getElementById("transformGadget"); 
var handle = tg.firstChild.nextSibling; 
for(var i=0;i<4;i++){ 
    handle.addEventListener("mousedown", startObjectScaling, false); 
    handle = handle.nextSibling; 
} 
+0

Quel code/markup avez-vous actuellement? – alex

+2

Pour moi sur Chromium, le curseur Google Maps reste seulement une main si je sors de la fenêtre sans passer par aucune autre partie de la page; sinon, il revient au curseur normal. Je pense que cela signifie que vous ne pouvez probablement pas obtenir une solution à 100% à votre problème, malheureusement. –

+0

Je l'ai testé dans Firefox et Chrome et là ça a très bien fonctionné - c'est tellement mieux que ma solution actuelle. – V02460

Répondre

4

Une fonction spéciale est implémentée dans les navigateurs plus modernes à cet effet. Le nom est setCapture(). Il redirige toutes les entrées de la souris vers l'objet sur lequel la méthode a été appelée. Maintenant, un simple css curseur définition sur cet élément est suffisant pour archiver l'effet désiré. Après la libération de la souris, cet effet s'arrête (pour la sécurité à coup sûr). Il peut également être arrêté manuellement en appelant releaseCapture

exemple:

<style type="text/css"> 
#testObj { 
    /* this cursor will also stay outside the window. 
     could be set by the script at the mousedown event as well */ 
    cursor: hand; 
} 
</style> 

[...]

document.getElementById('testObj').onmousedown = function(e){ 

    // these 2 might be useful in this context as well 
    //e.stopPropagation(); 
    //e.preventDefault(); 

    // here is the magic 
    e.target.setCapture(); 
} 
+0

Je suis content que vous ayez trouvé une réponse au problème. Merci de mettre à jour la page. – jcolebrand

+0

IE FTW depuis 1995! –

-1

si le curseur de la flèche serait visible partout alors que la souris est maintenez.

Vous comptez sur une anomalie du système d'exploitation pour créer votre comportement. Ce n'est pas quelque chose que vous pouvez ASSUME sera toujours vrai. Cependant, une fois que vous avez lancé un mousedown, le curseur à ce point restera normalement le même, peu importe où vous déplacez la souris, UNTIL autre chose (une autre fenêtre sur laquelle vous pouvez passer la souris? le curseur.

En d'autres termes, ne comptez pas sur ce comportement. Trouvez quelque chose d'autre qui fonctionnera pour vous. Si vous devez le faire, réexaminez les exigences de votre entreprise.

+2

Ceci est une supposition sauvage et je n'ai trouvé aucune information à ce sujet avec une recherche rapide, mais je pense que ce n'est pas une anomalie du système d'exploitation, mais plutôt un comportement des fournisseurs de navigateurs (oui, c'est cohérent avec eux) implémenté - tout comme la mise à jour coordonnée de la souris en dehors de la zone client . Ils l'ont fait pour que ce genre d'applications fonctionne correctement. – V02460

+0

Je me tiens toujours à ce que ce soit une anomalie d'OS à cause du dessin du curseur qui est censé être géré par le GDI ou le WM. Si je souris au-dessus d'une fenêtre avec un verrou tournant, je reçois le fileur. Je n'ai pas essayé de tester cela sur un système, donc si vous construisez un banc d'essai qui comprend Gnome, KDE, Windows, MacOS et Chrome, Firefox, Safari et IE avec des changements de curseur dans chaque application et glisser-hors-of-of- bounds-with-cursor-change et glisser-dehors-de-bounds-without-cursor-change s'il vous plaît soyez sûrs et faites le moi savoir. Jusque-là, je vais aller avec ma compréhension. – jcolebrand

+0

Aussi, je vais vous faire remarquer que si tout est cohérent, alors vous avez probablement tort. Les fournisseurs de navigateurs ne peuvent même pas obtenir un espacement des éléments cohérent à 100%. Vous vous attendez à ce que le comportement de la souris soit cohérent? – jcolebrand

Questions connexes