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 = {width: scrollWidth + 'px'};
scope.outterStyle = {width: 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="width: 300px; height: auto; overflow-x: auto;" >
<div style="width: 600px; height: 300px;" dbl-scroll=true>div</div>
</div>
</div>

[AngularJS] Directive for top scroll bar的更多相关文章

  1. [译]angularjs directive design made easy

    原文: http://seanhess.github.io/2013/10/14/angularjs-directive-design.html AngularJS directives很酷 Angu ...

  2. Selenium - IWebDriver 控制scroll bar到底部

    有时候我们需要控制页面滚动条上的滚动条,但滚动条并非页面上的元素,这个时候就需要借助js是来进行操作.一般用到操作滚动条的会两个场景: 注册时的法律条文需要阅读,判断用户是否阅读的标准是:滚动条是否拉 ...

  3. 学习AngularJs:Directive指令用法

    跟我学AngularJs:Directive指令用法解读(上) http://blog.csdn.net/evankaka/article/details/51232895 跟我学AngularJs: ...

  4. angularjs directive 实例 详解

    前面提到了angularjs的factory,service,provider,这个可以理解成php的model,这种model是不带html的,今天所说的directive,也可以理解成php的mo ...

  5. Android - 隐藏最顶端的通知条(Top Notification Bar)

    隐藏最顶端的通知条(Top Notification Bar/ActionBar) 本文地址: http://blog.csdn.net/caroline_wendy Android中, 视频播放等功 ...

  6. 学习AngularJs:Directive指令用法(完整版)

    这篇文章主要学习AngularJs:Directive指令用法,内容很全面,感兴趣的小伙伴们可以参考一下   本教程使用AngularJs版本:1.5.3 AngularJs GitHub: http ...

  7. Angularjs directive全面解读(1.4.5)

    说到Angularjs directive即指令,可以这么说Angularjs的灵魂就是指令,学会Angularjs指令那么你的Angularjs的武功就修炼了一半了,当然这只是鄙人的一点点独到见解, ...

  8. angularjs directive (自定义标签解析)

    angularjs directive (自定义标签解析) 定义tpl <!-- 注意要有根标签 --> <div class="list list-inset" ...

  9. VS2010/MFC编程入门之二十六(常用控件:滚动条控件Scroll Bar)

    回顾上一节,鸡啄米讲的是组合框控件Combo Box的使用.本节详解滚动条控件Scroll Bar的相关内容. 滚动条控件简介 滚动条大家也很熟悉了,Windows窗口中很多都有滚动条.前面讲的列表框 ...

随机推荐

  1. OpenStack_Swift源代码分析——ObjectReplicator源代码分析(1)

    1.ObjectorReplicator的启动 首先执行启动脚本 swift-init object-replicator start 此执行脚本的执行过程和ring执行脚本执行过程差点儿相同.找到s ...

  2. windows 2016 配置 VNC 服务

    windows 2016 配置 VNC 服务 下载windows版 https://www.realvnc.com/download/vnc/ 安装时勾选 vncserver 进入 "C:\ ...

  3. Funui-overlay 如何添加theme 的 overlay

    昨天更改theme主题的时候,发现所有仓库下的theme都是共用的.也就是说,如果你更改了52平台下的theme,那么你提交了代码以后,82下也会发生相应的更改.但是,昨天修改的theme属性,只在3 ...

  4. 基于Linux系统WINE虚拟机技术的研究

    650) this.width=650;" onclick="window.open("http://blog.51cto.com/viewpic.php?refimg= ...

  5. Android 多线程断点续传同时下载多个大文件

    最近学习在Android环境中一些网络请求方面的知识,其中有一部分是关于网络下载方面的知识.在这里解析一下自己写的demo,总结一下自己所学的知识.下图为demo的效果图,仿照一些应用下载商城在Lis ...

  6. golang filepath.Walk遍历指定目录下的所有文件

    package main import ( "fmt" "os" "path/filepath" ) func walkFunc(path ...

  7. POJ 1654 Area 凸包面积

    水题直接码... /********************* Template ************************/ #include <set> #include < ...

  8. 微信小程序实现一个简单的表格

    wxml <view class="table"> <view class="tr bg-w"> <view class=&quo ...

  9. Shiro学习总结(3)——Apache Shiro身份认证

    身份验证,即在应用中谁能证明他就是他本人.一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明. 在shiro中,用户需要提供principals (身份)和cre ...

  10. 支付宝支付Java后台总结

    这个支付的流程是前端H5(APP等)需要支付时调用后台的接口拿到我们加密的签名去调起支付宝的支付界面(支付宝APP)进行支付操作,并且前端在支付成功后,支付宝后台会回调一个我们在签名时写入的一个接口地 ...