加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何“记住”在带有Ui.ROUTER的angularJS中的滚动位置

发布时间:2020-12-17 06:58:25 所属栏目:安全 来源:网络整理
导读:我有一个项目我正在使用带有ui.router的angularJS,如果用户点击某个事件来查看详细信息,则会显示一个后退按钮但是在点击后面时,我们会有一个非常长的事件列表(具有无限滚动) div的滚动重置回顶部!寻找一些关于是否有内置的建议,我可以利用它来记住这个滚动
我有一个项目我正在使用带有ui.router的angularJS,如果用户点击某个事件来查看详细信息,则会显示一个后退按钮但是在点击后面时,我们会有一个非常长的事件列表(具有无限滚动) div的滚动重置回顶部!寻找一些关于是否有内置的建议,我可以利用它来记住这个滚动位置,我知道这是锚定服务,但我想知道是否有更适合停止角度重置导航滚动位置的东西??因为有一些相似的列表需要记住他们滚动时的状态..我已经调查并试图实现ui-router-extras dsr和sticky但是两者都没有工作..
例如 http://codedef.com/hapzis_poc/.不是完整的证明,但应该能够向下滚动事件,点击并返回并保持在相同的滚动位置..

解决方法

关于类似主题(ng-view)的讨论和@ br2000给出的答案对我有用.

https://stackoverflow.com/a/25073496/3959662

要使他的指令适用于ui-router,请执行以下操作:

1.创建这样的新指令:

(function () {
    'use strict';

    angular
        .module('your.module.directives')
        .directive('keepScrollPos',keepScrollPos);

    function keepScrollPos($route,$window,$timeout,$location,$anchorScroll,$state) {

        // cache scroll position of each route's templateUrl
        var scrollPosCache = {};

        // compile function
        var directive = function (scope,element,attrs) {

            scope.$on('$stateChangeStart',function () {
                // store scroll position for the current view
                if($state.$current)
                { 
                    scrollPosCache[$state.current.templateUrl] = [$window.pageXOffset,$window.pageYOffset];
                }
             });

            scope.$on('$stateChangeSuccess',function () {
                // if hash is specified explicitly,it trumps previously stored scroll position
                if ($location.hash()) {
                    $anchorScroll();

                // else get previous scroll position; if none,scroll to the top of the page
                } else {
                    var prevScrollPos = scrollPosCache[$state.current.templateUrl] || [0,0];
                    $timeout(function () {
                        $window.scrollTo(prevScrollPos[0],prevScrollPos[1]);
                },0);
            }
        });
    };

    return directive;
}
})();

2.在我拥有ui-view属性的元素上使用它,在我的例子中:

<div class="col-xs-12" ui-view keep-scroll-pos></div>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读