【发布时间】:2013-10-02 18:03:49
【问题描述】:
我想禁用滚动条拖动,同时启用所有其他捕获滚动事件的方法。
在滚动条上捕获 mousedown 事件的方法也足够了(关于该主题的大多数文本都指向不可能)。我不想使用任何外部库来解决这个问题。欢迎任何其他方法来解决下面描述的问题。
该解决方案仅适用于当前版本的 Google Chrome。
document.getElementById('mainTable').parentNode.addEventListener("scroll",function(e){
...
//Other code logic and syntax omitted
...
//Logic for deriving if scrolling up or down is accomplished by comparing
//the previously recorded .scrollTop value to the current value of the div
//containing the table 'mainTable' of datapoints
if(scrollDownEvent){
document.getElementById("mainTable").parentNode.scrollTo(0,.75*totHeight);
}else if(scrollUpEvent){
document.getElementById("mainTable").parentNode.scrollTo(0,.25*totHeight);
}else{
}
}
背景 一些非常快速的背景信息。我有几百万个数据点,每个点都有大量数据。
我将 200 个数据点加载到 html 中,加载到 table/tr/td 设置中。我将 400 个数据点缓存到一个 javascript 对象数组中(在任何给定时间点上下大约 100 个)。
当用户向下滚动时,如果正在显示的数据点的边缘靠近缓存数据点的边缘,则会将更多点从硬盘加载到缓存中(通过 html5 文件系统 api)。根据滚动事件属性状态向下滚动的距离,定义了从表格的另一端删除了多少数据点,并将新的数据点加载到表格的目标边缘。处理完滚动事件后,我滚动到表格高度的 25% 或表格的 75%。
问题我遇到的问题是滚动条拖动触发的滚动事件似乎与其他滚动事件方式不同。我正在将滚动条拖动事件捕获为滚动事件,但是如果我将滚动条一直拖到底部(如果我不一直向下拖动,我的代码可以工作),它有时会以某种方式覆盖我的 javascript 代码向上滚动 - 从而导致无法向下滚动并触发更多滚动事件。
我对从以下位置捕获的滚动事件没有任何问题:
- 鼠标滚轮移动
- 鼠标点击上/下箭头
- 鼠标点击相对于滚动条的上/下区域
- 相对于滚动条的上/下区域的鼠标按下。
- 鼠标按下向上/向下箭头按钮
- 键盘上/下箭头键向下
【问题讨论】:
-
我建议自己制作卷轴
-
开始看起来这可能是我最好的选择,谢谢你的推荐。
标签: javascript html google-chrome scroll scrollbar