ScrollTo function in AngularJS

后端 未结 9 1867
梦如初夏
梦如初夏 2020-11-27 11:43

I\'m trying to get a quick nav to work correctly. It\'s floating on the side. When they click on a link, it takes them to that ID on the page. I\'m following this guide fro

9条回答
  •  迷失自我
    2020-11-27 11:55

    An angular solution using $anchorScroll http://www.benlesh.com/2013/02/angular-js-scrolling-to-element-by-id.html:

    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();
      };
    });
    

    And here is a plunk: http://plnkr.co/edit/xi2r8wP6ZhQpmJrBj1jM?p=preview

    And if you care for a pure javascript solution, here is one:

    Invoke runScroll in your code with parent container id and target scroll id:

    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);
    }
    

    Reference: Cross browser JavaScript (not jQuery...) scroll to top animation

提交回复
热议问题