JS无法捕获滚动条上的mouse up事件的原因猜想


Posted in Javascript onMarch 21, 2012

比如一个网页的聊天室,滚动条会随着内容的增加自动往下滚动。
当用户鼠标在滚动条上按下的时候,我们可以假设他(她)正在浏览聊天内容,那么这个时候好的用户体验就不能让滚动条再自动滚动了。
为了实现这个功能,可能大家首先会想到的就是mouse down 和 mouse up事件了。
可是具体实现的时候我们会发现在滚动条上按下鼠标左键再松开的时候,捕获不到mouse up了。如下面例子

<html> 
<head> 
<title></title> 
<script type="text/javascript"> 
var captureTarget = null; 
function down(obj, e) { 
captureTarget = obj; 
// 如果是IE可以打开注释 
// captureTarget.setCapture(); 
e = e ? e : window.event; 
} 
function up(obj,e) { 
// if (captureTarget) 
// captureTarget.releaseCapture(); 
e = e ? e : window.event; 
div2.innerText = e.srcElement.tagName; 
} 
document.addListener = function(event, callback) { 
if (!document.all) 
this.addEventListener(event, callback); 
else 
this.attachEvent("on"+event, callback); 
} 
document.addListener("mouseup", function(){alert(1);}); 
</script> 
</head> 
<body > 
<div style="width:200px;height:200px;overflow:scroll" onmousedown="down(this, event);"> 
<div style="height:500px; width:500px"></div> 
</div> 
</body> 
</html>

保存为html格式文件,浏览器打开,然后在滚动条上左键点击试试,再在其他地方点击试试。
由于没有深入研究过W3C的文档,这里只能猜想。
考虑到滚动条的特性,可能浏览器在鼠标按下滚动条的时候给滚动条setCapture了,而鼠标松开之后给他releaseCapture,滚动条又不属于Dom对象,所以在鼠标释放之前无法捕获mouseup事件。
Javascript 相关文章推荐
用jquery来定位
Feb 20 Javascript
js获取div高度的代码
Aug 09 Javascript
浅析JavaScript中的CSS属性及命名规范
Nov 28 Javascript
JS版的date函数(和PHP的date函数一样)
May 12 Javascript
JavaScript组件开发完整示例
Dec 15 Javascript
js解决movebox移动问题
Mar 29 Javascript
JS打开摄像头并截图上传示例
Feb 18 Javascript
了解ESlint和其相关操作小结
May 21 Javascript
vue-router 手势滑动触发返回功能
Sep 30 Javascript
vue前端框架—Mint UI详解(更适用于移动端)
Apr 30 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
May 13 jQuery
js实现窗口全屏示例详解
Sep 17 Javascript
js对象关系图 方便dom操作
Mar 18 #Javascript
再谈javascript面向对象编程
Mar 18 #Javascript
一个简单的Ext.XTemplate的实例代码
Mar 18 #Javascript
Javascript 面向对象编程(coolshell)
Mar 18 #Javascript
Javascript面向对象编程
Mar 18 #Javascript
javascript 常用功能总结
Mar 18 #Javascript
Jquery实现简单的动画效果代码
Mar 18 #Javascript
You might like
德生PL330测评
2021/03/02 无线电
简单示例AJAX结合PHP代码实现登录效果代码
2008/07/25 PHP
php getsiteurl()函数
2009/09/05 PHP
php file_get_contents函数轻松采集html数据
2010/04/22 PHP
php中长文章分页显示实现代码
2012/09/29 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
js设置文本框中焦点位置在最后的示例代码(简单实用)
2014/03/04 Javascript
Extjs的FileUploadField文件上传出现了两个上传按钮
2014/04/29 Javascript
javascript圆盘抽奖程序实现原理和完整代码例子
2014/06/03 Javascript
js创建表单元素并使用submit进行提交
2014/08/14 Javascript
Javascript学习笔记之数组的构造函数
2014/11/23 Javascript
全面解析Bootstrap表单使用方法(表单按钮)
2015/11/24 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
真正好用的js验证上传文件大小的简单方法
2016/10/27 Javascript
jQuery实现立体式数字动态增加(animate方法)
2016/12/21 Javascript
js实现复选框的全选和取消全选效果
2017/01/03 Javascript
Node.js中Bootstrap-table的两种分页的实现方法
2017/09/18 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
2018/01/24 Javascript
使用angularjs.foreach时return的问题解决
2018/09/30 Javascript
Node.js折腾记一:读指定文件夹,输出该文件夹的文件树详解
2019/04/20 Javascript
JS校验与最终登陆界面功能完整示例
2020/01/13 Javascript
详解vue beforeEach 死循环问题解决方法
2020/02/25 Javascript
three.js 如何制作魔方
2020/07/31 Javascript
Python 包含汉字的文件读写之每行末尾加上特定字符
2016/12/12 Python
Python实现替换文件中指定内容的方法
2018/03/19 Python
安装完Python包然后找不到模块的解决步骤
2020/02/13 Python
Windows下Anaconda安装、换源与更新的方法
2020/04/17 Python
keras.utils.to_categorical和one hot格式解析
2020/07/02 Python
英语自荐信范文
2013/12/11 职场文书
公司会计岗位职责
2014/02/13 职场文书
医院安全生产月活动总结
2014/07/05 职场文书
社会实践的活动方案
2014/08/22 职场文书
公务员政审材料范文
2014/12/23 职场文书
公司门卫岗位职责
2015/04/13 职场文书
高中体育课教学反思
2016/02/16 职场文书