sja*_*agr 7 google-chrome ios angularjs
我用一个小的单页AngularJS应用程序遇到了令人难以置信的令人讨厌的边缘情况,我一直在为客户开发.
为简单起见,请考虑以下HTML代码:
<div ng-controller="ServiceGuideCtrl">
<h1>Care Assessment</h1>
<form ng-submit="loadResults($event);">
<div>
<h2>Is this for you or a loved one?</h2>
<ul>
<li><input type="radio" ng-model="who" value="Do you"> Me</li>
<li><input type="radio" ng-model="who" value="Does your loved one"> Loved one</li>
</ul>
</div>
<div ng-repeat="question in questions">
<h2>{{ question.text }}</h2>
<ul>
<li><input type="radio"> Yes</li>
<li><input type="radio"> No</li>
</ul>
</div>
<p ng-show="who"><input type="submit" value="Submit answers"></p>
</form>
</div>
Run Code Online (Sandbox Code Playgroud)
角度控制器:
app.controller('ServiceGuideCtrl', ['$scope', '$timeout', '$window', function($scope, $timeout, $window) {
$timeout(function() {
$window.scrollTo(0,0);
});
$scope.$watch('who', function(value) {
$scope.questions = [];
if (typeof $scope.who !== 'undefined') {
for (var i=0; i < 20; i++) {
$scope.questions.push({
'text': $scope.who + ' need this particular thing?'
});
}
}
});
}]);
Run Code Online (Sandbox Code Playgroud)
问题出在Chrome浏览器上的任何iOS平台上:
ng-repeat元素未加载,它会过度滚动到完全深灰色的区域.这是一个截图:

Plunker:点击这里
如果您想使用自己的iOS设备在Chrome上进行测试(因为Plunker使用iFrames,并且在移动设备上滚动会发生奇怪的事情).
如你所见,$window.scrollTo(0,0)对我来说什么都没做.在加载DOM和Angular之后,Chrome for iOS似乎会应用其保存的滚动位置.如果我使用大约20-30毫秒的超时,页面会在屏幕外闪烁然后回到顶部,这证实了我的理论.问题是20-30毫秒的值仍然不可靠(它的工作时间的一半),任何更大的值都会导致更明显的屏幕闪烁.
我怎样才能这样做,以便在iOS for Chrome上重新加载包含ng-repeat元素的页面时,它不会过度滚动到空白区域?这可能是iOS Chrome浏览器中的错误吗?
应该注意的是,我会接受这个浏览器错误(读:不是我的问题),但我的办公室成员是在一个反AngularJS仇杀,所以我想解决它.
我没有 iPhone,几乎不明白这个问题,但由于智能手机似乎在整个页面上应用了不需要的滚动事件,我将通过为文档设置固定高度来解决这个问题,而不是处理溢出滚动在你的容器内。
html { height: 100%; }
body { height: 100%; }
.container { height: 100%; overflow: scroll; }
Run Code Online (Sandbox Code Playgroud)
http://plnkr.co/edit/gDQNIY6kFuLnskn85yXj?p=preview
| 归档时间: |
|
| 查看次数: |
749 次 |
| 最近记录: |