angular2+ 两个div双向滚动的优化
两个div
双向滚动的优化
附上未优化代码:
html:
<div #left (scroll)="scroll($event,'right')">
</div>
<div #right (scroll)="scroll($event,'left')">
</div>
ts:
@ViewChild('left') left: ElementRef;
@ViewChild('right') right: ElementRef;
scroll(e, position) {
this[position].nativeElement.scrollTop = e.target.scrollTop;
this[position].nativeElement.scrollLeft = e.target.scrollLeft;
}
这样的结果就是在设置scrollTop
和scrollLeft
的时候会触发目标dom
的scroll
函数导致频繁调用,具体表现就是滚动卡顿(鼠标滑轮滚动)
搜到的jquery
答案是这样:
//HTML代码
<div id="test_Left" onScroll="moveUp_Left();" ></div>
<div id="test_Right"onScroll="moveUp_Right();" ></div>
//JS代码
var timer = null;
//左侧DIV的滚动事件
function moveUp_Left()
{
//先删除右侧DIV的滚动事件,以免自动触发
$("#test_Right").removeAttr("onScroll");
//正常设值,同步两个DIV的滚动幅度
$("#test_Right").scrollTop($("#test_Left").scrollTop());
//取消延迟预约。【重点】鼠标滚动过程中会多次触发本行代码,相当于不停的延迟执行下面的预约
clearTimeout(timer);
//延迟恢复(预约)另一个DIV的滚动事件,并将本预约返回给变量[timer]
timer = setTimeout(function() {
$("#test_Right").attr("onScroll","moveUp_Right();");
}, 300 );
}
//右侧DIV的滚动事件(原理同上)
function moveUp_Right()
{
$("#test_Left").removeAttr("onScroll");
$("#test_Left").scrollTop($("#test_Right").scrollTop());
clearTimeout(timer);
timer = setTimeout(function() {
$("#test_Left").attr("onScroll","mymoveUp_UI03_Left();");
}, 300 );
}
亲测可行,求问在angular2
以上版本怎么去实现类似效果。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
既然都用angular2了,处理这种情况当然要考虑用
rxjs
来做了。rxjs是可以通过监听dom事件来创建一个observable的。
同时Observable也提供了Api, 比如debounceTime,distinctUntilChanged 都可以减少对dom的频繁修改,提升滑动效果。
rxjs