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事件冒泡传递(cancelBubble 、stopPropagation)
May 08 Javascript
JavaScript作用域链使用介绍
Aug 29 Javascript
javascript字母大小写转换的4个函数详解
May 09 Javascript
jQuery中DOM树操作之使用反向插入方法实例分析
Jan 23 Javascript
深入探讨JavaScript String对象
Mar 09 Javascript
使用AngularJS编写较为优美的JavaScript代码指南
Jun 19 Javascript
jQuery图片拖动组件Dropzone用法示例
Jan 17 Javascript
jQuery 实时保存页面动态添加的数据的示例
Aug 14 jQuery
深入理解Vue Computed计算属性原理
May 29 Javascript
Vue中遍历数组的新方法实例详解
Jul 21 Javascript
Javascript 关于基本类型和引用类型的个人理解
Nov 01 Javascript
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
Nov 20 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微信浏览器分享设置以及回调详解
2016/08/01 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
实例解析php的数据类型
2018/10/24 PHP
用js实现控制内容的向上向下滚动效果
2007/06/26 Javascript
IE和Firefox在JavaScript应用中的兼容性探讨
2008/04/01 Javascript
JavaScript null和undefined区别分析
2009/10/14 Javascript
浅谈js 闭包引起的内存泄露问题
2015/06/22 Javascript
jQuery中$(function() {});问题详解
2015/08/10 Javascript
Bootstrap jquery.twbsPagination.js动态页码分页实例代码
2017/02/20 Javascript
无法获取隐藏元素宽度和高度的解决方案
2017/03/07 Javascript
使用bootstrap插件实现模态框效果
2017/05/10 Javascript
解决ionic和angular上拉加载的问题
2017/08/03 Javascript
基于jQuery选择器之表单对象属性筛选选择器的实例
2017/09/19 jQuery
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
weui中的picker使用js进行动态绑定数据问题
2019/11/06 Javascript
javascript实现数字时钟效果
2021/02/06 Javascript
python网络编程学习笔记(三):socket网络服务器
2014/06/09 Python
Python获取数据库数据并保存在excel表格中的方法
2019/06/12 Python
用CSS3将你的设计带入下个高度
2009/08/08 HTML / CSS
纯css3实现效果超级炫的checkbox复选框和radio单选框
2014/09/01 HTML / CSS
英国家庭珠宝商:T. H. Baker
2018/02/08 全球购物
美国高级音响品牌:Master&Dynamic
2018/07/05 全球购物
英国在线电子和小工具商店:TecoBuy
2018/10/06 全球购物
Marlies Dekkers内衣法国官方网上商店:国际知名的荷兰内衣品牌
2019/03/18 全球购物
几道数据库的概念性面试题
2014/05/30 面试题
大学生的网上创业计划书
2013/12/31 职场文书
搞笑创意广告语
2014/03/17 职场文书
二年级小学生评语
2014/04/21 职场文书
青年标兵事迹材料
2014/08/16 职场文书
打架检讨书范文
2015/01/27 职场文书
课外活动总结
2015/02/04 职场文书
2015年五一劳动节慰问信
2015/03/23 职场文书
十二月早安励志心语大全
2019/12/03 职场文书
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
2021/06/22 Python
MySQL之MyISAM存储引擎的非聚簇索引详解
2022/03/03 MySQL
Web应用开发TypeScript使用详解
2022/05/25 Javascript