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 相关文章推荐
js语法学习之判断一个对象是否为数组
May 13 Javascript
js控制页面的全屏展示和退出全屏显示的方法
Mar 10 Javascript
Javascript基于AJAX回调函数传递参数实例分析
Dec 15 Javascript
深入浅析JS的数组遍历方法(推荐)
Jun 15 Javascript
动态JavaScript所造成一些你不知道的危害
Sep 25 Javascript
vue 注册组件的使用详解
May 05 Javascript
解决 viewer.js 动态更新图片导致无法预览的问题
May 14 Javascript
浅入深出Vue之自动化路由
Aug 06 Javascript
layui 表单标签的校验方法
Sep 04 Javascript
微信接入之获取用户头像的方法步骤
Sep 23 Javascript
Vue+Vuex实现自动登录的知识点详解
Mar 04 Javascript
jQuery 实现DOM元素拖拽交换位置的实例代码
Jul 14 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 文件上传全攻略
2010/04/28 PHP
使用php语句将数据库*.sql文件导入数据库
2014/05/05 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
2015/03/10 PHP
php实现购物车功能(上)
2020/07/23 PHP
Yii2简单实现给表单添加验证码的方法
2016/07/18 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
lnmp安装多版本PHP共存的方法详解
2018/08/02 PHP
laravel-admin 在列表页添加自定义按钮的例子
2019/09/30 PHP
用AJAX返回HTML片段中的JavaScript脚本
2010/01/04 Javascript
JS复制内容到剪切板的实例代码(兼容IE与火狐)
2013/11/19 Javascript
超级给力的JavaScript的React框架入门教程
2015/07/02 Javascript
bootstrap实现点击删除按钮弹出确认框的实例代码
2018/08/16 Javascript
使用javascript做时间倒数读秒功能的实例
2019/01/23 Javascript
JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】
2019/02/22 Javascript
JS array数组检测方式解析
2020/05/19 Javascript
python实现zencart产品数据导入到magento(python导入数据)
2014/04/03 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
2018/04/19 Python
python3.x实现发送邮件功能
2018/05/22 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
选择Python写网络爬虫的优势和理由
2019/07/07 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
使用Python实现牛顿法求极值
2020/02/10 Python
使用Python构造hive insert语句说明
2020/06/06 Python
css3进行截取替代js的substring
2013/09/02 HTML / CSS
HTML5超炫酷粒子效果的进度条的实现示例
2019/08/23 HTML / CSS
玖熙女鞋美国官网:Nine West
2016/10/06 全球购物
毕业生怎样写好自荐信
2013/11/11 职场文书
高中生第一学年自我鉴定2015
2014/09/28 职场文书
乡镇干部个人整改措施思想汇报
2014/10/10 职场文书
2014年文艺部工作总结
2014/11/17 职场文书
庆七一活动简报
2015/07/20 职场文书
Python scrapy爬取起点中文网小说榜单
2021/06/13 Python
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL
SpringBoot前端后端分离之Nginx服务器下载安装过程
2022/08/14 Servers