一、动画效果
常用的几种效果都是没有easing参数的,也即动画只能swing。$(selector).animate(styles,speed,easing,callback)中是有easing参数的,jQuery中默认只有两种,linear和swing(摆动),默认情况下是swing。若要使用更多参数,可以使用jquery.easing插件。
jQuery.easing.def = "string";可以使用string覆盖默认的swing。
使用该插件之后,有两种调用方式,1、直接在原来的参数后面添加一个easing参数,即slideDown(speed,easing,callback)这种形式。
2、不添加easing参数,而是直接修改speed参数,并合并callback参数。speed参数变为如下形式:
{ duration: 1000, easing: method, complete: callback }
第一个持续时间,第二个easing参数,第三个callback参数。
3、甚至还可以这样
$(element).animate({ width:[200, 'easeInOutBack'], height:[200, 'easeOutBack'] },1000,callback);
对每一个变化的css使用不同的easing参数。
easing有以下几种参数:easing:指定动画效果,Easing js提供多种动画效果,有匀速运动、变加速运动、缓冲波动效果,它们是:linear,swing,jswing,easeInQuad,easeOutQuad,easeInOutQuad,easeInCubic, easeOutCubic,easeInOutCubic,easeInQuart,easeOutQuart,easeInOutQuart, easeInQuint,easeOutQuint,easeInOutQuint,easeInSine,easeOutSine, easeInOutSine,easeInExpo,easeOutExpo,easeInOutExpo,easeInCirc, easeOutCirc,easeInOutCirc,easeInElastic,easeOutElastic,easeInOutElastic, easeInBack,easeOutBack,easeInOutBack,easeInBounce,easeOutBounce,easeInOutBounce.
源码:可以参考源码写自己的easing。
二、动态绑定事件
bind(),on(),one()。不推荐用bind(),on()是首选方法,one()是执行一次的事件。
1、$(selector).bind(event,data,function,map)。
参数 | 描述 |
event | 必需。规定添加到元素的一个或多个事件。由空格分隔多个事件值。必须是有效的事件。 |
data | 可选。规定传递到函数的额外数据。需要按对象形式加入{a:1,b:2}。 |
function | 必需。规定当事件发生时运行的函数。function可以有一个event参数,event.data可以取到上面的值。 |
map | 规定事件映射 ({event:function, event:function, ...}),包含要添加到元素的一个或多个事件,以及当事件发生时运行的函数。 |
绑定多个事件,处理处理程序只有一个:
$('#foo').bind('mouseenter mouseleave', function() { $(this).toggleClass('entered'); });
同时绑定多个事件与事件处理程序:
$("button").bind({ click:function(){$("p").slideToggle();}, mouseover:function(){$("body").css("background-color","red");}, mouseout:function(){$("body").css("background-color","#FFFFFF");} })
通过返回false来取消默认的行为并阻止事件起泡,但不阻止绑定在该元素上的其他事件。(这里注意一下,如果是直接onclick方法中return false,则不能阻止事件冒泡,只能阻止默认事件。)
$("form").bind("submit", function() { return false; })
通过使用 preventDefault() 方法只取消默认的行为。
$("form").bind("submit", function(event){ event.preventDefault(); });
通过使用 stopPropagation() 方法只阻止一个事件冒泡。
$("form").bind("submit", function(event){ event.stopPropagation(); });
通过使用stopImmediatePropagation()方法,阻止其他事件处理程序被调用,阻止该元素的次优先级程序及所有冒泡事件,但不阻止默认行为。
$("form").bind("submit", function(event){ event.stopImmediatePropagation(); });
2、$(selector).unbind(event,function,eventObj)。
该方法能够移除所有的或被选的事件处理程序,或者当事件发生时终止指定函数的运行。
该方法也可以通过 event 对象取消绑定的事件处理程序。该方法也用于对自身内部的事件取消绑定(比如当事件已被触发一定次数之后,删除事件处理程序)。
如果未规定参数,则 unbind() 方法会删除指定元素的所有事件处理程序。unbind() 方法适用于任意由 jQuery 添加的事件处理程序。
3、$(selector).on(event,childSelector,data,function,map)。on() 方法是 bind()、live() 和 delegate() 方法的新的替代品。
参数 | 描述 |
---|---|
event | 必需。规定要从被选元素移除的一个或多个事件或命名空间。由空格分隔多个事件值。必须是有效的事件。 |
childSelector | 可选。规定只能添加到指定的子元素上的事件处理程序(且不是选择器本身,比如已废弃的 delegate() 方法)。 一个选择器字符串用于过滤器的触发事件的选择器元素的后代。如果选择的< null或省略,当它到达选定的元素,事件总是触发。 |
data | 可选。规定传递到函数的额外数据。同上 |
function | 可选。规定当事件发生时运行的函数。 |
map | 规定事件映射 ({event:function, event:function, ...}),包含要添加到元素的一个或多个事件,以及当事件发生时运行的函数。 |
基本同上,拓展:$("form").bind("submit", false);可以直接写false。同时,使用map时后面也可以跟参数,只用使用map替换event参数即可。
4、$(selector).off(event,selector,function(eventObj),map)。off() 方法是 unbind()、die() 和 undelegate() 方法的新的替代品。该方法给 API 带来很多便利,我们推荐使用该方法,它简化了 jQuery 代码库。
参数同上,注意如果要移除事件,处理函数必须用函数对象传递,不能使用匿名函数传递。也可以使用event移除事件。
5、$(selector).one(event,data,function)。仅执行一次的事件,执行完后自动删除。
6、$(selector).live(event,data,function)。在版本 1.9 中被移除。
live() 方法为被选元素添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。
通过 live() 方法添加的事件处理程序适用于匹配选择器的当前及未来的元素(比如由脚本创建的新元素)。
7、$(selector).die(event,function)。在版本 1.9 中被移除。
用于移除使用live()添加的事件。
8、$(selector).delegate(childSelector,event,data,function)。不推荐使用。
为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。使用 delegate() 方法的事件处理程序适用于当前或未来的元素(比如由脚本创建的新元素)。
9、$(selector).undelegate(selector,event,function)。用于删除使用delegate()添加的事件,不推荐使用。
方法移除一个或多个由 delegate() 方法添加的事件处理程序。
10、error事件。error() 方法在 jQuery 版本 1.8 中被废弃。可以使用bind('error', handler) 。
三、动态触发事件
使用代码动态触发事件,可以直接使用$(selector).event();来触发,不带参数。
使用triger来触发事件。
$(selector).trigger(event,eventObj,param1,param2,...);
其中event是事件名,参数是可以传递进去的参数,参数要用数组形式。用于自定义事件,即使是自定义事件,事件处理函数的第一个参数也必须是event,用于表明点击事件的对象。
event和eventObj两者不同时出现。eventObj是事件类型,可以使用jQuery.Event对象创建,可以将数据放进这个对象,并且这个对象可以被触发的事件处理函数获取到。详细的Event构造方法参考jQuery API。
也可以使用triggerHandler来触发事件。与trigger不同,trigger() 也触发事件的默认行为(比如表单提交),triggerHandler不触发默认事件。
四、默认事件
事件默认行为:当一个事件发生的时候浏览器自己会默认做的事情。
怎么阻止?当前这个行为是什么事件触发的,然后在这个事件的处理函数中使用return false;,之后浏览器便不会执行默认的操作了。
事件默认行为实例:(自定义右键菜单)
无标题文档
五、对于html元素中直接的事件处理
οnclick="functionName()",这里其实是把onclick后面的JavaScript语句加入一个事件函数中。使用后面的代码进行测试:
当按钮被单击时触发函数。此函数获取onclick的全部扩展属性,通过DOM的attribute获取属性内容文本。
结果为:
function onclick(event){ alert(123); }
相当于自动创建了一个onclick函数,令后面文本内容列入此函数中。可以则拓展测试,使用不同语句加入时间处理函数后,该属性会获得什么内容。
当onclick函数返回false时,相当于禁止此事件。
六、jQuery Ajax
Ajax方法总览:
方法 | 描述 |
---|---|
$.ajax() | 执行异步 AJAX 请求 |
$.ajaxPrefilter() | 在每个请求发送之前且被 $.ajax() 处理之前,处理自定义 Ajax 选项或修改已存在选项 |
$.ajaxSetup() | 为将来的 AJAX 请求设置默认值 |
$.ajaxTransport() | 创建处理 Ajax 数据实际传送的对象 |
$.get() | 使用 AJAX 的 HTTP GET 请求从服务器加载数据 |
$.getJSON() | 使用 HTTP GET 请求从服务器加载 JSON 编码的数据 |
$.getScript() | 使用 AJAX 的 HTTP GET 请求从服务器加载并执行 JavaScript |
$.param() | 创建数组或对象的序列化表示形式(可用于 AJAX 请求的 URL 查询字符串) |
$.post() | 使用 AJAX 的 HTTP POST 请求从服务器加载数据 |
ajaxComplete() | 规定 AJAX 请求完成时运行的函数,Ajax 事件 |
ajaxError() | 规定 AJAX 请求失败时运行的函数,Ajax 事件 |
ajaxSend() | 规定 AJAX 请求发送之前运行的函数,Ajax 事件 |
ajaxStart() | 规定第一个 AJAX 请求开始时运行的函数,Ajax 事件 |
ajaxStop() | 规定所有的 AJAX 请求完成时运行的函数,Ajax 事件 |
ajaxSuccess() | 规定 AJAX 请求成功完成时运行的函数,Ajax 事件 |
load() | 从服务器加载数据,并把返回的数据放置到指定的元素中 |
serialize() | 编码表单元素集为字符串以便提交 |
serializeArray() | 编码表单元素集为 names 和 values 的数组 |
虽然方法很多,但是大多数都是对$.ajax()方法的简单化处理。下面针对$.ajax()进行详解。
1)、$.ajax({name:value, name:value, ... })
名称 | 值/描述 |
---|---|
async | 布尔值,表示请求是否异步处理。默认是 true。 |
beforeSend(xhr) | 发送请求前运行的函数。如添加自定义 HTTP 头。这是一个 Ajax 事件。如果返回 false 可以取消本次 ajax 请求。 |
cache | 布尔值,表示浏览器是否缓存被请求页面。默认是 true。dataType 为 script 和 jsonp 时默认为 false。设置为 false 将不缓存此页面。 |
complete(xhr,status) | 请求完成时运行的函数(在请求成功或失败之后均调用,即在 success 和 error 函数之后)。status为描述请求类型的字符串。 |
contentType | 发送数据到服务器时所使用的内容类型。默认是:"application/x-www-form-urlencoded"。默认值适合大多数情况。如果你明确地传递了一个 content-type 给 $.ajax() 那么它必定会发送给服务器(即使没有数据要发送)。 |
context | 为所有 AJAX 相关的回调函数规定 "this" 值。 |
data | 规定要发送到服务器的数据。将自动转换为请求字符串格式。GET 请求中将附加在 URL 后。查看 processData 选项说明以禁止此自动转换。必须为 Key/Value 格式。如果为数组,jQuery 将自动为不同值对应同一个名称。如 {foo:["bar1", "bar2"]} 转换为 '&foo=bar1&foo=bar2'。 |
dataFilter(data,type) | 用于处理 XMLHttpRequest 原始响应数据的函数。data 是 Ajax 返回的原始数据,type 是调用 jQuery.ajax 时提供的 dataType 参数。函数返回的值将由 jQuery 进一步处理。 |
dataType | 预期的服务器响应的数据类型。 |
error(xhr,status,error) | 如果请求失败要运行的函数。有以下三个参数:XMLHttpRequest 对象、错误信息、(可选)捕获的异常对象。如果发生了错误,错误信息(第二个参数)除了得到 null 之外,还可能是 "timeout", "error", "notmodified" 和 "parsererror"。 |
global | 布尔值,规定是否为请求触发全局 AJAX 事件处理程序。默认是 true。设置为 false 将不会触发全局 AJAX 事件,如 ajaxStart 或 ajaxStop 可用于控制不同的 Ajax 事件。 |
ifModified | 布尔值,规定是否仅在最后一次请求以来响应发生改变时才请求成功。默认是 false。使用 HTTP 包 Last-Modified 头信息判断。在 jQuery 1.4 中,它也会检查服务器指定的 'etag' 来确定数据没有被修改过。 |
jsonp | 在一个 jsonp 中重写回调函数的字符串。这个值用来替代在 "callback=?" 这种 GET 或 POST 请求中 URL 参数里的 "callback" 部分,比如 {jsonp:'onJsonPLoad'} 会导致将 "onJsonPLoad=?" 传给服务器。 |
jsonpCallback | 在一个 jsonp 中规定回调函数的名称。这个值将用来取代 jQuery 自动生成的随机函数名。这主要用来让 jQuery 生成度独特的函数名,这样管理请求更容易,也能方便地提供回调函数和错误处理。你也可以在想让浏览器缓存 GET 请求的时候,指定这个回调函数名。 |
password | 规定在 HTTP 访问认证请求中使用的密码。用于响应 HTTP 访问认证请求的密码. |
processData | 布尔值,规定通过请求发送的数据是否转换为查询字符串。默认是 true。默认情况下,通过data选项传递进来的数据,如果是一个对象(技术上讲只要不是字符串),都会处理转化成一个查询字符串,以配合默认内容类型 "application/x-www-form-urlencoded"。如果要发送 DOM 树信息或其它不希望转换的信息,请设置为 false。 |
scriptCharset | 规定请求的字符集。只有当请求时 dataType 为 "jsonp" 或 "script",并且 type 是 "GET" 才会用于强制修改 charset。通常只在本地和远程的内容编码不同时使用。 |
success(result,status,xhr) | 当请求成功时运行的函数。参数:由服务器返回,并根据 dataType 参数进行处理后的数据;描述状态的字符串。 |
timeout | 设置本地的请求超时时间(以毫秒计)。此设置将覆盖全局设置。 |
traditional | 布尔值,规定是否使用参数序列化的传统样式。如果你想要用传统的方式来序列化数据,那么就设置为 true。 |
type | 规定请求的类型(GET 或 POST)。注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分浏览器支持。 |
url | 规定发送请求的 URL。默认是当前页面。 |
username | 规定在 HTTP 访问认证请求中使用的用户名。用于响应 HTTP 访问认证请求的用户名。 |
xhr | 用于创建 XMLHttpRequest 对象的函数。需要返回一个 XMLHttpRequest 对象。默认在 IE 下是 ActiveXObject 而其他情况下是 XMLHttpRequest 。用于重写或者提供一个增强的 XMLHttpRequest 对象。 |
关于dataType:预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如 XML MIME 类型就被识别为 XML。在 1.4 中,JSON 就会生成一个 JavaScript 对象,而 script 则会执行这个脚本。随后服务器端返回的数据会根据这个值解析后,传递给回调函数。可用值:
- "xml": 返回 XML 文档,可用 jQuery 处理。
- "html": 返回纯文本 HTML 信息;包含的 script 标签会在插入 dom 时执行。
- "script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了 "cache" 参数。注意:在远程请求时(不在同一个域下),所有 POST 请求都将转为 GET 请求。(因为将使用 DOM 的 script标签来加载)
- "json": 返回 JSON 数据 。
- "jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
- "text": 返回纯文本字符串
$.ajax() 函数依赖服务器提供的信息来处理返回的数据。如果服务器报告说返回的数据是 XML,那么返回的结果就可以用普通的 XML 方法或者 jQuery 的选择器来遍历。如果见得到其他类型,比如 HTML,则数据就以文本形式来对待。
通过 dataType 选项还可以指定其他不同数据处理方式。除了单纯的 XML,还可以指定 html、json、jsonp、script 或者 text。
其中,text 和 xml 类型返回的数据不会经过处理。数据仅仅简单的将 XMLHttpRequest 的 responseText 或 responseHTML 属性传递给 success 回调函数。
注意:我们必须确保网页服务器报告的 MIME 类型与我们选择的 dataType 所匹配。比如说,XML的话,服务器端就必须声明 text/xml 或者 application/xml 来获得一致的结果。
如果指定为 html 类型,任何内嵌的 JavaScript 都会在 HTML 作为一个字符串返回之前执行。类似地,指定 script 类型的话,也会先执行服务器端生成 JavaScript,然后再把脚本作为一个文本数据返回。
如果指定为 json 类型,则会把获取到的数据作为一个 JavaScript 对象来解析,并且把构建好的对象作为结果返回。为了实现这个目的,它首先尝试使用 JSON.parse()。如果浏览器不支持,则使用一个函数来构建。
JSON 数据是一种能很方便通过 JavaScript 解析的结构化数据。如果获取的数据文件存放在远程服务器上(域名不同,也就是跨域获取数据),则需要使用 jsonp 类型。使用这种类型的话,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的 URL 后面。服务器端应当在 JSON 数据前加上回调函数名,以便完成一个有效的 JSONP 请求。如果要指定回调函数的参数名来取代默认的 callback,可以通过设置 $.ajax() 的 jsonp 参数。
注意:JSONP 是 JSON 格式的扩展。它要求一些服务器端的代码来检测并处理查询字符串参数。
如果指定了 script 或者 jsonp 类型,那么当从服务器接收到数据时,实际上是用了