Подтвердить что ты не робот

Директива AngularJS для просмотра пользовательского соглашения, обнаружение кнопки включения, не работает на мобильном сафари

У меня есть экран пользовательского соглашения. В основном HTML-просмотр с iframe и кнопкой. Я хочу включить кнопку, когда пользователь прокручивается вниз. Это работает для всех настольных браузеров, IE, Chrome, Safari, но не работает на мобильных сафари или хром на устройствах ios. Кажется, что событие "прокрутки" не привязано должным образом. Вы видите что-то здесь, что сделало бы эту работу?

(function() {
  angular.module('myapp').directive('textAgreement', function($timeout, ActivityLogService) {
    return {
      restrict: 'A',          
      scope: {
        onscrollCallback: '&onscrollCallback',
        onloadCallback: '&onloadCallback'
      },
      compile: function(tElement) {        
        return function(scope, element) {
          /** Called on load **/
          var appliedCheck = function(event) {
            try {
              if (typeof scope.onloadCallback !== undefined) {
                if (typeof scope.onloadCallback == 'function') {                      
                  scope.onloadCallback();  
                  scope.$apply();
                }
              } 
              var elm = element[0].contentWindow.document.body;
              var newwin = element[0].contentWindow;            
              if (elm) {
                $(newwin).scroll(function() {
                  var checkBottom = (elm.scrollTop+600) >= elm.scrollHeight;
                  console.log('###$$$ +++++ ' + elm.scrollTop +  ' ' + elm.scrollHeight);                                   
                  if (checkBottom) {        
                    scope.bottom = true;
                    if (typeof scope.onscrollCallback !== undefined) {
                      if (typeof scope.onscrollCallback == 'function') {                      
                        scope.onscrollCallback();  
                        scope.$apply();
                      }
                    }                  
                  }
                });                
              }
            } catch(e) {
              console.log(e);              
            }
          }; 
          element.bind('load', appliedCheck);                                    
        }; 
      }    
    };
  });   
})();

            <iframe text-agreement onload-callback="disableLoading()" onscroll-callback="enableAgree()" id="agreeFrame" src="{{ ::trustSrcAgreementUri }}" style="border:0" width="100%" height="100%"></iframe>
4b9b3361

Ответ 1

События прокрутки не работают на мобильных устройствах, поскольку они работают на рабочем столе. По сути, событие прокрутки запускается только в конце прокрутки. Смотрите это:

http://andyshora.com/mobile-scroll-event-problems.html

Ответ 2

Как отметил Марк, событие прокрутки является проблемой на мобильных устройствах, особенно на старых устройствах iOS, поскольку они приостанавливают выполнение JS во время прокрутки. Частично он исправлен в IOS 8, частично я подразумеваю, что проблема исправлена ​​в сафари, но не в веб-просмотре (ни в любом другом браузере, работающем на iOS).

Android вызывает его подавленную скорость, так как свиток асинхронизируется в хроме. DOM-манипуляция/перекрашивание еще больше отстает - но она по-прежнему будет работать правильно для вашего дела.

Чтобы решить проблему, которую вы имеете, все, что вы можете сделать, это настроить таймер/интервал (хорошо для < iOS 8 в сафари или в webview/cordova < iOS 9) и проверить свойство scrollTop. Или вам нужно изменить свой дизайн, например. так что пользователю придется прокручивать весь путь вниз, чтобы увидеть кнопку "закрыть".