J'espérais créer un contrôle où un utilisateur pourrait cliquer à l'intérieur d'un div, puis faire glisser la souris, puis relâcher la souris pour indiquer combien de temps il veut que quelque chose dure. (Ceci est pour un contrôle de calendrier, donc l'utilisateur indiquera la durée, dans le temps, d'un certain événement)
Il semble que la meilleure façon de faire cela serait d'enregistrer un événement "mousedown" sur le div parent qui à son tour enregistre un événement "mousemove" sur le div jusqu'à ce qu'un événement "mouseup" soit déclenché. Les événements "mousedown" et "mouseup" définiront le début et la fin de la plage horaire et, à mesure que je suivrai les événements "mousemove", je pourrai modifier dynamiquement la taille de la plage pour que l'utilisateur puisse voir ce qu'il fait. Je me suis basé sur la façon dont les événements sont créés dans le calendrier Google.
Le problème que j'ai est que l'événement jQuery semble ne fournir que des informations de coordonnées de souris fiables en référence à la page entière. Existe-t-il un moyen de discerner quelles sont les coordonnées en référence à l'élément parent?
Éditer:
Voici une image de ce que j'essaie de faire:
la source
offset()
est relative aussi, donc si le parent est un enfant d'un autre élément, cela donnera un mauvais résultat. Utilisezposition()
plutôt.Pour obtenir la position du clic par rapport à l'élément cliqué actuel
Utilisez ce code
la source
var y = e.pageY - $(this).offset().top;
Mais votre réponse m'a conduit sur la bonne voie.J'utilise ce morceau de code, c'est assez sympa :)
la source
La réponse @AbdulRahim est presque correcte. Mais je suggère la fonction ci-dessous comme substitut (pour référence ultérieure):
la source
Cette solution prend en charge tous les principaux navigateurs, y compris IE. Il s'occupe également du défilement. Tout d'abord, il récupère efficacement la position de l'élément par rapport à la page, et sans utiliser de fonction récursive. Ensuite, il obtient les x et y du clic de souris par rapport à la page et fait la soustraction pour obtenir la réponse qui est la position par rapport à l'élément (l'élément peut être une image ou un div par exemple):
la source
Si vous faites de votre élément parent "position: relative", alors ce sera le "parent de décalage" pour les éléments sur lesquels vous suivez les événements de souris. Ainsi, la jQuery "position ()" sera relative à cela.
la source
"position:relative"
. La position jQuery rapporterait alors ses positions par rapport à l'élément parent, pas à la page. Le libellé de ma réponse est médiocre, cela implique qu'il est directement lié à la solution de Pointy, mais c'est un moyen de calculer le décalage lorsque vous ne pouvez pas ou ne voulez pas dépendre des attributs de style de l'élément parent.En voici un qui vous donne également la position en pourcentage du point au cas où vous en auriez besoin. https://jsfiddle.net/Themezly/2etbhw01/
la source
Je suggérerais ceci:
la source