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实现类似于ListBox功能示例代码
Mar 09 Javascript
js监控IE火狐浏览器关闭、刷新、回退、前进事件
Jul 23 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
Jan 02 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
Oct 04 Javascript
Node.js连接MongoDB数据库产生的问题
Feb 08 Javascript
vue2.0 中#$emit,$on的使用详解
Jun 07 Javascript
利用JS对iframe父子(内外)页面进行操作的方法教程
Jun 15 Javascript
vue中如何使用ztree
Feb 06 Javascript
vue和react等项目中更简单的实现展开收起更多等效果示例
Feb 22 Javascript
axios简单实现小程序延时loading指示
Jul 30 Javascript
jQuery实现王者荣耀手风琴效果
Jan 17 jQuery
Vue-cli4 配置 element-ui 按需引入操作
Sep 11 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数组操作汇总 php数组的使用技巧
2011/07/17 PHP
php中10个不同等级压缩优化图片操作示例
2016/11/14 PHP
Yii2语言国际化的配置教程
2018/08/19 PHP
在TP5数据库中四个字段实现无限分类的示例
2019/10/18 PHP
extjs grid设置某列背景颜色和字体颜色的实现方法
2010/09/06 Javascript
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
javascript五图轮播切换实用版
2012/08/17 Javascript
js中 关于undefined和null的区别介绍
2013/04/16 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
JavaScript的Number对象的toString()方法
2015/12/18 Javascript
浅析JS原型继承与类的继承
2016/04/07 Javascript
一个非常好用的文字滚动的案例,鼠标悬浮可暂停[两种方案任选]
2016/12/01 Javascript
百度地图JavascriptApi Marker平滑移动及车头指向行径方向
2017/03/13 Javascript
浅谈JS如何实现真正的对象常量
2017/06/25 Javascript
JavaScript创建对象的七种方式全面总结
2017/08/21 Javascript
jquery实现左右轮播切换效果
2018/01/01 jQuery
工作中常用到的ES6语法
2018/09/04 Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
2018/09/28 Javascript
基于Vue2-Calendar改进的日历组件(含中文使用说明)
2019/04/14 Javascript
Vue解析带html标签的字符串为dom的实例
2019/11/13 Javascript
Vue在chrome44偶现点击子元素事件无法冒泡的解决方法
2019/12/15 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
2020/03/24 Javascript
[01:56]2014DOTA2西雅图邀请赛 MVP外卡赛老队长精辟点评
2014/07/09 DOTA
Python3爬虫教程之利用Python实现发送天气预报邮件
2018/12/16 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
2019/01/02 Python
Python利用scapy实现ARP欺骗的方法
2019/07/23 Python
python——全排列数的生成方式
2020/02/26 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
css3.0 图形构成实例练习一
2013/03/19 HTML / CSS
基于html和CSS3制作酷炫的导航栏
2015/09/23 HTML / CSS
非常震撼的纯CSS3人物行走动画
2016/02/24 HTML / CSS
CSS3实现翘边的阴影效果的代码示例
2016/06/13 HTML / CSS
工商治理实习生的自我评价
2014/01/15 职场文书
2014两会优秀的心得体会范文
2014/03/17 职场文书
银行职员自我鉴定
2014/04/20 职场文书
python 用递归实现通用爬虫解析器
2021/04/16 Python