角度解决方案的使用$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++;
$scope.items.push({ id: i, name: 'Item ' + i});
$location.hash('item' + i);
$anchorScroll();
};
});
以下是提供此解决方案的博客中的小伙子: http
重要的是要注意,该插件的模板包括此模板,该模板用于设置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 ...)滚动到顶部动画