Bir ve aynı öğeye yapılan tek tıklamalar ile çift tıklamalar arasında nasıl ayrım yapılır?
Bunları karıştırmanız gerekmiyorsa, güvenebilirsiniz click
vedblclick
her gayet iş yapacak.
Bunları karıştırmaya çalışırken bir sorun ortaya çıkıyor: bir dblclick
olay aslında bir click
olayı da tetikleyecektir tek bir tıklama çift tıklama bir "tek başına" tek tıklama veya bir parçası olup olmadığını belirlemek gerekir bu yüzden.
Ek olarak: ikisini birden click
ve dblclick
aynı öğe üzerinde kullanmamalısınız :
İşleyicilerin aynı öğe için hem tıklama hem de dblclick olaylarına bağlanması tavsiye edilmez. Tetiklenen olayların sırası tarayıcıdan tarayıcıya değişir, bazıları dblclick'ten önce iki tıklama olayını alırken diğerleri yalnızca bir tıklama alır. Çift tıklama hassasiyeti (çift tıklama olarak algılanan tıklamalar arasındaki maksimum süre) işletim sistemine ve tarayıcıya göre değişebilir ve genellikle kullanıcı tarafından yapılandırılabilir.
Kaynak: https://api.jquery.com/dblclick/
Şimdi iyi haberlere geçelim:
Olayladetail
ilgili tıklama sayısını tespit etmek için olayın özelliğini kullanabilirsiniz . Bu, içinde çift tıklama yaparclick
tespit oldukça kolay .
Sorun, tek tıklamaları tespit etme ve bunların bir çift tıklamanın parçası olup olmadıklarıdır. Bunun için bir zamanlayıcı kullanmaya geri döndük vesetTimeout
.
Bir veri özelliği kullanarak (global bir değişkenden kaçınmak için) ve tıklamaları saymaya gerek kalmadan hepsini bir araya getirerek şunları elde ederiz:
HTML:
<div class="clickit" style="font-size: 200%; margin: 2em; padding: 0.25em; background: orange;">Double click me</div>
<div id="log" style="background: #efefef;"></div>
JavaScript:
<script>
var clickTimeoutID;
$( document ).ready(function() {
$( '.clickit' ).click( function( event ) {
if ( event.originalEvent.detail === 1 ) {
$( '#log' ).append( '(Event:) Single click event received.<br>' );
/** Is this a true single click or it it a single click that's part of a double click?
* The only way to find out is to wait it for either a specific amount of time or the `dblclick` event.
**/
clickTimeoutID = window.setTimeout(
function() {
$( '#log' ).append( 'USER BEHAVIOR: Single click detected.<br><br>' );
},
500 // how much time users have to perform the second click in a double click -- see accessibility note below.
);
} else if ( event.originalEvent.detail === 2 ) {
$( '#log' ).append( '(Event:) Double click event received.<br>' );
$( '#log' ).append( 'USER BEHAVIOR: Double click detected.<br>' );
window.clearTimeout( clickTimeoutID ); // it's a dblclick, so cancel the single click behavior.
} // triple, quadruple, etc. clicks are ignored.
});
});
</script>
Demo:
JSfiddle
Erişilebilirlik ve çift tıklama hızlarıyla ilgili notlar:
- Wikipedia'nın dediği gibi "Art arda iki tıklamanın çift tıklama olarak yorumlanması için gereken maksimum gecikme standartlaştırılmamıştır."
- Tarayıcıda sistemin çift tıklama hızını tespit etmenin bir yolu yok.
- Varsayılan değerin 500 ms ve Windows'ta 100-900 mm aralığı olduğu görülüyor ( kaynak )
- İşletim sistemi ayarlarında çift tıklama hızını en yavaşına ayarlayan engelli insanları düşünün.
- Sistem çift tıklama hızı yukarıdaki varsayılan 500 ms'den daha yavaşsa, hem tek hem de çift tıklama davranışları tetiklenecektir.
- Bir ve aynı öğeye birleşik tek ve çift tıklamaya güvenmeyin.
- Veya: değeri artırma yeteneğine sahip olmak için seçeneklere bir ayar ekleyin.
Tatmin edici bir çözüm bulmak biraz zaman aldı, umarım bu yardımcı olur!