安卓平台的瀏覽器 touchend 事件觸發失效?
點擊應該觸發 touchstart 和 touchend 兩個事件,但是安卓手機中並沒有觸發 touchend,請問如何解決這個問題?
感謝啊,莫名其妙的問題
touch事件在手機瀏覽器上存在莫名的兼容性問題, 會導致touchend事件不觸發!
http://code.google.com/p/android/issues/detail?id=19827
Working with touch eventsOn Android ICS if no preventDefault is called on touchstart or the first touchmove, further touchmove events and the touchend will not be fired.
As a workaround we need to decide in the first touchmove if this is a scroll (so we don』t call preventDefault) and then manually trigger touchend.
如果你沒有太多顧慮(關於scroll的), 請在touchstart的handle中使用event.preventDefault(), 即可讓touchend事件正常觸發
最近幾天開發也碰到了這個問題,項目要模擬一個app的向下拉動載入效果。我的解決辦法是在touchmove中添加e.preventDefault(),將瀏覽器默認的滑動慣性去掉,這樣就不會干擾到touchend事件的觸發,然後再手寫滑動效果,另外需要注意判定是否有滑動產生,避免干擾默認的點擊效果觸發:var x, y, z;
var slideCouter = 1;
var hasMoved = false;
var checking = false;
var hasMore = true;
$(document).on(touchstart, function (e) {
z = $(document).scrollTop();
x = event.targetTouches[0].pageY;
}).on(touchmove, function (e) {
e.preventDefault();
hasMoved = true;
y = event.targetTouches[0].pageY;
z += x - y;
$(document).scrollTop(z);
}).on(touchend, function (e) {
if (x - y &> 200 !checking hasMoved hasMore) {
checking = true;
slideCouter++;
$(.login).removeClass(none);
$.ajax({
url: "&createUrl(/teacher/categoryMore);?&>",
type: "get",
data: {
"keyword": &,
"page": slideCouter
},
cache: false,
success: function (data) {
completecall(data);
}
});
}
hasMoved = false;
});
==============
目前別的方法都會有或多或少的弊端,該方法的弊端就是滑動慣性被取消,自己寫的效果會不那麼流暢,但還算比較好的解決這個兼容問題。
可以考慮同時監聽touchcancel事件。
@jack king 使用touchcancel這個在android4.4中會出現複製文本之類的
複製文本是什麼狀況
我也想知道
我也遇到了這個問題啊,需要顧慮scroll,阻止默認事件這個行不通,使用touchcancel這個在android4.4中會出現複製文本之類的,這個要怎麼解決? @bo bo
我要顧慮scroll,怎麼解決這個問題啊?
推薦閱讀:
※一旦打開就忍不住想狂點滑鼠,9 個有趣的 HTML 5 交互網站
※SegmentFault 技術周刊 Vol.20 - 用 Canvas 畫個星空
※極樂前端周報 ( 第三期 )