事件,這將是一個艱難的。我想我已經用盡了所有的選擇,讓我們看看你是否可以提出更好的方案。控制對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
使用查看源代碼,看整個代碼
,你可以做一個jsbin或擺弄? – shaun5 2012-04-03 12:46:07
我會,當我有時間 – 2012-04-03 13:13:20
@ shaun5你可以使用我發佈的鏈接來試用。謝謝 – 2012-04-03 15:13:14