jQuery
jQuery动画
显示与隐藏
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="../js/jquery-1.8.2.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> $(function(){ $("#btn").toggle( //隐藏 function(){ //不设置限制就会很快 //$("img").hide(); //设置限制相对的慢 //$("img").hide("slow"); //设置毫秒数来控制快慢 $("img").hide(5000); }, //显示 function(){ //不设置限制就会很快 //$("img").show(); //设置限制相对的快 //$("img").show("fast"); //设置毫秒数 $("img").show(5000); } ); }) </script> </head> <body> <button id="btn">显示和隐藏</button> <br /> <img src="../img/星空一花.jpg" width="100px" height="100px" /> </body> </html>
复制
滑动
<script type="text/javascript"> $(function(){ $("#btn").toggle( function(){ //滑动消失 $("img").slideUp(5000); }, function(){ //滑动显现 $("img").slideDown(5000); } ); }) </script> <body> <button id="btn">滑动</button> <br /> <img src="../img/星空一花.jpg" width="100px" height="100px" /> </body>
复制
淡入淡出
show()和hide()方法与fadeIn()和fadeOut()方法相比较,相同之处是都切换元素的显示状态,不同之处在于,前者的动画效果使用元素的width与height属性都发生了变化,而后者仅是改变元素的透明度,并不修改其他属性。
<script type="text/javascript"> $(function(){ $("#btn").toggle( function(){ //淡出 $("img").fadeOut(5000) }, function(){ //淡入 $("img").fadeIn(5000); } ); }) </script> <body> <button id="btn">淡入淡出</button> <br /> <img src="../img/星空一花.jpg" width="100px" height="100px" /> </body>
复制
案例
fadeIn()和fadeOut()方法通过动画效果,改变元素的透明度切换元素显示状态,其透明度从0.0到1.0淡出或从1.0到0.0淡入,从而实现淡入淡出的动画效果;如果要将透明度指定到某一个值,则需要调用fadeTo()方法
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> .divFrame { border: solid 1px #666; width: 197px; text-align: center; } .divFrame .divTitle { background-color: #eee; padding: 5px 0px 5px 0px } .divFrame .divContent { padding: 5px 0px 5px 0px } .divFrame .divContent img { border: solid 1px #eee; padding: 2px; width: 120px; height: 120px; } </style> <script type="text/javascript" src="../js/jquery-1.8.2.js"> </script> <script type="text/javascript"> $(function() { $("#Select1").change(function(){ var v = $(this).val(); //3000毫秒将透明度变化为v $("img").fadeTo(3000,v); }) }) </script> </head> <body> <div class="divFrame"> <div class="divTitle"> <select id="Select1"> <option value="0.2">0.2</option> <option value="0.4">0.4</option> <option value="0.6">0.6</option> <option value="0.8">0.8</option> <option value="1.0" selected="selected">1.0</option> </select> </div> <div class="divContent"> <img src="../img/星空一花.jpg" alt="" title="风景图片" /> </div> </div> </body> </html>
复制
自定义动画
上述的动画效果都是元素局部属性发生变化,如高度、宽度、可见性等。
在jQuery中,也允许用户自定义动画效果,通过使用animate()方法,可以制作出效果更优雅、动作更复杂的页面动画效果。对于效果也是依据设置的顺序执行。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> .divFrame { border: solid 1px #ccc; background-color: #eee; width: 60px; height: 60px; font-size: 13px; padding: 5px } </style> <script type="text/javascript" src="../js/jquery-1.8.2.js"> </script> <script type="text/javascript"> $(function() { /** * 当点击图层的时候,图层的宽度变为200px,高度为100px,共经历3秒完成 * 完成后,将字体大小设置为50px, */ $("div").click(function(){ $(this).animate( { "width":"200px", "height":"100px" }, 3000, function(){ $(this).css("font-size","50px"); } ); }) }) </script> </head> <body> <div class="divFrame"> 点击变大 </div> </body> </html>
复制
Ajax
加载获取服务端的数据
load()–加载html
后续的重复代码简化
使用load()方法可以很快地加载数据到页面中
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="../js/jquery-1.8.2.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> $(function(){ $("#btn").click(function(){ $("#manager").load("page.html"); }) }) </script> </head> <body> <button id="btn">加载页面</button> <div id="manager"></div> </body> </html>
复制
//page.html <h1>页面~~~</h1>
复制
getJSON–加载json
虽然使用load()方法可以很快地加载数据到页面中,但有时我们需要只是部分数据
为了解决这个问题,我们采用将要获取的数据另存为一种轻量极的数据交互格式,即JSON文件格式
<script type="text/javascript"> $(function(){ $("#btn").click(function(){ $.getJSON("new_file.json",function(data){ var v = ""; for(var i = 0;i<data.length;i++){ var name = data[i].name; var age = data[i].age; v += (name + " -- " + age + " "); } $("#manager").text(v); }) }) }) </script>
复制
//new_file.json [{"name":"奇男子","age":18},{"name":"小小","age":23}]
复制
getScript()–加载js
将上述的代码抽取到一个js中,然后来加载js实现数据的加载
<script type="text/javascript"> $(function(){ $("#btn").click(function(){ $.getScript("new_file.js"); }) }) </script>
复制
//new_file.js $.getJSON("new_file.json",function(data){ var v = ""; for(var i = 0;i<data.length;i++){ var name = data[i].name; var age = data[i].age; v += (name + " -- " + age + " "); } $("#manager").text(v); })
复制
get()–加载xml
遇到使用XML文档保存数据的情况 ,通过get来获取XML文件的数据,并遍历展示数据
<script type="text/javascript"> $(function(){ $("#btn").click(function(){ $.get("new_file.xml",function(data){ var v = ""; //解析xml文档,获取student标签,并遍历 $(data).find("student").each(function(){ //获取student标签内的各个数据 var name = $(this).find("name").text(); var age = $(this).find("age").text(); v += (name + " -- " + age + " "); }) $("#manager").text(v); }) }) }) </script>
复制
new_file.xml <students> <student> <name>奇男子</name> <age>18</age> </student> <student> <name>小小</name> <age>23</age> </student> </students>
复制
与服务端交互
给服务端传递客户端的数据以及获取服务端的数据
get方法、post方法
以json的方式向后端传递数据
serialize()序列化表单
问题:在使用全局函数 . g e t ( ) 和 .get()和 .get()和.post()向服务器传递参数时,其中的参数是通过名称属性逐个搜索输入字段的方式进行传输的,如果表单的输入字段过多,这种方式就比较麻烦,而且不利于拓展。
解决:jQuery引入serialize()方法,该方法可以简化参数传值的方式
返回值:String serialize()
该方法的功能是将所选择的DOM元素转换成能随Ajax传递的字符串,即序列化所选择的DOM元素
{"action":"doLogin","username":$("username").val(),"password":$("password").val(),......} 序列化后 data:$("#loginForm").serialize()
复制
$.ajax()方法
除了load()、get()、post()实现页面的异步调用和与服务器交互数据外,
最底层的方法$.ajax()可用完成功能,更多地关注实现过程中的细节
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <%@ include file="rememberMe.jsp"%> ${msg} <h1>登录页面</h1> <form id="loginForm"> 账号:<input type="text" name="username"/><br/> 密码:<input type="password" name="password"/><br/> 验证码:<input type="text" name="userCode"/><img src="user?action=doDrawCode" width="120px" height="30px" onclick="refresh()"><a href="#" onclick="refresh()">刷新</a><br/> 记住我:<input type="checkbox" name="rememberMe"/><br/> 角色: <select name="role"> <option value="student">学生</option> <option value="teacher">老师</option> </select> <br/> <input id="loginBtn" type="button" value="登录"/> <input type="button" value="返回" onclick="goWelcome()"/> </form> <script src="js/jquery-1.8.2.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> function goWelcome(){ window.location = "welcome.html"; } img = document.getElementsByTagName("img")[0]; function refresh(){ img.src = "user?action=doDrawCode&" + new Date(); } $(function (){ $("#loginBtn").click(function (){ $.ajax( { type:"post", url:"user?action=doLogin", data:$("#loginForm").serialize(), async:true, success:function (data){ if (data == "1"){ window.location = "index.jsp"; }else if (data == "-1"){ alert("登录失败 -- 账号或密码错误"); }else if (data == "-2"){ alert("登录失败 -- 验证码错误"); } } } ) }) }) </script> </body> </html>
复制
get()、post()
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> ${msg} <h1>注册页面</h1> <form action="student?action=doRegister" method="post" enctype="multipart/form-data"> 账号:<input type="text" name="username" id="username"/><span id="usernameInfo"></span><br/> 密码:<input type="password" name="password"/><br/> 姓名:<input type="text" name="name"/><br/> 年龄:<input type="text" name="age"/><br/> 性别: <input type="radio" name="sex" value="man" checked="checked"/>男 <input type="radio" name="sex" value="woman"/>女 <br/> 爱好: <input type="checkbox" name="hobbies" value="football"/>足球 <input type="checkbox" name="hobbies" value="basketball"/>篮球 <input type="checkbox" name="hobbies" value="shop"/>购物 <br/> 上传头像:<input type="file" name="photo"/><br/>籍贯: <select id="province" name="province"> <option value="xxx">-- 请选择 --</option> </select>省 <select id="city" name="city"> <option value="xxx">-- 请选择 --</option> </select>市 <br/> <input type="submit" value="注册"/> <input type="button" value="返回" onclick="goWelcome()"/> </form> <script src="js/jquery-1.8.2.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> function goWelcome() { window.location = "welcome.html"; } $(function (){ $("#username").blur(function (){ let v = $(this).val(); if (v.length != 0){ $.post( "student?action=isRegister", {"username":v}, function (data){ if (data == "1"){ $("#usernameInfo").css("color","green"); $("#usernameInfo").text("恭喜,账号可用"); }else if (data == "-1"){ $("#usernameInfo").css("color","red"); $("#usernameInfo").text("抱歉,账号已被注册"); } } ); } }) function showProvince(){ $.get( "province",<!--url--> {"action":"getProvinces"},<!--传参--> function (data){<!--响应的--> let provinceArr = eval(data); for (let i = 0;i<provinceArr.length;i++){ let code = provinceArr[i].code; let name = provinceArr[i].name; let option = $("<option></option>"); $(option).val(code); $(option).text(name) $("#province").append(option) } } ) } showProvince(); $("#province").change(function (){ let v = $(this).val(); if (v == "xxx"){ $("#city").html("<option value='xxx'>-- 请选择 --</option>"); }else{ $.get( "province", {"action":"getCities","code":v}, function (data){ //先清空城市列表 $("#city").html(""); //解析json数据 let cityArr = eval(data); for (let i = 0;i<cityArr.length;i++){ let code = cityArr[i].code; let name = cityArr[i].name; let option = $("<option></option>"); $(option).val(code); $(option).html(name); $("#city").append(option); } } ) } }) }) </script> </body> </html>
复制
补充:
语法:load(url, [data], [callback])
参数url为被加载的页面地址,可选项[data]参数表示发送到服务器的数据,其格式为key/value。另一个可选项[callback]参数表示加载成功后,返回至加载页的回调函数
语法:getJSON(url, [data], [callback])
参数url表示请求的地址,可选项[data]参数表示发送到服务器的数据,其格式为key/value。另外一个可选项[callback]参数表示加载成功时执行的回调函数
语法:jQuery.get(url, [data], [callback], [type])
参数url表示等待加载的数据地址,可选项[data]参数表示发送到服务器的数据,其格式为key/value,可选项[callback]参数表示加载成功时执行的回调函数,可选项[type]参数表示返回数据的格式,如HTML、XML、JS、JSON、TEXT
jQuery.ajax(url,[settings])
列举几个常用的回调函数
如果要处理$.ajax()得到的数据,则需要使用回调函数。beforeSend、error、success、complete。
- beforeSend 在发送请求之前调用,并且传入一个XMLHttpRequest作为参数。
- error 在请求出错时调用。传入XMLHttpRequest对象,描述错误类型的字符串以及一个异常对象(如果有的话)
- success 当请求之后调用。传入返回后的数据,以及包含成功代码的字符串。
- complete 当请求完成之后调用这个函数,无论成功或失败。传入XMLHttpRequest对象,以及一个包含成功或错误代码的字符串。
更多完整信息请参考API文档