Panzoom: Panzoom menyembunyikan acara mousedown dari sub-item di Chrome terbaru

Dibuat pada 7 Des 2016  ·  12Komentar  ·  Sumber: timmywil/panzoom

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.

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"}

Semua 12 komentar

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:


  1. Bagaimana cara membuat tautan berfungsi jika berada dalam elemen Panzoom? contoh
  • Propagasi peristiwa dihentikan untuk peristiwa mousedown dan touchstart untuk memungkinkan elemen Panzoom dalam elemen Panzoom. Untuk memperbaiki tautan, ikat pengendali peristiwa yang mencegah peristiwa mencapai pengendali Panzoom:
$('.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:

https://jsbin.com/yozotuxina/edit?js

@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

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

jsblanco picture jsblanco  ·  19Komentar

ronvillalon picture ronvillalon  ·  8Komentar

kylegoines picture kylegoines  ·  4Komentar

nich008 picture nich008  ·  14Komentar

gavJackson picture gavJackson  ·  3Komentar