2011-09-20 61 views
7

我有以下權利在我的js(這是iScroll插件的工作需要)的頂部。重新啓用touchmove eventlistener。 iPhone應用程序與手機差距

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

在某些頁面上,我需要重新啓用該這麼普通iPhone滾動接管(和修正錯誤,其中當iscroll是在頁面上使用的iPhone鍵盤不上一個輸入框彈出)。

我不能鍛鍊語法。有人知道如何?

+0

防止touchmove做任何事情都停止Android上的Phonegap應用程序中的所有滾動!當我刪除該行時,爲了測試,一切正常......包括iScroll元素。所以我想知道我是否需要這條線? –

回答

12

您需要定義處理的preventDefault行爲的功能,例如:在你的代碼

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

這樣一來以後,你可以刪除事件偵聽器,並重新啓用默認滾動:

document.removeEventListener('touchmove', preventDefault, false); 

現在您可以在需要時重新添加和刪除它。

使用內聯,匿名函數像你原來的職位,因爲你可以參考一個匿名函數的唯一辦法是先讓它火,然後刪除它的參考,你不能做到這一點。例如:

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

    // some more logic... 

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

顯然這不是你想要的效果。您也可以創建一個對象並存儲對處理該事件的方法的引用。如果你想深入一點,我發現這個線程很有幫助:How to removeEventListener on anonymous function?

+0

這工作就像一個夢!謝謝,非常感謝:) – Billie

+0

謝謝,正是我需要的! – hidace

0

addEventLister在我的iphone後,我不能再刪除它們。 但這對我有用。

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

... 

//To enable it agian 
element.ontouchmove = null; 
相關問題