`

JavaScriptMVC之专用事件

阅读更多

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样式。

 

0
0
分享到:
评论

相关推荐

    JavaScriptMVC之实战

    NULL 博文链接:https://lyndon-lin.iteye.com/blog/1556095

    javascriptmvc3.0.5

    上传了一半的javascriptmvc3.0.5,这个是【下】

    javascriptmvc-3.3.zip

    JavaScriptMVC是一个全面的JavaScript应用程序开发框架,专注于构建大型、可维护的前端应用。这个压缩包"javascriptmvc-3.3.zip"包含了该框架的3.3版本。JavaScriptMVC以其模块化、可测试和高性能的特点,深受开发者...

    MVC框架 JavaScriptMVC.zip

    JavaScriptMVC是一个强大的JavaScript MVC(Model-View-Controller)框架,专为构建复杂且高性能的前端Web应用而设计。这个框架旨在提供一套完整的工具集,包括数据管理、视图渲染、路由控制以及测试支持,从而使得...

    javaScriptMVC 开源框架 第一部分

    JavaScriptMVC的构建离不开jQuery,一个广泛使用的JavaScript库,简化了DOM操作、事件处理、动画和Ajax交互。jQuery的使用使得JavaScriptMVC能够快速、高效地操作页面元素,提高了开发效率。 **核心组件** ...

    javascriptmvc-3.2.4.zip

    在JavaScriptMVC中,控制器处理DOM事件,确保应用响应用户的交互。 JavaScriptMVC 3.2.4版本可能包含以下组件: - **jQueryMX**:扩展了jQuery库,提供更强大的选择器、遍历和操作DOM的功能,以及对MVC模式的支持...

    javascriptmvc

    它接收来自视图的事件,然后根据需要更新模型,或者指示视图进行相应的改变。控制器确保数据流向的单向性,避免了直接在视图和模型之间建立双向绑定,从而降低复杂性。 **JavaScript MVC框架** 一些知名的...

    从JavaScriptMVC开始如何完成项目之创建应用程序

    这篇博客文章“从JavaScriptMVC开始如何完成项目之创建应用程序”可能是指导开发者如何使用特定的JavaScript MVC框架或库来构建一个完整的应用程序。 在JavaScript MVC中: 1. **模型(Model)**:负责处理和管理...

    从JavaScriptMVC开始如何完成项目之压缩文件和生成帮助文档

    在“从JavaScriptMVC开始如何完成项目之压缩文件和生成帮助文档”这个主题中,我们将探讨如何利用该框架进行项目开发,特别是涉及到的压缩文件处理和生成帮助文档这两个关键环节。 一、压缩文件 在项目开发中,压缩...

    javascriptmvc-3.0.5最新包

    javascriptmvc3.0.5,文件大于20MB,分成两个卷

    谈谈JavaScriptMVC模式共3页.pdf.zip

    当数据发生变化时,Model会触发事件通知其他组件,保持数据的一致性。例如,一个用户列表Model可能会包含添加、删除或修改用户的功能,并在执行这些操作后通知视图进行更新。 **View(视图)** 视图层是用户与应用...

    JavaScriptMVC框架Mithril.zip

    Mithril.js 是一个客户端的 JavaScript MVC 框架。可将应用分成数据层、UI层和控制层。Mithril 压缩后只有 3kb 左右。API 提供一个模板引擎,带 DOM diff 实现,支持路由和组合。 示例代码: ...

    JavascriptMVC代码

    例如,Backbone.Model提供了基本的数据管理和事件触发机制。 2. **View**:View层负责展示数据,它与Model紧密相连,当Model发生变化时,View会自动更新以反映这些变化。这得益于双向数据绑定技术,如AngularJS中的...

    javaScriptMVC 开源框架 第二部分

    在JavaScript MVC框架中,jQuery通常作为基础库来提供DOM操作和事件处理等功能。利用jQuery的便利性,开发者可以快速响应用户操作,同时避免了与DOM的直接复杂交互。此外,该框架还可能包含其他工具和库,如...

    JavaScriptMVC:JavaSriptMVC 高级编程课程

    JavaScriptMVC基于jQuery库,利用jQuery的强大DOM操作和事件处理能力,同时扩展了jQuery的功能,提供了更完善的MVC架构和工具集。 3. **Model管理** JavaScriptMVC的模型层(`js.Model`)提供数据绑定、观察者...

    javaScriptMVC 开源框架 第三部分(相关资料和例子)

    在"javascriptMVC 相关资料.docx"文档中,可能会包含以下知识点: 1. **MVC概念**:解释模型(Model)、视图(View)和控制器(Controller)的基本职责。模型处理数据和业务逻辑,视图负责用户界面的展示,而控制器...

    JavaScriptMVC框架PK:Angular、Backbone、CanJS与Ember

    :选择JavaScriptMVC框架很难。一方面要考虑的因素非常多,另一方面这种框架也非常多,而要从中选择一个合适的,还真得费一番心思。本文对JavaScriptMVC框架Angular、Backbone、CanJS和Ember作了比较,供大家参考。...

    JavaScriptMVC 测试框架 v2.2

    内容索引:脚本资源,Ajax/JavaScript,JavaScriptMVC JavaScriptMVC 是一个功能强大的 JavaScript framework. 也是一个很棒的JavaScript测试框架,它同样能提高开发的速度。JavaScriptMVC应用了模型-视图-控制器架构...

Global site tag (gtag.js) - Google Analytics