$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();
};
});
そして、これがこのソリューションを提供したブログのプランカーです: http://plnkr.co/edit/xi2r8wP6ZhQpmJrBj1jM?p=preview
そのプランカーのテンプレートにはこれが含まれていることに注意してください。これにより、スクロールにid
使用しているがセットアップされます。$anchorScroll
<li ng-repeat="item in items"
id="item{{item.id}}"
>{{item.name}</li>
そして、純粋な JavaScript ソリューションが必要な場合は、次の 1 つがあります。
親コンテナ 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ではなく…)トップへスクロールのアニメーション