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 相关文章推荐
javascript编程起步(第七课)
Jan 10 Javascript
浅析javascript闭包 实例分析
Dec 25 Javascript
jQuery getJSON()+.ashx 实现分页(改进版)
Mar 28 Javascript
javascript 树形导航菜单实例代码
Aug 13 Javascript
jQuery javaScript捕获回车事件(示例代码)
Nov 07 Javascript
jQuery实现获取绑定自定义事件元素的方法
Dec 02 Javascript
深入理解JS继承和原型链的问题
Dec 17 Javascript
AngularJS中update两次出现$promise属性无法识别的解决方法
Jan 05 Javascript
JS实现上传图片的三种方法并实现预览图片功能
Jul 14 Javascript
利用vue.js实现被选中状态的改变方法
Feb 08 Javascript
解决vue中post方式提交数据后台无法接收的问题
Aug 11 Javascript
layui 实现table翻页滚动条位置保持不变的例子
Sep 05 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
PHP中的正则表达式函数介绍
2012/02/27 PHP
php开发留言板的CRUD(增,删,改,查)操作
2012/04/19 PHP
Zend的MVC机制使用分析(一)
2013/05/02 PHP
PHP字符串长度计算 - strlen()函数使用介绍
2013/10/15 PHP
php实现数据库的增删改查
2017/02/26 PHP
PHP错误处理函数register_shutdown_function使用示例
2017/07/03 PHP
javascript 验证日期的函数
2010/03/18 Javascript
JavaScript学习笔记(一) js基本语法
2011/10/25 Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
2012/07/31 Javascript
左侧是表头的JS表格控件(自写,网上没有的)
2013/06/04 Javascript
jquery验证邮箱格式是否正确实例讲解
2015/11/16 Javascript
Bootstrap每天必学之进度条
2015/11/30 Javascript
jquery自定义右键菜单、全选、不连续选择
2016/03/01 Javascript
jQuery.form插件的使用及跨域异步上传文件
2016/04/27 Javascript
JS实现可编辑的后台管理菜单功能【附demo源码下载】
2016/09/13 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
深入理解js A*寻路算法原理与具体实现过程
2018/12/13 Javascript
小程序测试后台服务的方法(ngrok)
2019/03/08 Javascript
通过实例了解js函数中参数的传递
2019/06/15 Javascript
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
python实现发送邮件功能代码
2017/12/14 Python
python监控键盘输入实例代码
2018/02/09 Python
python 重定向获取真实url的方法
2018/05/11 Python
django之使用celery-把耗时程序放到celery里面执行的方法
2019/07/12 Python
python迭代器常见用法实例分析
2019/11/22 Python
python中p-value的实现方式
2019/12/16 Python
python实现可下载音乐的音乐播放器
2020/02/25 Python
Django中的AutoField字段使用
2020/05/18 Python
windows支持哪个版本的python
2020/07/03 Python
HTML5离线缓存Manifest是什么
2016/03/09 HTML / CSS
PHP如何与mysql建立链接
2013/05/05 面试题
应聘文员自荐信范文
2014/03/11 职场文书
暑期培训班招生方案
2014/08/26 职场文书
会计主管竞聘书
2015/09/15 职场文书
python自动化之如何利用allure生成测试报告
2021/05/02 Python
奥特曼十大神器:奥特手镯在榜,第一是贝利亚的神器
2022/03/18 日漫