2015-09-27 2 views
10

У меня есть следующие классы css, которые я использую для перемещения моего ng-view влево и вправо при начале изменения маршрута. Все они хорошо работают на большинстве браузеров, телефонов и т. Д. До сих пор ... Под ios 9 анимация не совсем работает, она больше не скользит слева направо, но вид растет от небольшого размера до полного размера, эффект довольно неприятный. Любая помощь приветствуется!angularjs слайд-переход сломан на сафари ios 9

CSS

.slide-left.ng-enter, .slide-left.ng-leave, .slide-right.ng-enter, .slide-right.ng-leave { position: absolute; top: 58px; right: 0; bottom: 0; left: 0; background: inherit; -ms-transition: 0.35s ease-in-out; -webkit-transition: 0.35s ease-in-out; -moz-transition: 0.35s ease-in-out; -o-transition: 0.35s ease-in-out; transition: 0.35s ease-in-out; } .slide-left.ng-enter { z-index: 101; -webkit-transform: translateX(100%); -ms-transform: translateX(100%); -moz-transform: translateX(100%); -o-transform: translateX(100%); transform: translateX(100%); } .slide-left.ng-enter.ng-enter-active { -webkit-transform: translateX(0); -moz-transform: translateX(0); -o-transform: translateX(0); -ms-transform: translateX(0); transform: translateX(0); } .slide-left.ng-leave { z-index: 100; -webkit-transform: translateX(0); -moz-transform: translateX(0); -o-transform: translateX(0); -ms-transform: translateX(0); transform: translateX(0); } .slide-left.ng-leave.ng-leave-active { -webkit-transform: translateX(-100%); -moz-transform: translateX(-100%); -o-transform: translateX(-100%); -ms-transform: translateX(-100%); transform: translateX(-100%); } .slide-right.ng-enter { z-index: 100; -webkit-transform: translateX(-100%); -moz-transform: translateX(-100%); -o-transform: translateX(-100%); -ms-transform: translateX(-100%); transform: translateX(-100%); } .slide-right.ng-enter.ng-enter-active { -webkit-transform: translateX(0); -moz-transform: translateX(0); -o-transform: translateX(0); -ms-transform: translateX(0); transform: translateX(0); } .slide-right.ng-leave { z-index: 101; -webkit-transform: translateX(0); -moz-transform: translateX(0); -o-transform: translateX(0); -ms-transform: translateX(0); transform: translateX(0); } .slide-right.ng-leave.ng-leave-active { -webkit-transform: translateX(100%); -moz-transform: translateX(100%); -o-transform: translateX(100%); -ms-transform: translateX(100%); transform: translateX(100%); }

JS

$rootScope.$on('$routeChangeStart', function() { //event button to move backward $rootScope.back = function() { $rootScope.slideClass = 'slide-right'; }; //event button item list to move forward $rootScope.next = function() { $rootScope.slideClass = 'slide-left'; }; $rootScope.stay = function() { $rootScope.slideClass = 'slide-none'; }; });

MARKUP

<div data-ng-class="slideClass" autoscroll="true" data-ng-view></div>


UPDATE


Я прибыл на частичный ответ от подобного вопроса и последующего ответа разместил Диего ios 9 mobile safari has a blinking bug with transform scale3d and translate3d

я попробовал подобное решение, как один, публикуемые на этом вопросе. то есть. использование переполнения: скрыто на родительском элементе, который, похоже, решил проблему анимации. Я тестирую симулятор, и все, кажется, проверяется. Тем не менее, это ломает ряд других вещей, а именно прокрутку ....

Quoting Diego «Кажется, это ошибка с композицией вложенного слоя и размером окна просмотра. Добавление переполнения: скрытый в родительском слое, кажется, решает проблема. С точки зрения производительности все, кажется, ведет себя одинаково (идентичные макеты, краски, слои композиции) »

Это происходит в правильном направлении, но еще не является правильным ответом.

ответ

11

Существует нить об этом here

TLDR: Вы должны установить значения масштаба META VIEWPORT к 1,0001

<meta name="viewport" content="initial-scale=1.0001, minimum-scale=1.0001, maximum-scale=1.0001, user-scalable=no"/> 

Еще лучше, если вы нацелены только на устройства IOS:

if(/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream){ 
    document.querySelector('meta[name=viewport]').setAttribute(
    'content', 
    'initial-scale=1.0001, minimum-scale=1.0001, maximum-scale=1.0001, user-scalable=no' 
); 
} 
0

Я обнаружил, что translateX глючит в прошивке 9 по какой-то причине ... Когда я изменил свои прообразы от translateX(<whatever>) к translate3d(<whatever>, 0, 0) вещей начали становиться вменяемыми снова.

Попробуйте.

+0

Я использовал translateX. Я перешел на translate3d. Тот же результат в iOS 9. – nuttzman

+0

Я думал, что ты прибил его, я попробовал, но не повезло. translate3d по-прежнему ведет себя так же, как translateX –

+0

О, ну ... стоит выстрел :) – giladgo

Смежные вопросы