当前位置: 首页 > 工具软件 > JavaScriptMVC > 使用案例 >

JavaScriptMVC之专用事件

潘向明
2023-12-01

JavaScriptMVC提供了一串很有用的专用事件。

下述的只是一个简短的概述。

默认事件

让你给一个事件提供默认的行为,它使用event.preventDefault()可以防止事件冒泡。 这个对像下述的配件提供DOM的API是非常有用的。

$("#tabs").delegate(".panel","default.open", function(){
  $(this).show()
})
 



销毁事件

如果一个元素从页面删除,也要把它绑定过的事件销毁。

$("#contextMenu").bind("destroyed", function(){
  // cleanup
  $(document.body).unbind("click.contextMenu");
})
 



拖拉和投放事件

 
使用事件委托监听拖放事件。

$(".item").live("dragover", function(ev, drag){
  // let user know that the item can be dropped
  $(this).addClass("canDrop");
}).live("dropover", function(ev, drop, drag){
  // let user know that the item can be dropped on
  $(this).addClass('drop-able')
})
 

 


注:下述的所有事件在使用之前,需要引入这些事件的插件文件,都在jquery/event这个文件夹下面。


1、拖拉

jQuery提供拖拉事件为一个专用事件。一个jQuery.Drag实例是创建一个拖拉且把它当成参数传递给拖拉事件的回调函数。 在拖拉事件中调用函数,你可以报出这个拖拉的行为。

拖拉事件

这个拖拉插件允许你监听以下事件:

1、dragdown 鼠标按下
2、draginit 拖拉监听开始
3、dragmove 拖拉元素移动
4、dragend 拖拉元素静止移动
5、dragover 拖拉对象经过一个落脚点
6、dragout 拖拉对象移出一个落脚点

只要绑定或者委托给这些事件的其中一个,你就可以让这个元素拖拉。你可以在拖动的回调中通过调用方法来修改拖拉的行为。

//makes the drag vertical
$(".drags").delegate("draginit", function(event, drag){
  drag.vertical();
})
//gets the position of the drag and uses that to set the width
//of an element
$(".resize").delegate("dragmove",function(event, drag){
  $(this).width(drag.position.left() - $(this).offset().left   )
})
 


拖拉对象

拖拉对象是通过拖拉事件传递给事件的回调函数。通过调用方法来改变这个拖拉对象的属性,
你可以知道拖拉的行为。

拖拉对象的属性和方法:

1、cancel 停止拖拉的监听,也就是不能拖拉

2、ghost 就是拖拉元素的副本

3、horizontal 拖拉元素只能在水平方向拖动

4、location 拖拉元素在界面上坐标

5、mouseElementPosition 鼠标在拖拉元素上的坐标

6、only 只拖拉,不投放

7、representative 拖拉这个元素的代码元素

8、revert 拖拉元素以动画的效果返回原始坐标处

9、vertical 拖拉元素只能在垂直方向拖动

10、limit 拖拉元素只能在一个元素内拖动

11、scrolls 拖拉元素拖动时让一个滚动条滚动。

例子:

steal("jquery/event/drag",
    "jquery/event/drag/scroll",
    "jquery/event/drag/limit").then(function($){
//drag with bind
$("#drag").bind("draginit",function(){})

//delegated drags
$("#delegate").delegate(".handle","draginit",function(){})

//ghost
$("#ghost").bind("draginit",function(ev, drag){drag.ghost()})

//revert
$(".revert").bind("draginit",function(ev, drag){ drag.revert() })

//limit
$("#container").delegate(".handle","draginit",function(ev, drag){drag.limit( $("#container") )})

//representative
$("#repdrag").bind("draginit",function(ev, drag){drag.representative($("#representative"),50,30)})

//horizontal
$("#horizontal").bind("draginit",function(ev, drag){drag.horizontal()})

//distance
$('#distance').bind('dragdown', function(ev, drag){
    ev.preventDefault();
    drag.distance(50)
})

//scrolls
$("#scroll-drag").bind("draginit",function(ev, drag){drag.scrolls( $("#scrollarea") )})

// allow form elements to be selected
$("#form-drag").bind("dragdown",function(ev, drag){
    if(ev.target.nodeName.toLowerCase() == 'input'){
        drag.cancel();
    }
})
})
 


