[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"> </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的更多相关文章
- [译]angularjs directive design made easy
原文: http://seanhess.github.io/2013/10/14/angularjs-directive-design.html AngularJS directives很酷 Angu ...
- Selenium - IWebDriver 控制scroll bar到底部
有时候我们需要控制页面滚动条上的滚动条,但滚动条并非页面上的元素,这个时候就需要借助js是来进行操作.一般用到操作滚动条的会两个场景: 注册时的法律条文需要阅读,判断用户是否阅读的标准是:滚动条是否拉 ...
- 学习AngularJs:Directive指令用法
跟我学AngularJs:Directive指令用法解读(上) http://blog.csdn.net/evankaka/article/details/51232895 跟我学AngularJs: ...
- angularjs directive 实例 详解
前面提到了angularjs的factory,service,provider,这个可以理解成php的model,这种model是不带html的,今天所说的directive,也可以理解成php的mo ...
- Android - 隐藏最顶端的通知条(Top Notification Bar)
隐藏最顶端的通知条(Top Notification Bar/ActionBar) 本文地址: http://blog.csdn.net/caroline_wendy Android中, 视频播放等功 ...
- 学习AngularJs:Directive指令用法(完整版)
这篇文章主要学习AngularJs:Directive指令用法,内容很全面,感兴趣的小伙伴们可以参考一下 本教程使用AngularJs版本:1.5.3 AngularJs GitHub: http ...
- Angularjs directive全面解读(1.4.5)
说到Angularjs directive即指令,可以这么说Angularjs的灵魂就是指令,学会Angularjs指令那么你的Angularjs的武功就修炼了一半了,当然这只是鄙人的一点点独到见解, ...
- angularjs directive (自定义标签解析)
angularjs directive (自定义标签解析) 定义tpl <!-- 注意要有根标签 --> <div class="list list-inset" ...
- VS2010/MFC编程入门之二十六(常用控件:滚动条控件Scroll Bar)
回顾上一节,鸡啄米讲的是组合框控件Combo Box的使用.本节详解滚动条控件Scroll Bar的相关内容. 滚动条控件简介 滚动条大家也很熟悉了,Windows窗口中很多都有滚动条.前面讲的列表框 ...
随机推荐
- Python学习(三) 八大排序算法的实现(下)
本文Python实现了插入排序.基数排序.希尔排序.冒泡排序.高速排序.直接选择排序.堆排序.归并排序的后面四种. 上篇:Python学习(三) 八大排序算法的实现(上) 1.高速排序 描写叙述 通过 ...
- dropdown下拉菜单
<!--声明方式的下拉菜单:三个要点--> <!--1 外围容器用dropdown包裹--> <!--2 内部点击事件data-toggle--> <!--3 ...
- 一个小的考试系统 android 思路
一个小的考试系统 android 思路 假如有 100 组,每组有4个单选钮,设置超时检测确认后去测结果估分视图去切换,如果还有,就再显示下一组 所有结束就给个总结显示 有超时结束过程加上 提示正确选 ...
- BZOJ2244: [SDOI2011]拦截导弹(CDQ分治,二维LIS,计数)
Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度.并且能够拦截任意速度的导弹,但是以后每一发炮弹都不能高 ...
- COGS——T 1786. 韩信点兵
http://www.cogs.pro/cogs/problem/problem.php?pid=1786 ★★★ 输入文件:HanXin.in 输出文件:HanXin.out 简单对比时 ...
- JavaScript 倒计时器,闹钟功能
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- ThinkPHP5.0---URL访问
ThinkPHP 5.0 在没有启用路由的情况下典型的URL访问规则是(采用 PATH_INFO 访问地址): http://serverName/index.php(或者其它应用入口文件)/模块/控 ...
- 看<Asp.net夜话>随笔(2013-10-13)
1.Asp.net内置对象 1.1Request对象 封装了客户端请求信息 1.2Response对象 代表了服务器响应对象,可以向客户端返回数据 1.3Server对象 是用于获取服务器的相关信息的 ...
- 库函数strcpy/strlen的工作方式
库函数strcpy/strlen的工作方式 分类: C/C++ 2011-07-03 23:49 1032人阅读 评论 ...
- NHibernate之旅(3):探索查询之NHibernate查询语言(HQL)
本节内容 NHibernate中的查询方法 NHibernate查询语言(HQL) 1.from子句 2.select子句 3.where子句 4.order by子句 5.group by子句 实例 ...