使用$anchorScroll
从Ben Lesh 现在存档的博客文章中获取的角度解决方案,在他提供的这个 SO 答案中也详细复制了该文章(包括重写如何在路由中执行此操作):
app.controller('MainCtrl', function($scope, $location, $anchorScroll) {
var i = 1;
$scope.items = [{ id: 1, name: 'Item 1' }];
$scope.addItem = function (){
i++;
//add the item.
$scope.items.push({ id: i, name: 'Item ' + i});
//now scroll to it.
$location.hash('item' + i);
$anchorScroll();
};
});
这是提供此解决方案的博客中的 plunker:http ://plnkr.co/edit/xi2r8wP6ZhQpmJrBj1jM?p=preview
需要注意的是,该 plunker 的模板包含此内容,它设置了id
您$anchorScroll
用于滚动到的内容:
<li ng-repeat="item in items"
id="item{{item.id}}"
>{{item.name}</li>
如果您喜欢纯 JavaScript 解决方案,这里有一个:
使用父容器 id 和目标滚动 id 在代码中调用 runScroll:
function runScroll(parentDivId,targetID) {
var longdiv;
longdiv = document.querySelector("#" + parentDivId);
var div3pos = document.getElementById(targetID).offsetTop;
scrollTo(longdiv, div3pos, 600);
}
function scrollTo(element, to, duration) {
if (duration < 0) return;
var difference = to - element.scrollTop;
var perTick = difference / duration * 10;
setTimeout(function () {
element.scrollTop = element.scrollTop + perTick;
if (element.scrollTop == to) return;
scrollTo(element, to, duration - 10);
}, 10);
}
参考:跨浏览器 JavaScript(不是 jQuery...)滚动到顶部动画