Saya menggunakan plugin yang luar biasa ini dengan jquery.draggable untuk menggeser/memperbesar diagram dengan node yang dapat diseret,
tetapi setelah pembaruan Chrome terbaru, node menjadi tidak dapat diseret.
Penyelidikan kecil menunjukkan bahwa Chrome mengubah sesuatu dengan acara pointerdown-nya,
jadi sekarang plugin panzoom merespons acara pointerdown dari simpul anak sebelum acara mousedown diaktifkan.
Panzoom menekan acara pointerdown dan untuk beberapa alasan tidak ada acara mousedown setelah itu, jadi menyeret tidak dimulai.
jquery.panzoom.js v3.2.2
jquery 3.1.0 atau v1.11.3
jqueryui 1.12.0 atau 1.10.3
Chrome 55.0.2883.75 (64-bit) Ubuntu 16.04
Ini demonya
http://codepen.io/yurigor/pen/yVjeGB
Saya menambahkan opsi 'ignoreChildrensEvents' untuk memperbaiki masalah ini
Saya tidak yakin apakah saya harus membuat permintaan tarik dengan perubahan ini.
Saya mengalami masalah yang sama, chrome v55. Saya memiliki jendela yang dapat diseret, dan saya ingin mendapatkan acara mousedown untuk anak-anak Apa yang Anda lakukan untuk memperbaikinya? apakah Anda memiliki cabang dengan perubahan, saya terjebak untuk saat ini.
menemukan cabang Anda dan itu memperbaiki masalah saya dengan sangat baik. Terima kasih YuriGor ini luar biasa
Saya senang bisa membantu!
Siapa saja, yang juga membutuhkannya, ini tautan langsungnya:
https://github.com/YuriGor/jquery.panzoom/tree/ignoreChildrensEvents/dist
@timmywil , jika Anda ingin menggabungkan perubahan saya, tolong bantu saya dengan gerutuan.
Saya memulai livereload dengan
grunt watch:dev
tapi itu tidak berhasil.
Di http://localhost :35711/ saya punya
{"tinylr":"Welcome","version":"0.2.1"}
dan di
http://localhost :35711/test/index.html
atau
http://localhost :35711/demo/index.html
saya sudah
{"error":"not_found","reason":"no such route"}
Terima kasih banyak. perbaikan ini tidak cukup bagi saya tetapi saya menambahkan beberapa sendiri untuk memperbaikinya untuk kasus saya. (saya memiliki beberapa anak bersarang, beberapa di antaranya harus diabaikan dan yang lain tidak boleh)
@timmywil Apakah mungkin untuk merilis versi baru dengan opsi ini?
Sunting: Sebenarnya saya memiliki masalah yang sama dengan romi45. 😞
Sunting 2: Opsi untuk mencantumkan elemen mana yang diabaikan akan sangat membantu, seperti:
ignoreChildEventsFrom: [".things-to-ignore1", ".things-to-ignore2"]
Sunting 3: Saya pikir saya mungkin telah menemukan solusi di FAQ "Bagaimana cara membuat tautan berfungsi jika mereka berada dalam elemen Panzoom?".
apa yang saya lakukan adalah mengomentari preventDefault pada baris 969. preventDefault akan memblokir acara agar tidak menjangkau anak-anaknya.
@akhnaz ,
Dari pemahaman saya, preventDefault
akan mencegah tindakan default yang terkait dengan sebuah elemen (anak atau elemen panzoom itu sendiri), dan stopPropagation
akan menghentikan peristiwa dari gelembung hingga elemen induk.
Ada solusi sederhana dan elegan di FAQ:
$('.panzoom a').on('mousedown touchstart', function( e ) {
e.stopImmediatePropagation();
});
Ini tidak memerlukan perubahan pada perpustakaan itu sendiri.
Hai @glen-84
Ya, preventDefault akan mencegah tindakan default. Tapi, itu juga akan mencegah mouseDown dari anak ketika pointerDown sedang dikirim dan didengarkan.
Di chrome 55 pointerDown sekarang dikirim dan microsoft edge sudah mengimplementasikan pointerDown dari awal.
Dalam kasus saya, panzoom mendengarkan pointerDown, dan anak-anak mendengarkan mouseDown.
Ini jsbin saya untuk itu:
@akhnaz ,
Anda cukup mendengarkan pointerdown
pada anak dan menghentikan propagasi langsung ...
https://jsbin.com/sicapuledo/edit?html ,js,console,output
Hai,
Saya sedikit meningkatkan fitur Anda. Saya mengganti opsi Anda ke kemungkinan array kelas. Tujuannya adalah untuk hanya mengabaikan peristiwa jika anak-anak memiliki salah satu kelas yang terdaftar. Tentu saja, cukup atur nilainya ke pekerjaan yang sebenarnya saat Anda menerapkannya.
Saya tidak punya waktu untuk melakukan fork dengan benar dan membuat permintaan tarik. Harap sertakan perbaikan kecil itu dan permintaan penarikan ke repositori utama.
Berikut adalah kode yang diperbarui dari baris garpu Anda 959:
if (!options.disablePan || !options.disableZoom) {
events[ str_start ] = function(e) {
if(options.ignoreChildrensEvents) {
if($.isArray(options.ignoreChildrensEvents)) {
if(options.ignoreChildrensEvents.find(function(c){return $(e.target).hasClass(c);})) {
return;
}
}
else if(e.target !== this){
return;
}
}
var touches;
/* rest of code */
Opsi mengabaikanChildrensEvents dapat didefinisikan sebagai true, false atau ['child-class1', 'child-class2'].
Salam
tolong rilis versi yang lebih baru berisi abaikanChildrensEvents
Komentar yang paling membantu
Saya senang bisa membantu!
Siapa saja, yang juga membutuhkannya, ini tautan langsungnya:
https://github.com/YuriGor/jquery.panzoom/tree/ignoreChildrensEvents/dist
@timmywil , jika Anda ingin menggabungkan perubahan saya, tolong bantu saya dengan gerutuan.
Saya memulai livereload dengan
grunt watch:dev
tapi itu tidak berhasil.
Di http://localhost :35711/ saya punya
{"tinylr":"Welcome","version":"0.2.1"}
dan di
http://localhost :35711/test/index.html
atau
http://localhost :35711/demo/index.html
saya sudah
{"error":"not_found","reason":"no such route"}