Исходя из того, что я понимаю по вашему вопросу, вы попытались объединить код, представленный выше, с фрагментом кода, предоставленным Россом Баучером на Posterous . Попытка объединить эти два фрагмента подряд не будет работать, потому что при отключении touchmove
вы также отключили прокладку, которая позволяет mousemove
работать через его образец.
Этот вопрос и ответы на него обрисовывают в общих чертах реальное решение вашей проблемы. Вы должны попробовать эти два фрагмента, чтобы увидеть, решают ли они вашу проблему:
Этот фрагмент, , который отключает старое поведение прокрутки:
elementYouWantToScroll.ontouchmove = function(e) {
e.stopPropagation();
};
Или этот, из тот же :
document.ontouchmove = function(e) {
var target = e.currentTarget;
while(target) {
if(checkIfElementShouldScroll(target))
return;
target = target.parentNode;
}
e.preventDefault();
};
Затем введите код на Posterous :
function touchHandler(event)
{
var touches = event.changedTouches,
first = touches[0],
type = "";
switch(event.type)
{
case "touchstart": type = "mousedown"; break;
case "touchmove": type="mousemove"; break;
case "touchend": type="mouseup"; break;
default: return;
}
//initMouseEvent(type, canBubble, cancelable, view, clickCount,
// screenX, screenY, clientX, clientY, ctrlKey,
// altKey, shiftKey, metaKey, button, relatedTarget);
var simulatedEvent = document.createEvent("MouseEvent");
simulatedEvent.initMouseEvent(type, true, true, window, 1,
first.screenX, first.screenY,
first.clientX, first.clientY, false,
false, false, false, 0/*left*/, null);
first.target.dispatchEvent(simulatedEvent);
event.preventDefault();
}
И это должно сделать это для вас. Если это не так, что-то еще не работает с Mobile Safari.