Javascript 用户协议视图的AngularJS指令“检测启用按钮”在mobile safari上不起作用
我有一个用户协议屏幕。基本上是一个带有iframe和按钮的HTML视图。我想在用户滚动到底部时启用该按钮。这适用于所有桌面浏览器,即Chrome、Safari,但不适用于移动Safari或ios设备上的Chrome。“滚动”事件似乎没有正确连接。你看到有什么东西能让它起作用吗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) {
(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”事件,而不是滚动。