2011-09-20 18 views
7

ile iPhone uygulaması Aşağıdaki sağ tarafımda js'imin üstünde (iScroll eklentisinin çalışması için gerekli olan) var. Bazı sayfalardaTouchmove etkinlik listesi yeniden etkinleştiriliyor. Telefon açığı

document.addEventListener('touchmove', function (e) {e.preventDefault();}, false); 

, bu yüzden, normal iPhone kaydırma üstlenir yeniden etkinleştirmek için (ve iscroll sayfada kullanıldığında iphone klavye bir giriş kutusunu açılan vermez nereye hataları düzeltmek için) gerekir.

Sözdizimini çalıştıramıyorum. Kimse nasıl biliyor mu?

+0

Dokunmatik ekranın herhangi bir şey yapmasını engellemek, Android'deki Phonegap uygulamasında tüm kaydırma işlemlerini durdurdu! Bu satırı çıkardığımda, test için her şey iyi çalıştı ... iScroll elemanları dahil. Yani bu hatta ihtiyacım var mı acaba? –

cevap

12

Sen şöyle preventDefault davranışı işleyen bir işlevi tanımlamak gerekir: Eğer olay dinleyicisi kaldırıp kaydırma varsayılan yeniden etkinleştirebilirsiniz,

document.addEventListener('touchmove', preventDefault, false); 
function preventDefault(e) { e.preventDefault(); }; 

Bu şekilde daha sonra kodunuzda:

Artık ihtiyacınız olduğunda yeniden ekleyip kaldırabiliyorsunuz.

Sen anonim işlevine bakın tek yolu olduğu için öncelikle o ateşleyelim ve sonra başvurusunu kaldırmak için orijinal sonrası gibi bir satır içi, anonim işlev kullanarak bu başaramayız örn:

document.addEventListener('touchmove', function(e) { 
    e.preventDefault(); 

    // some more logic... 

    this.removeEventListener('touchmove', arguments.callee, false); 
}, false); 

Açıkçası, sahip olmak istediğiniz etki bu değil. Ayrıca, bir nesneyi oluşturabilir ve olayı işleyen bir yönteme başvuruda bulunabilirsiniz. Biraz daha derine dalmak istiyorsanız, bu ipucunu yararlı buldum: How to removeEventListener on anonymous function?

+0

Bu bir rüya gibi çalıştı! Teşekkür ederim, çok çok :) – Billie

+0

Teşekkürler, tam da ihtiyacım olan şey! – hidace

0

iphone'umdaki addEventLister öğesinden sonra, artık onları kaldıramıyorum. ama bu benim için çalışıyor.

var prevent = preventDefault(e) { e.preventDefault(); }; 
//To disable drag 
element.ontouchmove = prevent; 

... 

//To enable it agian 
element.ontouchmove = null; 
İlgili konular