Tôi đang gặp sự cố với kết hợp các biến đổi CSS và thử nghiệm lần truy cập sự kiện chạm. Điều này chỉ sao chép cho tôi trong Chrome trên Android 4 (ổn định và beta). iOS Safari, cũng như máy tính để bàn Chrome với mô phỏng cảm ứng cả hai dường như hoạt động tốt.Android 4 Sự cố kiểm tra lượt truy cập Chrome trên sự kiện chạm sau khi chuyển đổi CSS
Tôi gần như tích cực điều này phải là một lỗi, vì vậy tôi nghĩ rằng tôi chủ yếu là tìm cách giải quyết ở đây.
Vấn đề là thử nghiệm lần truy cập cho chạm chỉ có vẻ hoạt động đối với vị trí mà phần tử trước khi biến đổi, chứ không phải vị trí cuối cùng. Bạn có thể thấy một ví dụ về jsfiddle của tôi (chỉ trên Android 4 Chrome):
jsfiddle: http://jsfiddle.net/LfaQq/ toàn màn hình: http://jsfiddle.net/LfaQq/embedded/result/
Nếu bạn kéo hộp màu xanh nửa đường xuống màn hình và thả nó sẽ chụp lại đỉnh. Bây giờ, nếu bạn thử kéo từ nửa trên của trang một lần nữa, không có liên lạc nào sẽ đăng ký. Các sự kiện cảm ứng thậm chí không được bắn vào phần tử. Tuy nhiên, nếu bạn cố gắng chạm vào phần dưới của phần tử, nó hoạt động tốt. Sau đó, bạn có thể thử di chuyển nó lên từ dưới cùng và quan sát rằng thử nghiệm lần truy cập không còn hoạt động ở phía dưới nữa, nhưng hoạt động ở trên cùng.
Đây là cách tôi xử lý các sự kiện:
function handleTouch(e) {
console.log("handle touch")
e.preventDefault();
switch(e.type){
case 'touchstart':
console.log("touchstart");
touchOriginY = e.targetTouches[0].screenY;
break;
case 'touchmove':
console.log("touchmove");
el.innerHTML = e.targetTouches[0].screenY;
var p = e.targetTouches[0].screenY - touchOriginY;
el.style[TRANSFORM] = 'translate3d(0,' + p + 'px' + ',0)';
break;
case 'touchcancel':
console.log("touchcancel");
// Fall through to touchend
case 'touchend':
//console.log("touchend");
//el.style[TRANSITION] = '.4s ease-out';
el.style[TRANSFORM] = 'translate3d(0,0,0)';
break;
}
}
el.addEventListener('touchstart', handleTouch);
el.addEventListener('touchend', handleTouch);
el.addEventListener('touchmove', handleTouch);
el.addEventListener(TRANSITION_END, function(e) {
console.log("transition end")
el.style[TRANSITION] = '';
});
tôi không có bất kỳ vấn đề với các biến đổi trong touchmove, như những người không phải chạm mới được phát hiện anyways.
Mọi đề xuất?
Tôi nghĩ rằng tôi đã phần nào bỏ chặn bản thân mình về điều này trong thời gian này. Việc xóa bản cập nhật bên trongHTML khỏi touchmove sẽ dừng mức độ mục tiêu của lần truy cập bị lỗi. Tôi hy vọng điều này không trở lại để cắn tôi khi tôi hợp pháp cần phải cập nhật nội dung bên trong phần tử sau này. –