IOS ошибка фликкера при переполнении css: прокрутка изменяется на переполнение: скрыто
Я создаю приложение через телефонную связку, и я хочу отключить прокрутку div в фоновом режиме, когда я прокручиваю меню вверху внизу экрана;
Изменяя переполнение от прокрутки до скрытого, почему это активное меню активно, но оно вызывает мерцание экрана.
Кто-нибудь знает какие-нибудь хаки, чтобы остановить мерцание div при изменении свойства переполнения?
Ответы
Ответ 1
Ошибка фликкера связана с памятью графического процессора смартфона. Память ограничена (VRAM), и если элементы слишком сложны или больше, чем память, она будет исчерпана. В андроиде с CyanogenMod rom вы можете просматривать обработку gpu с помощью цветов на экране. От зеленого (низкого использования) до красного (более высокое использование gpu). Демо-изображение. Но я не знаю, существует ли аналогичный инструмент для IOS.
Это видно во всех переходах приложения или при использовании графического процессора.
В любом случае вы можете попробовать удалить/уменьшить сложность своих элементов, или это от здесь:
Вариант 1
<meta name="viewport" content="width=device-width, user-scalable=no" />
Вариант 2 this:
.ui-page {
-webkit-backface-visibility: hidden;
}
Вариант 3 this:
.ui-mobile, .ui-mobile .ui-page, .ui-mobile [data-role="page"],
.ui-mobile [data-role="dialog"], .ui-page, .ui-mobile .ui-page-active {
overflow: hidden;
-webkit-backface-visibility: hidden;
}
.ui-header {
position:fixed;
z-index:10;
top:0;
width:100%;
padding: 13px 0;
height: 15px;
}
.ui-content {
padding-top: 57px;
padding-bottom: 54px;
overflow: auto;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
.ui-footer {
position:fixed;
z-index:10;
bottom:0;
width:100%;
}
Или просто удалите переходы (если проблема в переходе):
Вариант 4
'-webkit-transition': 'none !important',
'-moz-transition': 'none !important',
'-o-transition': 'none !important',
'-ms-transition': 'none !important',
'transition': 'none !important'
Ответ 2
Изменение значения переполнения, по-видимому, приводит к изменению значения переменной -webkit-overflow-scrolling от касания до авто, что вызывает мерцание.
Вы можете найти некоторую информацию в этой статье: http://slytrunk.tumblr.com/post/33861403641/ios6-web-app-flickering-with. Проблема остается в iOS7, но только для того, что я видел, когда вы переключаетесь с сенсорного на автоматический (не больше от автоматического до касания).
Ничего из -webkit-backface-visibility: hidden, -webkit-transform: translate3d (0,0,0) и т.д. работало в моем случае.
Как было предложено в предыдущей статье, одним из способов решения проблемы может быть использование -webkit-overflow-scrolling: auto, за счет приятного пользовательского опыта, который он предоставляет.
Другим было бы заблокировать прокрутку с помощью javascript, если ваш сайт может себе это позволить:
function disableScroll () {
$(element).on('touchmove', function(event){
event.preventDefault();
});
},
function enableScroll () {
$(element).off('touchmove');
}
Ответ 3
Решение с использованием -webkit-backface-visibility: hidden;
, которое работает, похоже, вызывает проблемы с производительностью, если на странице имеется несколько скроллеров. Safari на более старых ipads поражал пределы ЦП и сбой браузера.
Я нашел решение, которое работает для моего SPA (которое может содержать до 100 слайдеров в списке), добавляя и удаляя класс с нарушающим стилем на странице show и скрывая события.
.touchslide {
-webkit-overflow-scrolling:touch;
}
(Используя псевдокод стиля jQuery), когда вы покидаете страницу, удалите класс
selector.removeClass("touchslide");
Затем при загрузке страницы:
selector.addClass("touchslide");
selector.scrollLeft(0);
Вам нужно запустить событие прокрутки на iOS, поэтому нацеливайте объект html и добавьте в scrollLeft, поскольку первый свиток не будет иметь эффект инерции.