2010-05-07 29 views
11

Şu anda bir web uygulaması geliştiriyorum ve küçük bir problemle karşılaştım. Ben ExtJS kullanıyorum, ama bu genel bir JS sorusu olduğuna inanıyorum.Onmouseout olayını tetikleme

İmleç bir HTML öğesine girdiğinde, imleç bu öğeyi terk ettiğinde onmouseover olayı tetiklenir, onmouseout tetiklenir. Çok uzak çok iyi. Maalesef, bu davranışa tam olarak güvenilemez. Çok hızlı fare hareketleri olayı tetiklemez (örneğin imleci bir kalem tabletiyle yeniden konumlandırmak gibi).

Bu sorunların üstesinden gelmek için en iyi yöntemler nelerdir? Tüm onmousemove olaylarını izlemeli ve imlecin son nerede olduğunu elle takip etmeli ve uygun onmouseout etkinliğini kendim mi tutmalıyım?

cevap

3

Bu yaygın bir sorundur ve çözümü için önemsiz değil. Tek tek eleman seviyesinde mouseover/out işlemeye çalışarak çözmek temelde imkansızdır. Ext JS'yi kullanarak, genellikle fare olaylarının izlenmesinde yardımcı olabilecek delegeli olay işlemlerinin kullanılması önerilir. Örneğin, mümkünse/en yüksek düzeyde mouseover/out için izleyin ve herhangi bir etkinlik sırasında hangi unsurların dahil olduğunu belirlemek için olay hedefini ve/veya ilgili hedefi (işlem nesnesine aktarılan olay nesnesinin özelliklerini) kontrol edin (Bu kendimi - zor alabilirsiniz, ama etkilidir). Kullanım durumunuz geçerli sürükle/bırak senaryolarını izliyorsa, DragZone ve DropZone sınıfları bunu yapmak için tasarlanmıştır.

Neyi başarmaya çalıştığınızla ilgili daha fazla ayrıntıyı doldurabilirseniz yardımcı olabilir.

+0

karışıklığım için özür dilerim Ext.dd.DropZone.notifyOver üzerine yazarak çözdüm ve eğer kaçırıldıysa mouseout olaylarını el ile yakarak çözdüm. Şimdiye kadar oldukça güvenilir çalışıyor. – n3rd

3

Daha önce benzer bir sorun yaşadım ve this technique kullandım. Bu, imleci bir kalem tabletiyle yeniden konumlandırırken durumlarla ilgili yardımcı olmayabilir, başka bir tane de kontrol edemiyorum, ancak normal web kullanıcılarını hedefliyorsanız, bunun anormal bir olay olduğunu varsayabilirsiniz. Eğer işe yararsa bana bildirin - eğer olmasa bile, daha fazla yardım edip edemeyeceğimi göreceğim.

Martyn

+0

Hm, ilginç bir yazı. Bununla birlikte bunun sorununla nasıl bağlantılı olduğunu anlamıyorum. Sonuçta, çok fazla değil "çok az" olayları alıyorum. – n3rd

+1

Ah evet - bu konuda üzgünüm, bu sabah kahve içmeden önce bu soruyu yanıtladı. Kendi yuvarlanmadan olayların patlayacağını garantilemek için mutlak bir yol yoktur. Konerak'ın da belirttiği gibi, sayfaya bir dinleyici ekleyin ve ateşlendiği öğeyi kontrol edin. Mevcut öğeyi onmouseover yönteminde pop ve onmouseout içinde pop, ben bir yere yanlış gitmiş olup olmadığını görmek için bir mantık yazmanız gerekir. Zarif değil ama çalışmalı. Yine, – Martyn

İlgili konular