| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1294 人关注过本帖
标题:js的setcapture方法
只看楼主 加入收藏
jsRank
Rank: 5Rank: 5
等 级:职业侠客
威 望:6
帖 子:69
专家分:303
注 册:2015-5-11
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:7 
js的setcapture方法
关于的IE的setcapture和releasecapture方法的实现原理是什么呢
2015-05-11 17:04
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8078
专家分:6657
注 册:2005-11-7
收藏
得分:10 
查MSND,对SetCapture()函数的说明为:“该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内。同一时刻只能有一个窗口捕获鼠标。如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口。”一开始我看这个解释误认为了只要在属于窗口里的一个线程调用了SetCapture(hWnd)把hWnd设为当前的窗口句柄,那么以后的所有窗口消息都会发到我们指定的那个窗口消息队列中。这样的理解是错误的!!!在你调用SetCapture(hWnd)函数后,只是能够捕获onmousedown、onmouseup、onmousemove、onclick、ondblclick、onmouseover和onmouseout鼠标消息,但是一般我们是捕获onmousemove和onmouseup两个消息。需要只注意最后一句“如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口”的解释,就是即使你在一个窗口线程里对了了SetCapture(),但你在别的窗口的上点击了同样会把鼠标消息发个这个窗口而是我们通过调用SetCapture()设定那个窗口。因为当鼠标在窗口外面点击的时候,被点击的窗口获得焦点,原来的SetCapture()也就失效了。

    当你不在需要继续获得鼠标消息就要应该调用ReleaseCapture()释放掉,否则别的线程想调用就会失败。记住:SetCapture()和ReleaseCapture()必须成对呈现。

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2015-05-11 21:06
jsRank
Rank: 5Rank: 5
等 级:职业侠客
威 望:6
帖 子:69
专家分:303
注 册:2015-5-11
收藏
得分:0 
其实我想知道的是setcapture是怎么实现的,因为我发现该方法是可以绑定到指定窗口的,而chrome下面是不支持该方法的,mousemove的时候,只能将其绑定在document上面(真的有点强人所难了)进行捕获,完全没有ie下面运行的完美,百度地图的截图功能在chrome下面运行时就因为绑定到document上面,存在着严重bug,我是想借鉴ie的setcapture写一个兼容的捕获鼠标的方法,可以将其绑定到指定对象,而不是绑定到document上面。

追求卓越,成功就会跟着你走!
2015-05-13 09:49
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8078
专家分:6657
注 册:2005-11-7
收藏
得分:0 
我还真没用过这个方法,不过既然你说谷歌能绑定到document上,那就证明谷歌支持这个方法,这个方法应该比较难实现,那能不能换种绑定方式呢
document.SetCapture.bind(window);
或者
document.SetCapture.call(window,[...]);

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2015-05-13 14:10
jsRank
Rank: 5Rank: 5
等 级:职业侠客
威 望:6
帖 子:69
专家分:303
注 册:2015-5-11
收藏
得分:0 
回复 4楼 冰镇柠檬汁儿
我说的绑定到document,是指将mouseover事件绑定到document上,例如:document.addEventListener('mouseover',callback,true); 这种方式不能将具体需要移动的对象绑定mouseover事件,只能在回调中对需要移动的对象进行处理。由于document中包含的元素比较多,包括图片资源,需要移动的div的父元素(如果该父元素仍然可以移动,父元素移动时子元素不移动,子元素移动时父元素不移动,这时如果绑定到document上面显示没有绑定到具体的元素上面方便)

追求卓越,成功就会跟着你走!
2015-05-14 13:55
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8078
专家分:6657
注 册:2005-11-7
收藏
得分:0 
帮不了你了,这个方法我真没接触过

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2015-05-14 22:27
jsRank
Rank: 5Rank: 5
等 级:职业侠客
威 望:6
帖 子:69
专家分:303
注 册:2015-5-11
收藏
得分:0 
回复 6楼 冰镇柠檬汁儿
Thanks, anyway.

追求卓越,成功就会跟着你走!
2015-05-15 10:11
快速回复:js的setcapture方法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017644 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved