jQuery高级

 一、动画效果

  常用的几种效果都是没有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 类型,那么当从服务器接收到数据时,实际上是用了

  queue(name,[callback]): 当只传入一个参数时, 它返回并指向第一个匹配元素的队列(将是一个函数数组,队列名默认是fx); 当有两个参数传入时, 第一个参数还是默认为fx的的队列名, 第二个参数又分两种情况, 当第二个参数是一个函数时, 它将在匹配的元素的队列最后添加一个函数. 当第二个参数是一个函数数组时,它将匹配元素的队列用新的一个队列来代替(函数数组)。该函数只是添加了队列,并不会对队列执行,要执行必须使用dequeue。

  dequeue(name): 这个好理解, 就是从队列最前端移除一个队列函数, 并执行它。所以如果不调用它,队列中的函数不会得到执行的机会。当调用 .dequeue() 时,会从序列中删除下一个函数,然后执行它。该函数反过来会(直接或间接地)引发对 .dequeue() 的调用,这样序列才能继续下去。

  clearQueue([queueName]):这是1.4新增的方法. 清空对象上尚未执行的所有队列. 参数可选,默认为fx. 但很多人觉得这个方法没多大用, 用queue()方法传入两个参数的第二种参数即可实现clearQueue方法。

  要先理解,队列中的函数就是移除一个执行一个。也可以自己创建队列:

var _slideFun=[ 
function(){$('.one').delay(500).animate({top:'+=270px'},500,_takeOne);}, 
function(){$('.two').delay(300).animate({top:'+=270px'},500,_takeOne);}, 
function(){$('.three').delay(300).animate({top:'+=270px'},500,_takeOne);}, 
function(){$('.four').delay(300).animate({top:'+=270px'},500,_takeOne);}, 
function(){$('.five').delay(300).animate({top:'+=270px'},500,_takeOne);}, 
function(){$('.six').delay(300).animate({top:'+=270px'},500,_takeOne);}, 
function(){$('.seven').delay(300).animate({top:'+=270px'},500,function(){ 
alert('按序落体运动结束! Yeah!'); 
});} 
]; 
$('#demo').queue('slideList',_slideFun); 
var _takeOne=function(){ 
$('#demo').dequeue('slideList'); 
}; 
_takeOne(); 

  1. 新建一个数组,把动画函数依次放进去(这样更改顺序,新加动画是不是方便多了?); 
  2. 用queue将这组动画函数数组加入到slideList队列中; 
  3. 用dequeue取出slideList队列中第一个函数, 并执行它; 
  4. 初始执行第一个函数. 

转载于:https://www.cnblogs.com/guangshan/p/4223771.html

你可能感兴趣的:(json,javascript,ruby)