【发布时间】:2016-05-09 10:08:05
【问题描述】:
Play with my JSfiddle
是否可以使用$timeout 承诺使scrollTo 可链接,如下所示?如果没有,我该如何编写 scrollTo,作为一个承诺,以便我可以使用 then 进行回调?
html:
<div ng-click=toTop()>click me</div>
js:
app.controller('MainCtrl', function($scope, $timeout) {
$scope.toTop = function() {
var bodyEl = angular.element(document.querySelector('#body'));
scrollTo_(bodyEl[0], 0, 500);
};
function scrollTo_(element, to, duration) {
if (duration <= 0) {
$timeout.cancel(forward);
console.log('yoyo');
return forward;
}
var difference = to - element.scrollTop;
var perTick = difference / duration * 10;
var forward = $timeout(function() {
element.scrollTop = element.scrollTop + perTick;
scrollTo_(element, to, duration - 10);
}, 10, false);
}
});
【问题讨论】:
-
能否提供HTML、CSS。请创建 jsFiddle
-
已更新。还有什么我可以帮忙的吗?
标签: javascript angularjs recursion timeout promise