releasecapture 函数,SetCapture

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: