iPad safari: отключить прокрутку и эффект отскока?
Я работаю над браузером на основе приложения, в настоящее время я разрабатываю и стиль для браузера iPad safari.
Я ищу две вещи на ipad: Как я могу отключить вертикальную прокрутку для страниц, которые этого не требуют? & как отключить эффект упругого отскока?
12 ответов
2011 ответ: для веб - / html-приложения, работающего внутри iOS Safari, вы хотите что-то вроде
document.ontouchmove = function(event){
event.preventDefault();
}
для iOS 5 Вы можете принять во внимание следующее:документ.ontouchmove и прокрутка на iOS 5
Обновление Сентябрь 2014:
Более тщательный подход можно найти здесь:https://github.com/luster-io/prevent-overscroll. Для этого и много полезных советов webapp см http://www.luster.io/blog/9-29-14-mobile-web-checklist.html
обновление марта 2016: эта последняя ссылка больше не активна-см. https://web.archive.org/web/20151103001838/http://www.luster.io/blog/9-29-14-mobile-web-checklist.html вместо этого для архивированной версии. Спасибо @falsarella за указание на это.
чтобы предотвратить прокрутку в современных мобильных браузерах, вам нужно добавить passive: false. Я вытаскивал волосы, чтобы это сработало, пока не нашел это решение. Я нашел только в одном месте в интернете.
function preventDefault(e){
e.preventDefault();
}
function disableScroll(){
document.body.addEventListener('touchmove', preventDefault, { passive: false });
}
function enableScroll(){
document.body.removeEventListener('touchmove', preventDefault, { passive: false });
}
вы можете использовать этот фрагмент кода jQuery для этого:
$(document).bind(
'touchmove',
function(e) {
e.preventDefault();
}
);
это заблокирует вертикальную прокрутку, а также любой эффект отскока, возникающий на ваших страницах.
Я знаю, что это немного не так, но я использовал Swiffy для преобразования Flash в интерактивную игру HTML5 и столкнулся с той же проблемой прокрутки, но не нашел решений, которые работали.
Если я попытался добавить то же самое событие в контейнер Swiffy, он был заменен, как только этап нагруженный.
в конце концов я решил его (довольно беспорядочно), применив событие touchmove к каждому DIV на сцене. Поскольку эти divs также постоянно менялись, мне нужно было продолжать их проверять.
Это было мое решение, которое, кажется, работает хорошо. Я надеюсь, что это полезно для всех, кто пытается найти то же решение, что и я.
var divInterval = setInterval(updateDivs,50);
function updateDivs(){
$("#swiffycontainer > div").bind(
'touchmove',
function(e) {
e.preventDefault();
}
);}
overflow: scroll;
-webkit-overflow-scrolling: touch;
на контейнере вы можете установить эффект отскока внутри элемента
источник: http://www.kylejlarson.com/blog/2011/fixed-elements-and-scrolling-divs-in-ios-5/
попробуйте этот JS sollutuion:
var xStart, yStart = 0;
document.addEventListener('touchstart', function(e) {
xStart = e.touches[0].screenX;
yStart = e.touches[0].screenY;
});
document.addEventListener('touchmove', function(e) {
var xMovement = Math.abs(e.touches[0].screenX - xStart);
var yMovement = Math.abs(e.touches[0].screenY - yStart);
if((yMovement * 3) > xMovement) {
e.preventDefault();
}
});
предотвращает прокрутку Safari по умолчанию и жесты отскока без отсоединения прослушивателей событий touch.
ни одно из решений не работает для меня. Вот как я это делаю.
html,body {
position: fixed;
overflow: hidden;
}
.the_element_that_you_want_to_have_scrolling{
-webkit-overflow-scrolling: touch;
}
протестировано в iphone. Просто используйте этот css в контейнере целевого элемента, и он изменит поведение прокрутки, которое останавливается, когда палец покидает экран.
-webkit-overflow-scrolling: auto
https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-overflow-scrolling
для тех, кто использует MyScript веб-приложение и борется с прокруткой/перетаскиванием тела (на iPad и планшетах) вместо того, чтобы писать:
<body touch-action="none" unresolved>
это исправило это для меня.
вы можете использовать JS для предотвращения прокрутки:
let body = document.body;
let hideScroll = function(e) {
e.preventDefault();
};
function toggleScroll (bool) {
if (bool === true) {
body.addEventListener("touchmove", hideScroll);
} else {
body.removeEventListener("touchmove", hideScroll);
}
}
и чем просто запуск/остановка toggleScroll
func, когда вы opnen / закрыть модальный.
такой toggleScroll(true) / toggleScroll(false)
(Это только для iOS, на Android не работает)
подобно сердитому киви, я заставил его работать, используя высоту, а не положение:
html,body {
height: 100%;
overflow: hidden;
}
.the_element_that_you_want_to_have_scrolling{
-webkit-overflow-scrolling: touch;
}