releasecapture 函数,SetCapture
capture的作用是将所有后续的鼠标事件发送给这个对象,releaseCapture是返回鼠标事件,这些事件将由文档、窗口、对象等处理。这样就保证了在拖动的过程中,不会受到其他元素的干扰。
-
另外,还有一点很重要的是,在Win32上,鼠标移动的事件并不是连续的,也就是说,并不是我们每移动鼠标指针1px,就会发生一次mouse move,windows会定期检查鼠标的位置变化,产生mousemove事件。
所以,如果是一个非常小的页面对象,比如一个直径为5px的点,如果没有setCapture和releaseCapture,那么在鼠标被按住之后,有可能鼠标移开了,但是点仍然在原地,因为下一个mousemove事件不再发送给这个点对象。
web开发和windows开发最大的区别就是windows开发是有状态的,而web开发是无状态的。在windows中,所有操作都可以由程序控制,除非ctrl alt del被强制执行;但是,web操作不同。甚至在执行重要操作时,只要用户点击浏览器关闭按钮,之前的操作结果就会化为乌有。虽然可以在onunload事件中添加一些代码,让用户选择是否退出,但是并不能从根本上解决问题!
前几天在网上看到setCapture方法,了解了一下。一般是这个意思。当在IE文档的某个区域使用该方法并编写了onclick或onmouse***等相关鼠标事件方法时,那么它会监控相应的鼠标操作,即使你的鼠标移出IE,它也能捕捉到。如果你在一个div的onclick事件中写了一个alert命令,当你点击关闭按钮时,它也会弹出alert窗口。releaseCapture方法与setCapture方法相反,释放鼠标进行监视。
利用这个特性,我们可以延迟IE的关闭窗口等破坏性操作,在破坏性操作执行之前处理一些重要的操作。
遗憾的是,setCapture和releaseCapture不支持键盘事件。它们只适用于onmousedown、onmouseup、onmousemove、onclick、ondblclick、onmouseover和onmouseout等鼠标事件。
下面是一个小例子,如果我们想保护divMain(一个div元素)的内容:
1.在divMain上执行setCapture方法:
document . getelementbyid( div main )。set capture();
2.添加一个按钮btnChange在setCapture和releaseCapture之间切换,以定义一个全局变量;
var isFreeze=true
3.在btnChange的onclick事件中,添加以下代码:
复制代码如下:
函数change_capture(obj) {
isFreeze=!isFreeze
if(isFreeze) {
obj.value= releaseCapture
document . getelementbyid( div main )。set capture();
}否则{
obj.value= setCapture
Alert(保存!);//可以执行重要的操作
document . getelementbyid( div main )。releaseCapture()。
}
}
在div的onclick事件中,添加以下代码:
复制代码如下:
函数click_func()
{
if(event . srcelement . id== div main )
{
警报(正在处理.);//常规操作
document . getelementbyid( div main )。set capture();
}
其他
{
if(isFreeze event.srcElement.id!=btnChange )
{
Alert (releaseCapture未执行,不能点击);
document . getelementbyid( div main )。set capture();
}
}
}
处理ALT F4并将以下代码添加到body的onkeydown事件中:
复制代码如下:
函数keydown_func()
{
if(event . key code==115 event . ALT key)//ALT F4
{
if(isFreeze)
{
Alert(保存!);//可以执行重要的操作
}
//window . showmodelessdialog( about:blank ,, dialog width:1px;dialog height:1px’);
//返回false
}
document . getelementbyid( div main )。set capture();
}
完整的代码如下:
复制代码如下:
超文本标记语言
头
标题
捕获和释放捕获的小应用程序
/标题
脚本
!-
var isFreeze=true
函数click_func() {
if(event . srcelement . id== div main ){
警报(正在处理.);//常规操作
文档。getelementbyid( div main ).set capture();
}否则{
if (isFreeze event.srcElement.id!=btnChange) {
警报(未执行释放捕获,不能点击);
文档。getelementbyid( div main ).set capture();
}
}
}
函数keydown_func() {
如果(事件。键码==115事件。ALT键)//ALT F4
{
if (isFreeze) {
警报(保存!);//可以执行重要操作
}
//窗口。showmodelessdialog( about:blank ,,对话框宽度:1px对话高度:1px’);
//返回错误的
}
文档。getelementbyid( div main ).set capture();
}
函数change_capture(obj) {
isFreeze=!冷冻
if (isFreeze) {
对象值= releaseCapture
文档。getelementbyid( div main ).set capture();
}否则{
obj.value= setCapture
警报(保存!);//可以执行重要操作
文档。getelementbyid( div main ).释放捕获().
}
}
//-
/脚本
/头
身体
div id=divMain
点一下工业管理学(工业工程)的菜单或者按钮看看:) 又或者工业管理学(工业工程)窗口外的地方
输入类型=按钮值=releaseCapture
id=btnChange
脚本语言=javascript
文档。getelementbyid( div main ).set capture();
/脚本
/div
/body
/html
关于爪哇岛描述语言中呼叫和应用函数的应用
我们经常在javascipt中的面向对象应用中遇到呼叫和应用函数;有时会被搞糊涂。其实它们可以改变函数或对象中的这保留字的值;这保留字的默认值就是这个类本身。举例说明:
复制代码代码如下:
!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www。w3。org/TR/XHTML 1/DTD/XHTML 1-过渡。 DTD
html xmlns= http://。w3。 org/1999/XHTML
头
meta http-equiv= Content-Type Content= text/html;charset=gb2312 /
脚本语言=javascript
测试={
值: default ,exec: function() {
警惕(这个。值);
}
}
函数hhh(obj) {
测试。exec();测试。执行。apply(obj);
}
/脚本
/头
身体
输入类型=按钮值=测试/
/body
/html
运行以上的页面就很快明白了。
呼叫和应用函数可以处理匿名函数
关于类的初始化应用如下:
复制代码代码如下:
Person=function() {
这个Init.apply(this,arguments);
};
Person.prototype={
第一:空,
last: null,
Init: function(first,last) {
this.first=首先
this.last=最后
},
全名:函数(){
返回这个。首先”“这个。最后;
},
fullNameReversed: function() {
返回这个.最后一个,这个.第一个
}
};
var s=新人2(creese ,杨);
alert(s .全名());
alert(s .全名反转());
呼叫和应用函数可以赋值函数内容(带匿名参数;但不触发)
关于函数绑定事件应用如下:
复制代码代码如下:
功能。原型。bindforevent=function(){
var __m=this,object=arguments[0],args=new Array();
for(var I=1;一。论据长度;i ){
参数。push(参数[I]);
}
返回函数(事件){
return __m.apply(object,[( event window.event)].concat(args));
}
}
呼叫和应用函数关于函数绑定参数应用如下:
复制代码代码如下:
功能。原型。bind=function(){
var __m=this,object=arguments[0],args=new Array();
for(var I=1;一。论据长度;i ){
参数。push(参数[I]);
}
返回函数(){
return __m.apply(object,args);
}
}
呼叫和应用函数功能是一样的;就是参数格式不同;fun.call(obj,arguments);应用的争论是数组形式;呼叫则是单数形式。
详细出处参考:http://www。。net/article/29932。html文件的后缀
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。