2012-04-02 56 views
1

事件,這將是一個艱難的。我想我已經用盡了所有的選擇,讓我們看看你是否可以提出更好的方案。控制對Apple Ipad的Safari

我有一個水平旋轉木馬,我正在使用touchstart,touchmove,touchend來控制它。對於這個例子來說,HTML結構是一樣的東西:

<div> 
    <ul id="strip"> 
    <li><a>...</a></li> 
    <li><a>...</a></li> 
    ................... 
    </ul> 
</div> 

我已經分居我的事件處理器從鼠標不同的表現有點觸摸事件,因此,只想着淡淡的,我有:

var strip = document.getElementById('strip'); 
strip.addEventListener('touchstart', touchStartHandler); 
document.addEventListener('touchmove', touchMoveHandler); 
document.addEventListener('touchend', touchEndHandler); 

即使用戶將他的手指放在我的帶外,我也希望水平滾動功能正常工作,所以我將touchmove和touchend事件附加到文檔中。

起初,我認爲這將是自然的,而用戶在滾動我旋轉木馬,瀏覽器留在原地,所以我touchMoveHandler看起來是這樣的:

function touchMoveHandler(evt){ 
    evt.preventDefault(); 
    ................... 
} 

......這樣一來,當用戶的手指位置在Y軸上變化時,瀏覽器不會垂直平移。我們可用性的人,否則認爲,我現在實際上同意他。他希望瀏覽器能夠正常響應,除非手指的移動完全或接近完美水平。 無論如何,這可能是太多的信息,所以我現在要詳細說明我的實際問題。這是我的工作作爲一個概念證明原型的一個片段:

var stopY, lastTime, newTime; 

var touchStartHandler(evt){ 
    ... 
    stopY = true; 
    lastTime = new Date(); 
    ... 
}; 
var touchMoveHandler(evt){ 
    ... 
    //this following code works like a setInterval, it turns stopY on and off every 1/2 sec 
    //for some reason, setInterval doesn't play well inside a touchmove event 
    newTime = new Date(); 
    if(newTime - lastTime >= 500){ 
     stopY = !stopY; 
     lastTime = newTime; 
    } 
    ... 
    if(stopY){ 
     evt.preventDefault(); 
    } 
    ... 
} 

我絕對相信這個代碼是純淨的,我用控制檯日誌調試它,一切都做它應該做的,除了用於瀏覽器通過stopY變量的平移。 如果我運行stopY = true開始的代碼,那麼沒有瀏覽器平移,如果我以stopY = false開頭,瀏覽器按預期平移。問題是,我希望這種行爲每半秒變化一次,但事實並非如此。

我希望我沒有爲你複雜這太多,但這是非常具體的。

感謝您的時間和您的幫助

更新:

,你可以嘗試以下鏈接(在iPad或iPhone):
http://andrepadez.com/ipadtouch
http://andrepadez.com/ipadtouch?stopy=false

使用查看源代碼,看整個代碼

+0

,你可以做一個jsbin或擺弄? – shaun5 2012-04-03 12:46:07

+0

我會,當我有時間 – 2012-04-03 13:13:20

+0

@ shaun5你可以使用我發佈的鏈接來試用。謝謝 – 2012-04-03 15:13:14

回答

1

你可以試試stopY = !stopY;

UPDATE

一旦執行preventDefault(),滾動將無法返回,直到touchend閃光,或者啓用它。以下可能給你你正在尋找的行爲:

if(stopY){ return false; } 
else { return true; } 

或爲簡單起見只是return !stopY; ...

+0

對不起,我要編輯它,我從我的代碼複製/粘貼,並在那裏我正在對象範圍 – 2012-04-02 18:03:53

+0

@AndréAlçadaPadez,我已經更新了我的答案。您可能需要將計時器調高到2000以檢查iPad的行爲。希望這能解決你的問題! – shaun5 2012-04-04 01:56:44