单击按钮时的角度滚动 div [英] angular Scroll div on button click
问题描述
我只是在学习 angular 并且有一个问题,我就是不知道如何解决它.
我正在努力实现以下目标.
<小时>标签 A/标签 B/标签 C
................................
固定高度容器中的内容
<小时>当我单击一个选项卡时,一些内容通过 json 加载并显示在容器中.由于内容很多,我得到了一个滚动条.
我现在想做的是:存储每个 Tab 的 scrollTop 位置,以便您在切换 Tab 时可以继续阅读离开的位置.
目前我在内容 div 上有一个指令,每当 div 滚动时就会触发,并将 scrollTop 位置存储在一个数组中,与当前活动的选项卡相关.
app.directive("scrollPosition", function(){返回{限制:'A',链接:函数(范围,元素){element.bind("scroll", function(){scope.scrollPosition[scope.tab.categoryIndex]=element.scrollTop();});}}})
到目前为止,这是有效的.
但我不知道如何使用这个存储的 ScrollTop 值在我点击其中一个标签时将 div 设置到那个位置.
正确的角度方式是什么?
使用 ng-click 选项卡然后滚动 div?在指令中使用 $watch 之类的东西来查看点击了哪个选项卡?
非常感谢帮助,因为我只能找到滚动整个文档的示例,这很容易解决.但我只是不知道如何获得标签按钮和 div 之间的这种关系.
谢谢马库斯
查看 $anchorScroll.您可以在调用该函数之前对其设置 yOffset.
$anchorScroll.yOffset = 122;$anchorScroll();
https://docs.angularjs.org/api/ng/service/$anchorScroll
更新:
所以我解决了这个问题.我的第一个回答太仓促了.
这是 plnkr 的链接(虽然也嵌入到帖子中):http://embed.plnkr.co/kwPkFDfyJctfPRFPPLyk
滚动第一个标签,点击第二个标签,然后回到第一个标签.
我向指令的隔离范围添加了一个 pos
变量,并从主控制器传入了范围变量.通过这种方式,指令可以在双向绑定变量上设置滚动位置.下一次单击选项卡时,该指令通过其 scope.pos
变量将其元素上的滚动位置设置为上次滚动到的位置.希望这会有所帮助!
(function() {'使用严格';var app = angular.module('TabsApp', []).controller('TabsCtrl', ['$scope', function($scope) {$scope.tabs = [{"title": '一个',"url": 'one.tpl.html',位置":0}, {"title": '二',"url": 'two.tpl.html',位置":0}, {"title": '三',"url": 'three.tpl.html',位置":0}];$scope.$watch('tabs', function(val) {console.log("耶!!!它正在工作!Val=" + val[0].pos);}, 真的);$scope.currentTab = $scope.tabs[0];$scope.onClickTab = 函数(标签){$scope.currentTab = 标签;};$scope.isActiveTab = 函数(tabUrl){返回 tabUrl == $scope.currentTab.url;};}]);app.directive("scrollPosition", function() {返回 {限制:'A',范围: {位置:="},转置:假,链接:函数(范围,元素){element[0].onscroll = 函数(){scope.pos = element[0].scrollTop;控制台日志(范围.位置);范围.$应用();};element[0].scrollTop = scope.pos;}};});})();
ul {列表样式:无;填充:0;边距:0;}李{向左飘浮;边框:1px 实心 #000;边框底部宽度:0;边距:3px 3px 0px 3px;填充:5px 5px 0px 5px;背景颜色:#CCC;颜色:#696969;}#mainView {边框:1px纯黑色;清楚:两者;填充:0 1em;}#viewOne, #viewTwo, #viewThree {溢出:滚动;高度:200px;}.积极的 {背景颜色:#FFF;颜色:#000;}
<头><script data-require="angular.js@*" data-semver="1.3.15" src="https://code.angularjs.org/1.3.15/angular.js"></script><script src="script.js"></script><link rel="stylesheet" href="style.css"/>头部><身体><div ng-app="TabsApp"><div id="tabs" ng-controller="TabsCtrl"><ul><li ng-repeat="tab in tabs" ng-class="{active:isActiveTab(tab.url)}" ng-click="onClickTab(tab)">{{tab.title}}</里><div id="mainView"><div ng-include="currentTab.url"></div>{{currentTab.pos}}
<script type="text/ng-template" id="one.tpl.html"><div id="viewOne" 滚动位置 pos="currentTab.pos"><h1>视图一</h1><p>Praesent id metus massa,ut blandit odio.Proin quis Tortor orci.Etiam at risus et justo dignissim congue.Donec congue lacinia dui,一种porttitor lectus condimentum laoreet.Nunc.
<p>Praesent id metus massa,ut blandit odio.Proin quis Tortor orci.Etiam at risus et justo dignissim congue.Donec congue lacinia dui,一种porttitor lectus condimentum laoreet.Nunc.<p>Praesent id metus massa,ut blandit odio.Proin quis Tortor orci.Etiam at risus et justo dignissim congue.Donec congue lacinia dui,一种porttitor lectus condimentum laoreet.Nunc.<p>Praesent id metus massa,ut blandit odio.Proin quis Tortor orci.Etiam at risus et justo dignissim congue.Donec congue lacinia dui,一种porttitor lectus condimentum laoreet.Nunc.<p>Praesent id metus massa,ut blandit odio.Proin quis Tortor orci.Etiam at risus et justo dignissim congue.Donec congue lacinia dui,一种porttitor lectus condimentum laoreet.Nunc.<p>Praesent id metus massa,ut blandit odio.Proin quis Tortor orci.Etiam at risus et justo dignissim congue.Donec congue lacinia dui,一种porttitor lectus condimentum laoreet.Nunc.<p>Praesent id metus massa,ut blandit odio.Proin quis Tortor orci.Etiam at risus et justo dignissim congue.Donec congue lacinia dui,一种porttitor lectus condimentum laoreet.Nunc.<p>Praesent id metus massa,ut blandit odio.Proin quis Tortor orci.Etiam at risus et justo dignissim congue.Donec congue lacinia dui,一种porttitor lectus condimentum laoreet.Nunc.<p>Praesent id metus massa,ut blandit odio.Proin quis Tortor orci.Etiam at risus et justo dignissim congue.Donec congue lacinia dui,一种porttitor lectus condimentum laoreet.Nunc.<script type="text/ng-template" id="two.tpl.html"><div id="viewTwo" 滚动位置 pos="currentTab.pos"><h1>视图二</h1><p>Curabitur vulputate, ligula lacinia scelerisque tempor, lacus lacus ornare ante, ac egestas est urna sat amet arcu.类 aptent taciti socialsqu.</p>
<script type="text/ng-template" id="three.tpl.html"><div id="viewThree" 滚动位置 pos="currentTab.pos"><h1>视图三</h1><p>在pellentesque faucibus前庭.Nulla at nulla justo,eget luctus Tortor.Nulla facilisi.Duis aliquet egestas purus in blandit.Curabitur vulputate, ligula lacinia scelerisque tempor, lacus lacus ornare ante, ac egestas est urna sat amet阿库.类 aptent taciti socialsqu.</p>