8.4 jQuery动态效果函数
学习目标
学习动态效果函数的使用。
使用jQuery完成网页动态特效展示在Web开发中使用频率非常高,主要就是使用jQuery提供的动态效果函数完成。其中包括:显示隐藏函数(show、hide)、上下滑动函数(slideUp、slideDown)、淡入淡出函数(fadeIn、fadeOut)等。
8.4.1 jQuery显示隐藏函数
在jQuery中,hide()和show()是用来实现隐藏元素和显式元素的两个常用函数,这两个函数都可以设置两个可选参数:speed和callback,分别表示速度和回调函数。
语法格式:
$(selector).hide(speed, callback) | 隐藏元素 |
$(selector).show(speed, callback) | 显示元素 |
$(selector).is(":hidden") | 判断元素是否隐藏 |
参数说明:
speed参数规定显示或隐藏的速度,可以设置为slow,fast,normal或毫秒;callback参数是在hide或show函数完成之后被执行的函数名称。
比如:$("#box").hide("slow"),代码就是让id=box的元素慢慢地隐藏,如果让id=box的元素慢慢隐藏后再执行其他操作,通常的想法就是再增加一行代码,如下:
$("#do").click(function(){ $("#box").hide("slow"); alert("success"); });
但是这种代码写法往往是得不到预期效果的,两行代码几乎是同时执行的,要得到这样的效果,就得用callback函数完成,代码如下:
$("#do").click(function(){ $("#box").hide("slow",function(){ alert("success"); }); });
这样元素慢慢隐藏后再执行其他操作就有先后顺序了,这就是hide、show函数中的callback函数的作用。
8.4.2 jQuery切换toggle()函数
jQuery中的toggle()函数是使用show()或hide()函数来切换网页元素的显示、隐藏状态的,toggle()函数功能是隐藏显示的元素,显示隐藏的元素,这样就不再需要判断元素显示、隐藏状态了(is(":hidden")),比较省事。
语法:$(selector).toggle(speed,callback)
speed参数可以设置这些值:slow,fast,normal或毫秒;callback参数是在该函数完成之后被执行的函数名称。
toggle()函数的使用方法和show()、hide()函数的使用方法是一样的,包括其中的callback函数用法也是一样的,也是表示行为动作完成后执行的操作代码。
例如网站后台管理菜单列表页面Menu.aspx,通常就会使用toggle()函数来实现菜单项目的显示、隐藏功能,如图8-1所示。当用户把鼠标指针滑动到“新闻管理菜单”上时,显示效果如图8-2所示,当用户单击“新闻管理菜单”后,显示效果如图8-3所示。
Test01.aspx页面完整的代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test01. aspx.cs" Inherits="Test01" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>学习jquery应用</title> <script type="text/javascript" src="JS/jquery-1.7.1.js"></script> <script type="text/javascript"> $(document).ready(function() { $(".title").click(function(){ $(this).next().toggle("slow"); }).hover(function() { $(this).css("font-weight", "bold") $(this).css("background-color", "#fcf8f8"); }, function() { $(this).css("font-weight", "normal") $(this).css("background-color", "#eeeeee"); }); }); </script> <style type="text/css"> * { padding: 0px; margin: 0px; } body { font-size: 14px; font-family: 微软雅黑,宋体; color: #333333; line-height: 25px; } div { margin: 0px auto; } a:hover { color: #ff0000; text-decoration: underline; } a { color: #116685; text-decoration: none; } .box { padding: 10px; border: 0px solid blue; min-height: 20px; overflow: auto; width: 320px; } .title { float: left; cursor: pointer; width: 300px; height: 30px; padding: 5px; padding-top: 10px; border: 1px solid #cccccc; background-color: #eeeeee; margin-top:5px; } .item { float: left; width: 300px; border: 1px solid #cccccc; padding: 5px; border-top: 0px; min-height: 100px; } </style> </head> <body> <form id="form1" runat="server"> <div class="box"> <div class="title"> 新闻管理菜单 </div> <div class="item"> <a href="#">添加新闻</a><br /> <a href="#">管理新闻</a><br /> <a href="#">添加新闻评论</a><br /> <a href="#">管理新闻评论</a><br /> <a href="#">维护新闻信息</a><br /> </div> <div class="title"> 产品管理菜单 </div> <div class="item"> <a href="#">添加产品</a><br /> <a href="#">管理产品</a><br /> <a href="#">添加产品评论</a><br /> <a href="#">管理产品评论</a><br /> <a href="#">维护产品信息</a><br /> </div> </div> </form> </body> </html>
主要分析一下jQuery代码部分。其中$(this)就表示当前选择的文档元素,一般在函数内部这样使用,代码简洁明了。而$(this).next()就是表示当前这个文档元素的下一个元素。其中toggle就是上文刚刚讲过的一个jQuery函数。
$(document).ready(function () { $(".title").click(function(){ $(this).next().toggle("slow"); }).hover(function () { $(this).css("font-weight", "bold") $(this).css("background-color", "#fcf8f8"); }, function () { $(this).css("font-weight", "normal") $(this).css("background-color", "#eeeeee"); }); });
代码中的hover()事件是jQuery定义的一个类似于样式中的hover一样,就是定义热点显示效果的(就是鼠标滑到in/鼠标滑出out),该事件原形为:
$(selector).hover(fnIn,fnOut)
其中fnIn就是鼠标滑到的定义函数,fnOut就是鼠标滑走的定义函数,也就类似于第一个函数in,第二个函数out,而代码中的hover事件的第一个函数定义为:
function () { $(this).css("font-weight", "bold") $(this).css("background-color", "#fcf8f8"); }
第二个函数定义为:
function () { $(this).css("font-weight", "normal") $(this).css("background-color", "#eeeeee"); }
又由于jQuery的任何操作返回的都是一个jQuery对象,故此,代码中的:
$(".title").click(function(){ $(this).next().toggle("slow"); })
就返回的是一个jQuery对象,当然后面就可以再接着写.hover(function(){…})代码了。而代码中$(this).css("font-weight", "bold")是用来给元素动态定义样式的语法,由于jQuery的每个操作都返回的是一个jQuery对象,那么其中的代码:
$(this).css("font-weight", "bold") $(this).css("background-color", "#fcf8f8");
也可以简写为:
$(this).css("font-weight", "bold").css("background-color", "#fcf8f8");
当然作为jQuery定义样式的语法而言,如果真是要定义多个样式,也可以按照如下语法完成:
$(this).css({ "font-weight": "bold", "background-color": "#fcf8f8" });
8.4.3 jQuery滑动函数
在jQuery中,提供了3个上下滑动隐藏、显示函数:
$(selector).slideDown(speed, callback) | 向下滑动显示元素 |
$(selector).slideUp(speed, callback) | 向上滑动隐藏元素 |
$(selector).slideToggle(speed, callback) | 上下切换函数 |
参数说明:
speed参数可以设置这些值:slow,fast,normal或毫秒:callback参数是在该函数代码完成之后被执行的函数名称。
其实,slideDown()、slideUp()、slideToggle()这3个函数和show()、hide()、toggle()在用法上基本是相同的,只是动态效果不同而已,读者可以直接把上面Test01.aspx中的toggle函数换成slideToggle(另存为Test02.aspx),其他代码都不用修改,运行看看就明白它们之间动态效果有何不同了。
8.4.4 jQuery淡入淡出函数
在jQuery中,提供了4个淡入淡出函数:
$(selector).fadeIn(speed, callback) | 慢慢地显示 |
$(selector).fadeOut(speed, callback) | 慢慢地隐藏 |
$(selector).fadeToggle(speed, callback) | 慢慢隐藏已显示的,显示已隐藏的 |
$(selector).fadeTo(speed, opacity, callback) | 设置元素透明程度 |
speed参数可以设置这些值:slow,fast,normal或毫秒。
fadeTo()函数中的opacity参数设置元素的透明度,取值1表示正常显示,取值0.6表示透明度为60%。
callback参数是在该函数完成之后被执行的函数名称。
其实,fadeIn()、fadeOut()、fadeToggle()这3个函数和show()、hide()、toggle()这3个函数和slideDown()、slideUp()、slideToggle()这3个函数在用法上基本是相同的,只是动态效果不同而已,读者可以直接把上面Test01.aspx中的toggle函数换成fadeToggle(另存为Test03.aspx),其他代码都不用修改,运行看看就明白它们之间动态效果有何不同了。
fadeTo函数是用来定义元素透明度的深浅,经常用来处理图片显示效果,例如,默认很多图片的显示都比较淡(或者说不是很清楚),而当鼠标滑到该图片时,就让图片清晰显示,就可以用此函数完成。
举例Test04.aspx核心代码如下:
<script type="text/javascript" src="JS/jquery-1.7.1.js"></script> <script type="text/javascript"> $(document).ready(function () { $("#box img").fadeTo("fast", 0.2); $("#box img").hover(function () { $(this).fadeTo("fast", 1); }, function () { $(this).fadeTo("fast", 0.2); }); }); </script> <div id="box"> <img src="Images/1.jpg" width="200" height="160" /> <img src="Images/2.jpg" width="200" height="160" /> <img src="Images/3.jpg" width="200" height="160" /> <img src="Images/4.jpg" width="200" height="160" /> <img src="Images/5.jpg" width="200" height="160" /> <img src="Images/6.jpg" width="200" height="160" /> <img src="Images/7.jpg" width="200" height="160" /> <img src="Images/8.jpg" width="200" height="160" /> </div>
Test04.aspx运行后,当鼠标滑动到最后一个图片时,显示效果如图8-4所示,当然如果滑动到其他某个图片,那么该图片就会清晰显示,而剩余所有图片又会模糊显示了。
代码$("#box img").fadeTo("fast", 0.2);中参数fast用来设置速度,就是快速减淡到0.2,当然也可以使用其他参数(slow,normal,毫秒数),而0.2表示减淡的程度,数字越小表示减淡的程度越高(越不清楚),比如该参数取1就是正常显示的亮度了。