Saya berharap untuk membuat kontrol di mana pengguna dapat mengklik di dalam div, lalu seret mouse, lalu biarkan mouse untuk menunjukkan berapa lama mereka menginginkan sesuatu. (Ini untuk kontrol kalender, sehingga pengguna akan menunjukkan panjang, waktu, dari peristiwa tertentu)
Sepertinya cara terbaik untuk melakukan ini adalah dengan mendaftarkan acara "mousedown" pada div induk yang pada gilirannya mendaftarkan acara "mousemove" pada div hingga acara "mouseup" dipicu. Acara "mousedown" dan "mouseup" akan menentukan awal dan akhir rentang waktu dan saat saya mengikuti acara "mousemove", saya dapat secara dinamis mengubah ukuran rentang sehingga pengguna dapat melihat apa yang mereka lakukan. Saya mendasarkan ini pada bagaimana acara dibuat di kalender google.
Masalah yang saya alami adalah bahwa acara jQuery tampaknya hanya memberikan informasi koordinat mouse yang dapat diandalkan sehubungan dengan seluruh halaman. Apakah ada cara untuk mengetahui koordinat apa yang mengacu pada elemen induk?
Edit:
Inilah gambar dari apa yang saya coba lakukan:
sumber
offset()
juga relatif, jadi jika orang tua adalah anak dari elemen lain, ini akan memberikan hasil yang salah. Gunakanposition()
sebagai gantinya.Untuk mendapatkan posisi klik relatif terhadap elemen yang diklik saat
ini Gunakan kode ini
sumber
var y = e.pageY - $(this).offset().top;
Tapi jawaban Anda membawa saya ke jalan yang benar.Saya menggunakan kode ini, cukup bagus :)
sumber
@AbdulRahim jawabannya hampir benar. Tapi saya sarankan fungsi di bawah ini sebagai pengganti (untuk referensi lebih lanjut):
sumber
Solusi ini mendukung semua browser utama termasuk IE. Ini juga menangani pengguliran. Pertama, ia mengambil posisi elemen relatif ke halaman secara efisien, dan tanpa menggunakan fungsi rekursif. Kemudian ia mendapat x dan y dari klik mouse relatif ke halaman dan melakukan pengurangan untuk mendapatkan jawaban yang merupakan posisi relatif terhadap elemen (elemen dapat berupa gambar atau div misalnya):
sumber
Jika Anda membuat elemen induk Anda menjadi "position: relative", maka itu akan menjadi "parent offset" untuk hal-hal yang Anda lacak aktivitas tetikusnya. Dengan demikian "posisi ()" jQuery akan relatif terhadap itu.
sumber
"position:relative"
. Posisi jQuery kemudian akan melaporkan posisinya relatif ke elemen induk, bukan halaman. Kata-kata pada jawaban saya buruk, itu menyiratkan bahwa itu terkait langsung dengan solusi Pointy, tetapi itu adalah cara menghitung offset ketika Anda tidak bisa atau tidak ingin bergantung pada atribut gaya elemen induk.Ini adalah salah satu yang juga memberi Anda posisi persen jika Anda membutuhkannya. https://jsfiddle.net/Themezly/2etbhw01/
sumber
Saya akan menyarankan ini:
sumber