Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用户协议视图的AngularJS指令“检测启用按钮”在mobile safari上不起作用_Javascript_Jquery_Ios_Angularjs_Scroll - Fatal编程技术网

Javascript 用户协议视图的AngularJS指令“检测启用按钮”在mobile safari上不起作用

Javascript 用户协议视图的AngularJS指令“检测启用按钮”在mobile safari上不起作用,javascript,jquery,ios,angularjs,scroll,Javascript,Jquery,Ios,Angularjs,Scroll,我有一个用户协议屏幕。基本上是一个带有iframe和按钮的HTML视图。我想在用户滚动到底部时启用该按钮。这适用于所有桌面浏览器,即Chrome、Safari,但不适用于移动Safari或ios设备上的Chrome。“滚动”事件似乎没有正确连接。你看到有什么东西能让它起作用吗 (function() { angular.module('myapp').directive('textAgreement', function($timeout, ActivityLogService) {

我有一个用户协议屏幕。基本上是一个带有iframe和按钮的HTML视图。我想在用户滚动到底部时启用该按钮。这适用于所有桌面浏览器,即Chrome、Safari,但不适用于移动Safari或ios设备上的Chrome。“滚动”事件似乎没有正确连接。你看到有什么东西能让它起作用吗

(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>
(函数(){
angular.module('myapp')。指令('textAgreement',函数($timeout,ActivityLogService){
返回{
限制:“A”,
范围:{
onscrollCallback:“&onscrollCallback”,
onloadCallback:“&onloadCallback”
},
编译:函数(远程通讯){
返回函数(范围、元素){
/**满载**/
var appliedCheck=函数(事件){
试一试{
if(type of scope.onloadCallback!==未定义){
if(typeof scope.onloadCallback=='function'){
onloadCallback();
作用域:$apply();
}
} 
var elm=element[0].contentWindow.document.body;
var newwin=元素[0]。内容窗口;
如果(榆树){
$(newwin).滚动(函数(){
var checkBottom=(elm.scrollTop+600)>=elm.scrollHeight;
console.log('###$$$++'+elm.scrollTop++'+elm.scrollHeight);
如果(勾选底部){
scope.bottom=true;
if(type of scope.onscrollCallback!==未定义){
if(typeof scope.onscrollCallback=='function'){
onscrollCallback();
作用域:$apply();
}
}                  
}
});                
}
}捕获(e){
控制台日志(e);
}
}; 
元素绑定('load',appliedCheck);
}; 
}    
};
});   
})();

滚动事件在移动设备上不起作用,因为它们在桌面上起作用。本质上,滚动事件仅在滚动结束时触发。见此:


正如Mark所说,滚动事件在移动设备上是一个问题,尤其是在较旧的iOS设备上,因为它们在滚动期间暂停JS执行。它在IOS 8中得到了部分修复,我的意思是,这个问题在safari中得到了部分修复,但在webview(或者在IOS上运行的任何其他浏览器)中都没有得到修复

Android以抑制的速率调用它,因为scroll在chrome中是异步的。DOM操作/重新绘制的滞后性甚至更大,但它仍然可以正确地用于您的情况


要解决您遇到的问题,您所能做的就是设置计时器/间隔(为了解决这个问题,您可以尝试使用“touchmove”事件,而不是滚动。