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 相关文章推荐
解决FLASH需要点击激活的代码
Dec 20 Javascript
基于jquery的跟随屏幕滚动代码
Jul 24 Javascript
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
Apr 11 Javascript
js判断url是否有效的两种方法
Mar 04 Javascript
RequireJS入门一之实现第一个例子
Sep 30 Javascript
AngularJs解决跨域问题案例详解(简单方法)
May 19 Javascript
js基于setTimeout与setInterval实现多线程
Jun 17 Javascript
JS调用打印机功能简单示例
Nov 28 Javascript
angularJS深拷贝详解
Mar 23 Javascript
vue-cli入门之项目结构分析
Apr 20 Javascript
原理深度解析Vue的响应式更新比React快
Apr 04 Javascript
利用JavaScript为句子加标题的3种方法示例
Jan 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学习资料汇总与网址
2007/03/16 PHP
php中session_unset与session_destroy的区别分析
2011/06/16 PHP
PHP goto语句简介和使用实例
2014/03/11 PHP
php隐藏实际地址的文件下载方法
2015/04/18 PHP
深入浅析php中sprintf与printf函数的用法及区别
2016/01/08 PHP
win10环境PHP 7 安装配置【教程】
2016/05/09 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
2018/04/27 PHP
激活 ActiveX 控件
2006/10/09 Javascript
一页面多XMLHttpRequest对象
2007/01/22 Javascript
Extjs学习笔记之九 数据模型(上)
2010/01/11 Javascript
jquery ajax 同步异步的执行示例代码
2010/06/23 Javascript
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
2010/08/16 Javascript
jQuery prev ~ siblings选择器使用介绍
2013/08/09 Javascript
判断文档离浏览器顶部的距离的方法
2014/01/08 Javascript
JavaScript版的TwoQueues缓存模型
2014/12/29 Javascript
JavaScript中的Function函数
2015/08/27 Javascript
jQuery模拟select实现下拉菜单功能
2016/06/20 Javascript
详解vue.js的devtools安装
2017/05/26 Javascript
微信小程序 input表单与redio及下拉列表的使用实例
2017/09/20 Javascript
js 实现watch监听数据变化的代码
2019/10/13 Javascript
Node.js API详解之 dgram模块用法实例分析
2020/06/05 Javascript
python正则匹配查询港澳通行证办理进度示例分享
2013/12/27 Python
Django中cookie的基本使用方法示例
2018/02/03 Python
python随机数分布random测试
2018/08/27 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
2018/10/26 Python
python3 requests库实现多图片爬取教程
2019/12/18 Python
Python Django view 两种return的实现方式
2020/03/16 Python
Python爬虫headers处理及网络超时问题解决方案
2020/06/19 Python
移动web模拟客户端实现多方框输入密码效果【附代码】
2016/03/25 HTML / CSS
详解html2canvas截图不能截取圆角图片的解决方案
2018/01/30 HTML / CSS
美国和加拿大计算机和电子产品购物网站:TigerDirect.com
2019/09/13 全球购物
保护环境建议书
2014/03/12 职场文书
新闻发布会主持词
2014/03/28 职场文书
孝老爱亲事迹材料
2014/12/24 职场文书
新闻稿格式范文
2015/07/18 职场文书
python数据分析之用sklearn预测糖尿病
2021/04/22 Python