zoukankan      html  css  js  c++  java
  • [AngularJS] Directive for top scroll bar

    angular.directive('dblScroll', dblScroll)
    
    
    dblSroll.$inject = [
        '$timeout'
    ];
    function dblScroll($timeout) {
        return {
            restrict: 'A',
            transclude: true,
            scope: {
                dblScroll: '<'
            },
            template: `
                <div >
                  <div class="dblscroll__div--wrapper" 
                       ng-hide="!dblScroll"
                       ng-style="outterStyle"
                       style="height: 20px; position: absolute; left: 0; right: 0; top: -20px; overflow-y: hidden; overflow-x: auto;" >
                     <div class="dblscroll__div--inner" ng-style="innerStyle">&nbsp;</div>
                  </div>
                  <div ng-transclude></div>
                </div>
            `,
            link: function (scope, el) {
    
                function selectParent() {
                    const dom = document.querySelector('[dbl-scroll-container]');
                    if (dom) {
                        return dom;
                    }
                    return el.parent()[0];
                }
    
                let wLsn, winLsn, tLsn;
                let firstTime = null;
                const table = el[0];
                const target = selectParent();
    
                if (scope.dblScroll) {
                    const wrapper = document.querySelector('.dblscroll__div--wrapper');
    
                    const targetScrollHandler = () => {
                        wrapper.scrollLeft = target.scrollLeft
                    };
                    const wrapperScrollHandler = () => {
                        target.scrollLeft = wrapper.scrollLeft
                    };
                    const windowResizeHandler = () => {
                        $timeout(() => {
                            update();
                    }, 66)
                    };
    
                    tLsn = target.addEventListener('scroll', targetScrollHandler);
                    wLsn = wrapper.addEventListener('scroll', wrapperScrollHandler);
                    winLsn = window.addEventListener('resize', windowResizeHandler);
    
                    const update = () => {
                        const scrollWidth = table.scrollWidth;
                        const clientWidth = target.clientWidth;
                        scope.innerStyle = { scrollWidth + 'px'};
                        scope.outterStyle = { clientWidth + 'px'};
                    };
    
                    scope.$watch(() => {
                        if (!firstTime) {
                        firstTime = target.scrollWidth + target.clientWidth;
                    }
                    return target.scrollWidth + target.clientWidth - firstTime;
                }, () => {
                        $timeout(() => {
                            update();
                    }, 66)
                    });
    
                    scope.$on('$destroy', function(){
                        if (tLsn) {
                            tLsn.removeEventListener('scroll', targetScrollHandler);
                        }
                        if (wLsn) {
                            wLsn.removeEventListener('scroll', wrapperScrollHandler);
                        }
                        if(winLsn) {
                            winLsn.removeEventListener('resize', windowResizeHandler);
                        }
                    });
                }
            }
        }
    }
    
    export default dblScroll;

    Using it:

      <div style="position: relative;" >
        <div style=" 300px; height: auto; overflow-x: auto;" >
          <div style=" 600px; height: 300px;" dbl-scroll=true>div</div>
        </div>
      </div>
  • 相关阅读:
    CF1539 VP 记录
    CF1529 VP 记录
    CF875C National Property 题解
    CF1545 比赛记录
    CF 1550 比赛记录
    CF1539E Game with Cards 题解
    CF1202F You Are Given Some Letters... 题解
    vmware Linux虚拟机挂载共享文件夹
    利用SOLR搭建企业搜索平台 之九(solr的查询语法)
    利用SOLR搭建企业搜索平台 之四(MultiCore)
  • 原文地址:https://www.cnblogs.com/Answer1215/p/6878840.html
Copyright © 2011-2022 走看看