2、投放

jQuery提供投放事件为专用事件。 绑定一个投放事件,在对应的拖拉对象执行期间过程中将会被调用你定义的回调函数。

投放事件 所有投放事件被调用用了3个参数,对应事件,一个投放实例,和特定的拖拉对象。 这里是投放可用的事件:
1、dropinit 拖拉监听已经开始,投放坐标开始计算。
2、dropover 一个拖拉对象经过一个投放元素
3、dropout 一个拖拉对象移动一个投入元素
4、dropmove 一个拖拉对象经过一个投放元素,重复调用元素的移动。
5、dropon 一个拖拉对象释放在一个投放元素上
6、dropend 拖拉监听完成

例子:

//创建一个可拖动的拖拉对象
$('.handle').live("draginit", function(){})
           
//添加投放对象来监听拖拉对象进入,经过,投放等动作
$('#dropout')
  .delegate(".dropout","dropover", function(){ $(this).addClass('over') })
  .delegate(".dropout","dropout", function(){ $(this).removeClass('over') })
  .bind("dropover", function(){ $(this).addClass('over') })
  .bind("dropout", function(){ $(this).removeClass('over') });
   
//关闭dropout/dropover
$("#undelegate").click(function(){
    $('#dropout').undelegate(".dropout","dropover");
    $('#dropout').undelegate(".dropout","dropout");
})
   
//添加dropmove/dropon
var count = 0
$('.dropmove')
  .bind('dropmove', function(){
    $('.count').text(count++)
  })
  .bind('dropon', function(){
    $(this).text("Dropped on!")
  })
 


 
3、暂停/恢复

添加jquery/event/pause插件就通过暂停和恢复事件。

$('#todos').bind('show', function(ev){
  ev.pause();

  $(this).load('todos.html', function(){
    ev.resume();
  });
})
 



当一个事件暂停后,停止调用这个事件的其它事件句柄。但是当恢复这个事件后, 它会将调用暂停后的其它事件句柄。 jquery/event/pause插件是在default事件插件上实现的,让我们更加容易使用异步API创建控件。

在这里我们还要讲到一个函数:
triggerAsync:当触发一个事件已经完成DOM冒泡且preventDefault没有执行。

$('panel').triggerAsync('show', function(){
    $('#panel').show();
},function(){
    $('#other').addClass('error');
});
 



4、default事件

允许你执行default动作像一个事件。
监听一个default事件很简单,只是给事件加一个default的前缀即可,使用方法与一般事件一样:

$("div").bind("default.show", function(ev){ ... });
$("ul").delegate("li","default.activate", function(ev){ ... });
 




5、destroyed
给元素提供销毁事件。

当元素从DOM销毁后销毁事件会被触发。销毁事件不冒泡,所以不能使用live或者delegate来
绑定销毁事件。

$(".foo").bind("destroyed", function(){
   //clean up code
})
 



6、Hover

提供委托悬挂事件。 当鼠标移动到一个元素上停止一定时间周期会产生一个悬挂事件。你可以监听或者配置悬挂下述事件:

1、hoverinit 鼠标进入元素时调用,使用这个事件去定制delay和distance。
2、hoverenter 一个元素开始悬挂
3、hovermove 鼠标移动到一个已经悬挂的元素上。
4、hoverleave 鼠标离开悬挂元素。

常常,我们如果不使用其它页面UI的话,就会碰到按钮,表格行等元素,当鼠标经过或者悬挂在它们上面时,需要做一些样式的变化, 来达到醒目的效果。所以这个悬挂事件是很有用的。下述给出一个鼠标经过表格行时,行背景颜色变化。

示例代码:

$('tr').bind("hoverenter",function(){
  $(this).addClass("hovering");
})
$('tr').delegate("hoverleave",function(){
  $(this).removeClass("hovering");
})
 



代码当鼠标悬挂在表格某一行中,添加hovering样式,离开后删除hovering样式。

 

 类似资料: