首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scrollTo in AngularJS

scrollTo in AngularJS
EN

Stack Overflow用户
提问于 2014-05-02 17:51:42
回答 2查看 4.3K关注 0票数 0

到目前为止,我一直在使用jQuery作为我的单页“滚动到div”应用程序,但是自从我制作了一个有角度的应用程序(只是为了学习目的),我尝试以角度来做所有事情,而不是回到好的ol‘jQuery上。

我试着做一个滚动到div-在同一页-菜单,但我真的不确定如何做到这一角度。

目前,我正在使用这个片段来做我想做的事情:

JS

代码语言:javascript
复制
app.directive('scrollOnClick', function() {
      return {
        restrict: 'A',
        link: function(scope, $elm, attrs) {
          $elm.click(function() {
            var linkHref = attrs.href;
            angular.element('html,body').animate({
              // select the element the href points to
              scrollTop: angular.element(linkHref).offset().top - 60
            }, 'slow');
          });
        }
      }
    });

代码语言:javascript
复制
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
  <div class="container">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a ng-href="/" role="button" class="navbar-brand">angularApp</a>
    </div>
    <div class="navbar-collapse collapse">
      <ul class="nav navbar-nav">
        <li><a href="##one">One</a></li>
        <li><a href="##two">Two</a></li>
        <li><a href="##three">Three</a></li>
      </ul>
    </div>
  </div>
</div>
<div id="page-wrap">
  <div id="one">...</div>
  <div id="two">...</div>
  <div id="three">...</div>
</div>

但效果并不完美。

我需要它滚动一个60 my的保证金,因为你可以在代码中看到,因为我的固定导航条。我还希望它导航慢一些,并且有一个非常像/two而不是/#two的url。这是如何实现的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-03 18:28:55

最后我使用了角滚动体,我认为这是非常好的。使用起来很简单。在用bower安装它之后,我所要做的就是注入模块,然后简单地将它添加到我的中(仅仅是github的一个例子):

代码语言:javascript
复制
<a href="" scroll-to="#element" offset="0" container="html, body">Go to element</a>

<div id="element">
  You will scroll to me
</div>
票数 0
EN

Stack Overflow用户

发布于 2014-05-02 18:17:41

如果已经加载了jQuery,则可以使用angular.element作为$的别名。这通常是“适当”的方式,以角度来做。如果不先加载jQuery,angular.element将使用jQLite,这取决于可用的选择器。既然您已经在使用jQuery,让我们假设您已经在角之前加载了它。

假设您的jQuery示例按照您喜欢的方式工作,您可以使用相同的选择器,以$elm代替target,减去60 to,并将动画定时器设置为1000,就像在jQuery示例中所做的那样。

试着做这样的事情:

代码语言:javascript
复制
app.directive('scrollOnClick', function() {
  return {
    restrict: 'A',
    link: function(scope, $elm) {
      $elm.click(function() {
        // same as your jQuery example
        angular.element('html,body').animate({
          scrollTop: $elm.offset().top - 60
        }, 1000);
      });
    }
  }
});

-编辑--

等等,我知道你想做什么.

您需要从元素中获取href属性。link函数可以接受第三个参数,即附加到元素的属性。然后,不要将scrollTop设置为单击的链接的偏移量,而是将其设置为href中元素的偏移量,使用angular.element进行选择。如下所示:

代码语言:javascript
复制
app.directive('scrollOnClick', function() {
  return {
    restrict: 'A',
    link: function(scope, $elm, attrs) {
      $elm.click(function() {
        var linkHref = attrs.href;
        angular.element('html,body').animate({
          // select the element the href points to
          scrollTop: angular.element(linkHref).offset().top - 60
        }, 1000);
      });
    }
  }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23434100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档