2012-05-08 8 views
0

iBooksのdivにpreventDefaultを適用して、ページめくりのためのタッチ/ドラッグイベントが1つもない領域を作成しようとしています。これまでのところ、私はタッチイベントを防ぐことを試みただけですが、動作していません。私はここに私の実装では完全に間違っている可能性があります:これはありがたく受け取ったことになるタッチイベントを防止していない理由としてibooksのevent.preventDefault():誰もこれが動作しない理由を説明できますか?

var area = document.getElementById('area'); 
function touchStart(event) { 
    event.preventDefault(); 
} 
function touchMove(event) { 
    event.preventDefault(); 
} 
function touchEnd(event) { 
    event.preventDefault(); 
} 
function touchCancel(event) { 
    event.preventDefault(); 
} 

area.addEventListener("touchstart", touchStart, false); 
area.addEventListener("touchmove", touchMove, false); 
area.addEventListener("touchend", touchEnd, false); 
area.addEventListener("touchcancel", touchCancel, false); 

任意のヒント。

+0

これらのタッチイベントの仕組みを正しく理解していない可能性があります。 – chrxr

+0

私はiBooksに精通していませんが、私の推測では、これらのアクションは実際にはデフォルトのアクションではなく、他のイベントハンドラによって処理されるということです。伝播を停止した場合( 'event.stopPropagation();')、問題が解決する可能性があります。 – lonesomeday

答えて

-2

もうすぐです。イベントを関数に渡すには、実際には無名関数を使用する必要があります。

私は、複数の関数を作成するのではなく、匿名関数で1行だけを呼び出すことも心配する必要はないと思います。

var area = document.getElementById('area'); 

area.addEventListener("touchstart", function(event) {event.preventDefault()}, false); 
area.addEventListener("touchmove", function(event) {event.preventDefault()}, false); 
area.addEventListener("touchend", function(event) {event.preventDefault()}, false); 
area.addEventListener("touchcancel", function(event) {event.preventDefault()}, false); 

それでもイベントリスナーが、それは次のようになり、あなたの関数を呼び出すことのルートを移動したい場合:

var area = document.getElementById('area'); 

function myTouchStart(myEvent) { 
    myEvent.preventDefault(); 
} 

area.addEventListener("touchstart", function(event) {myTouchStart(event)}, false); 

アイデアは、イベントリスナーがあなた無名関数を有していることですあなたの関数を呼び出すよりも。匿名関数を使用すると、イベントオブジェクトを宣言して、匿名関数に渡すことができます。

+0

これは間違っています。 'function(e){x(e);}'は 'x'と全く同じです。 OPの...関数は完全に呼び出されるはずです。そのため、タッチからデフォルトのiBooksアクションを抑制する方法が残っています。 –

2

私は同じ問題を抱えていました。なぜaddEventListenerが私のために働かなかったのか分かりませんが、bindでした。

var events = 'click touchmove touchstart touchend touchcancel'; 
$('#area').bind(events, function(e) { 
    e.preventDefault(); 
} 
関連する問題