Esperaba crear un control en el que un usuario pudiera hacer clic dentro de un div, luego arrastrar el mouse y luego soltar el mouse para indicar cuánto tiempo quieren que sea algo. (Esto es para un control de calendario, por lo que el usuario indicará la duración, a tiempo, de un determinado evento)
Parece que la mejor manera de hacer esto sería registrar un evento "mousedown" en el div padre que a su vez registra un evento "mousemove" en el div hasta que se active un evento "mouseup". Los eventos "mousedown" y "mouseup" definirán el inicio y el final del rango de tiempo y, a medida que sigo los eventos de "mousemove", puedo cambiar dinámicamente el tamaño del rango para que el usuario pueda ver lo que está haciendo. Basé esto en cómo se crean los eventos en Google Calendar.
El problema que tengo es que el evento jQuery parece proporcionar solo información confiable de coordenadas del mouse en referencia a toda la página. ¿Hay alguna manera de discernir cuáles son las coordenadas en referencia al elemento padre?
Editar:
Aquí hay una foto de lo que estoy tratando de hacer:
fuente
offset()
también es relativo, por lo que si el padre es hijo de otro elemento, esto dará un resultado incorrecto. Usar en suposition()
lugar.Para obtener la posición del clic en relación con el elemento seleccionado actual
Use este código
fuente
var y = e.pageY - $(this).offset().top;
pero tu respuesta me llevó por el camino correcto.Yo uso este código, es bastante agradable :)
fuente
La respuesta de @AbdulRahim es casi correcta. Pero sugiero la siguiente función como sustituto (para referencia adicional):
fuente
Esta solución es compatible con todos los principales navegadores, incluido IE. También se encarga del desplazamiento. Primero, recupera la posición del elemento en relación con la página de manera eficiente y sin utilizar una función recursiva. Luego obtiene la x e y del clic del mouse con relación a la página y hace la resta para obtener la respuesta, que es la posición relativa al elemento (el elemento puede ser una imagen o div, por ejemplo):
fuente
Si hace que su elemento padre sea "position: relative", será el "desplazamiento padre" para las cosas sobre las que rastrea los eventos del mouse. Por lo tanto, la "posición ()" de jQuery será relativa a eso.
fuente
"position:relative"
. La posición de jQuery informaría sus posiciones relativas al elemento padre, no a la página. La redacción de mi respuesta es deficiente, implica que está directamente relacionada con la solución de Pointy, pero es una forma de calcular el desplazamiento cuando no puede o no quiere depender de los atributos de estilo del elemento padre.Aquí hay uno que también le da el porcentaje de posición del punto en caso de que lo necesite. https://jsfiddle.net/Themezly/2etbhw01/
fuente
Sugeriría esto:
fuente