Eu esperava criar um controle no qual um usuário pudesse clicar dentro de uma div, arrastar o mouse e soltar o mouse para indicar quanto tempo eles querem que algo seja. (Isso é para um controle de calendário, o usuário indicará a duração, no tempo, de um determinado evento)
Parece que a melhor maneira de fazer isso seria registrar um evento "mousedown" na div pai que, por sua vez, registra um evento "mousemove" na div até que um evento "mouseup" seja acionado. Os eventos "mousedown" e "mouseup" definirão o início e o fim do intervalo de tempo e, ao seguir os eventos "mousemove", posso alterar dinamicamente o tamanho do intervalo para que o usuário possa ver o que está fazendo. Baseei isso em como os eventos são criados no Google Agenda.
O problema que estou tendo é que o evento jQuery parece fornecer apenas informações confiáveis sobre as coordenadas do mouse em referência a toda a página. Existe alguma maneira de discernir quais são as coordenadas em referência ao elemento pai?
Editar:
Aqui está uma foto do que estou tentando fazer:
fonte
offset()
também é relativo; portanto, se o pai for filho de outro elemento, isso dará um resultado errado. Use emposition()
vez disso.Para obter a posição do clique em relação ao elemento clicado atual
Use este código
fonte
var y = e.pageY - $(this).offset().top;
sua resposta me levou ao caminho certo.Eu uso esse pedaço de código, é muito bom :)
fonte
A resposta @AbdulRahim está quase correta. Mas sugiro a função abaixo como substituta (para referência futura):
fonte
Esta solução suporta todos os principais navegadores, incluindo o IE. Ele também cuida da rolagem. Primeiro, ele recupera a posição do elemento em relação à página de forma eficiente e sem usar uma função recursiva. Em seguida, obtém o xey do clique do mouse em relação à página e faz a subtração para obter a resposta que é a posição relativa ao elemento (o elemento pode ser uma imagem ou div por exemplo):
fonte
Se você tornar seu elemento pai "position: relative", será o "pai offset" para as coisas sobre as quais você está rastreando os eventos do mouse. Portanto, o jQuery "position ()" será relativo a isso.
fonte
"position:relative"
. A posição do jQuery reportaria suas posições em relação ao elemento pai, não à página. A redação da minha resposta é ruim, implica que ela está diretamente relacionada à solução de Pointy, mas é uma maneira de calcular o deslocamento quando você não pode ou não quer depender dos atributos de estilo do elemento pai.Aqui está um que também fornece a porcentagem da posição do ponto, caso você precise. https://jsfiddle.net/Themezly/2etbhw01/
fonte
Eu sugeriria isso:
fonte