2017-11-09 118 views
7

Bir SVG öğesinin içindeki öğelerin, dokunma özellikli aygıtlarda da kullanılabilen, sürükleyip bırakabileceği bir uygulama (d3-drag ve d3-zoom, bkz. https://bl.ocks.org/mbostock/3127661b6f13f9316be745e77fdfb084). uzun bir basıştan sonra bir içerik menüsü açılır (en azından IE11, Edge ve Firefox'ta) ve bu sırada, bu yüzden bağlam menüsünün bu durumda gösterilmesini engellemek istiyorum.Dokunma eyleminin sonucu olan Discern contextmenu olayları?

Sadece contextmenu olay işleme ve olay nesne üzerinde .preventDefault() yaparak genel bağlam menüsünü gösteren reddetmez ama ben bir çözüm içerik menüsü sadece dokunmatik durumda gösterilmesi engellenir nerede var olup olmadığını merak ve hala olurdu örneğin görmek Öğenin odaklandığı sırada sağ tıklatıldığında veya menu key tuşlarına basıldığında.

Ben ilk ben olay nesnesinin .button ve .buttons özelliklerine bakabiliriz düşündüm ama bu değerler keyfi 0 veya 2 vardır gibi görünüyor ve farklı çeşitli tarayıcılarda test ederken herhangi bir kombinasyonu bulunabilir gibi görünüyor sistemleri.

Öğe zaten touch-action: none sahiptir.

Bağlam menüsünün uzun süreli dokunuşların bir sonucunu göstermemesi için bazı çalışma yolları var mı?

It looks like .preventDefault() on the relevant touch events wouldn't be an option.

+0

döndüğünü üzerinde dokunmatik eylemleri açmak ve contextMenu açmaya olup olmadığını belirlemek için 'touchmove' ve' touchend' olayları kullanabilirsiniz düşünüyorum. Örneğin: bir "touchmove" üzerinde uzun basmaların göz ardı edilmesi gereken bir bayrak ayarlayabilirsiniz. o zaman “dokun” seçeneğinde bayrağı kapatabilirsiniz. 'contextmenu' olay işleyicisinde sadece bayrağı kontrol edin. bu mantıklı mı? – Potter

+0

@Potter ümit verici geliyor ama bunu ayrıntılı olarak denemek zorundayım. herhangi bir yarış koşulu olmama durumu, ör. "contextmenu" olayının gerçekten sadece tüm tarayıcılarda ve platformlarda ilgili dokunma olaylarından sonra tetiklenip tetiklenmediği. Sadece fare durumunda bile, bazı sistemlerde, içerik menüsünü tetikleyen farenin sağ tuşunu basarken, diğerlerinin de serbest bırakılması olduğunu fark ettim. – phk

+0

@Potter Ayrıca teorik olarak, dönüştürücüler üzerinde bulunan ve bu yüzden herşeyi karıştıran kullanıcılarla uğraşıyor olabilirim. Fakat sanırım bu, endişelenmeye değer bir durum değil. Tüm 'contextmenu' olaylarını engellemenin belki de çok da kötü olmadığını düşünmeye başlıyorum, ortalama kullanıcı o kadar fazla kullanmıyor ve eğer o zaman sadece yeniden tahmin edebileceğim linkler varsa. Kaybedilen şey, ör. Edge'de bir SVG'ye (hatta dinamik olarak oluşturulmuş olanlara) sağ tıklayabilir ve indirebiliriz ancak benim durumumda (yine de CSS ve ext. refs). – phk

cevap

2

jQuery UI Dokunmatik Punch sadece tüm çözer.

jQuery UI için bir Dokunma Olay Desteği. Temel olarak, sadece dokunmatik olayı jQuery UI'ye geri bağlar. IPad, iPhone, Android ve diğer dokunmatik özellikli mobil cihazlarda test edildi. JQuery UI'yi sıralayabilirim ve çekicilik gibi çalışır.

http://touchpunch.furf.com/

+0

Benim durumumda 'd3' zaten benim için tüm dokunma olayını ele alıyor, bu yüzden başka bir kütüphane istemiyorum. Düşük seviye bir çözüm arıyorum. – phk

+0

Cool o zaman kodunuzu görmeme izin verir –

+0

https://bl.ocks.org/mbostock/3127661b6f13f9316be745e77fdfb084 (tüm tarayıcı/OS kombinasyonlarında) üzerinde çalışacak olsaydı muhtemelen uygulamada da çalışırdı. – phk

İlgili konular