[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(二)
作者: Zhang Yang 列表推导 上文介绍了一个高逼格的创建字典的方法.那列表呢?依据蛋痛定律,它也一定有,可是它被起了一个很蛋痛的名字,叫列表推导: 先看看这种代码: li = [] for ...
- jquary依据td中button的元素属性删除tr行(删选出想删除的行)
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcnVveXVhbnlp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...
- worktools-monkey 测试工具的使用
配置电脑环境 1.进入用户目录下的bin cd ~/bin 2.链接一下monkey monkey -> /home/zhangshuli/git/vanzo_team/xulei/monkey ...
- TextView -无法调节字体、边框的距离
今天调节一个字体边框距离,结果一直都实现不了,布局如下 <RelativeLayout xmlns:android="http://schemas.android.com/apk/re ...
- Android学习笔记进阶十三获得本地全部照片
这是Intent的一个用法. 在ActivityAction里面有一个“ACTION_GET_CONTENT”字符串常量,该常量让用户选择特定类型的数据. intent.setType("i ...
- Android学习笔记进阶十一图片动画播放(AnimationDrawable)
大家平时见到的最多的可能就是Frame动画了,Android中当然也少不了它.它的使用更加简单,只需要创建一个 AnimationDrawabledF对象来表示Frame动画,然后通过addFrame ...
- php数组时按值传递还是按地址传递
php数组时按值传递还是按地址传递 一.总结 1.数组都是按值:php普通变量和数组的赋值(=)是按值传递,对象的赋值(=)是按址传递 2.对象和按值和按址:对象的clone(用clone关键字)是按 ...
- 26.多线程join detach
#include <iostream> #include <thread> #include <array> #include <Windows.h> ...
- 数组-reduce方法
转自: https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/139 实现 convert 方法,把原始 list ...
- bzoj3786星系探索(splay维护dfs序)
Description 物理学家小C的研究正遇到某个瓶颈. 他正在研究的是一个星系,这个星系中有n个星球,其中有一个主星球(方便起见我们默认其为1号星球),其余的所有星球均有且仅有一个依赖星球.主星球 ...