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的21条基本知识点
Mar 04 Javascript
JavaScript实现找出数组中最长的连续数字序列
Sep 03 Javascript
JS控制网页动态生成任意行列数表格的方法
Mar 09 Javascript
微信小程序 swiper组件详解及实例代码
Oct 25 Javascript
快速掌握jQuery插件WebUploader文件上传
Nov 07 Javascript
详解Jquery EasyUI tree 的异步加载(遍历指定文件夹,根据文件夹内的文件生成tree)
Feb 11 Javascript
jQuery获取table下某一行某一列的值实现代码
Apr 07 jQuery
使用requirejs模块化开发多页面一个入口js的使用方式
Jun 14 Javascript
Node.js中环境变量process.env的一些事详解
Oct 26 Javascript
webpack配置导致字体图标无法显示的解决方法
Mar 06 Javascript
layer父页获取弹出层输入框里面的值方法
Sep 02 Javascript
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
Feb 01 jQuery
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分页函数完整实例代码
2014/09/22 PHP
php发送html格式文本邮件的方法
2015/06/10 PHP
PHP Echo字符串的连接格式
2016/03/07 PHP
thinkPHP基于ajax实现的菜单与分页示例
2016/07/12 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
2021/03/09 PHP
javascript跨域刷新实现代码
2011/01/01 Javascript
javascript学习(二)javascript常见问题总结
2013/01/02 Javascript
JS读取XML文件示例代码
2013/11/15 Javascript
jQuery选择器源码解读(八):addCombinator函数
2015/03/31 Javascript
浅谈关于JavaScript API设计的一些建议和准则
2015/06/24 Javascript
js实现input框文字动态变换显示效果
2015/08/19 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
2017/02/14 Javascript
微信小程序中用WebStorm使用LESS
2017/03/08 Javascript
AngularJS中使用ngModal模态框实例
2017/05/27 Javascript
深入理解Vue官方文档梳理之全局API
2017/11/22 Javascript
微信小程序模版渲染详解
2018/01/26 Javascript
JavaScript JSON数据处理全集(小结)
2019/08/15 Javascript
微信小程序自定义弹出模态框禁止底部滚动功能
2020/03/09 Javascript
Vue如何实现变量表达式选择器
2021/02/18 Vue.js
简单讲解Python中的字符串与字符串的输入输出
2016/03/13 Python
python urllib urlopen()对象方法/代理的补充说明
2017/06/29 Python
python中的不可变数据类型与可变数据类型详解
2018/09/16 Python
Python使用Pandas对csv文件进行数据处理的方法
2019/08/01 Python
利用pyshp包给shapefile文件添加字段的实例
2019/12/06 Python
Python OpenCV实现测量图片物体宽度
2020/05/27 Python
基于python代码批量处理图片resize
2020/06/04 Python
纯CSS3打造属于自己的“小黄人”
2016/03/14 HTML / CSS
详解Html5 监听拦截Android返回键方法
2018/04/18 HTML / CSS
美国著名的户外用品品牌:L.L.Bean
2018/01/05 全球购物
单位消防安全制度
2014/01/12 职场文书
有关环保的标语
2014/06/13 职场文书
爱的奉献演讲稿
2014/09/10 职场文书
党支部书记四风问题整改措施
2014/09/24 职场文书
党员活动总结
2015/02/04 职场文书
社区挂职锻炼个人工作总结
2015/10/23 职场文书
springboot @ConfigurationProperties和@PropertySource的区别
2021/06/11 Java/Android