有关jQuery动画的一些基本知识

这几天有一有空就继续在搞博客的Ajax留言,我就不相信了,教程都在那里了,我就不相信我做不出来。那个教程我都快背下来了,可就是一直没出效果。可能是自己在JS和jQuery方面没有什么基础吧!不过研究也没有白研究,通过这几天的学习,才真正认识到了jQuery的强大!有时间一定要好好学习一下。

本博客的ajax留言已经成功实现了,呵呵!不容易啊,大家有兴趣的可以留言试一下效果,自我感觉良好!其中就用到了很多jQuery的动画效果,至于是如何实现的,我想我会在下一篇日志中详细的介绍一下。

今天就先给大家介绍一下有关jQuery动画的一些基本知识,先来提前感受一下jQuery的强大,然后我会介绍它的具体应用,也就是本站ajax留言的实现。现在开始吧!

我们首先来关注简单的“show/hide”方法。然后我们会继续进行一些自定义的动画操作。那么让我们来彻底了解这些机制。

简单的动画

“show”和”hide”是什么?它们是干什么的?

在你的html文档里,为一个元素调用”Hide()”方法,会将该元素的display样式改为”none”。以下CSS和jQuery的代码完成的功能是相同的。

#someElement
{
display: none;
}

$(“#someElement”).hide();

我敢肯定你会自己弄明白”Show()”方法就是将元素变回display的初始状态。再看看以下的代码段的功能也是一样的。

#someElement
{
display: inline;
}

$(“#someElement”).show();

“Show()”和”Hide()”方法会让元素动起来吗?

会,也不会。不带任何参数的情况下,它不会有动画。但,在调用”Show()”方时,如果我们希望看到元素慢慢地显示出来呢?在这种情况下,我们不得不采用”slow”关键字。看例子……

$(“#someElement”).show(“slow”);

现在,当该代码运行,元素将慢慢地在0.6秒内显示出来。这个速度参数,我们可以任选一个长度的速度关键字在某个动画中运行。速度关键字有 ”slow”,”normal”和”fast”(长度分别是0.6秒,0.4秒和0.2秒)。除此这外,我们还可以为速度指定一个数字……

$(“#someElement”).show(1000);

这将使元素在1秒钟(1000毫秒)内显示出来。注意,当使用速度关键字时要加引号,而然在指定数字时就不需要加引号。

奇妙的”Show()”方法,我们实际上并没有花费太多的力气就能得到相当好的效果。在这个方法中,我们改变元素的不透明度、宽度和高度的值。jQuery库的其它动画方法,从另一个角度讲,恐怕需要改变一下特性。

FadeIn() 和 FadeOut()

Fade方法只改变元素的不透明度。FadeOut()在指定的一段时间内降低元素的不透明度,直到元素完全消失(display:none)。很 明显FadeIn()则相反。作为显示和隐含的方法,我们可以引入我们的”slow”,”normal”和”fast”这些关键字。

假设有一个超链接,当它被点击后慢慢地消失了(淡出)。

$(document).ready(function()
{
$(”#someId”).click(function()
{
$(this).fadeOut(”slow”);
});
});

HTML文档打开完成,我们要侦听一个ID为”someId”的超链接的点击事件,当被点击,this(即被点击的超链接对象)会慢慢消失(淡出)。

slideUp() 和slideDown()

slide方法只会改变元素的高度。如果一个元素的display样式为none,当调用”slideDown”方法时,这个元素将按指定高度由上至下延伸显示。该动画方法和其它动画方法一样支持关键字和数字参数。

自定义动画

许多情况下,你可能需要对你的动画有更多的控制。有些是jQuery内置方法办不到的,那么我们就要采取一些高级的自定义的解决办法。

让元素横穿页面

本例要让一个图片被点击后横穿页面。看看效果。让我们假设有这么一个空白的Html,里面有一个id=”theImage”的图片标记。首先设置它的CSS样式。

#theImage
{
position: relative;
}

为了要让图片运动,我们要更改它的”left”样式属性。不管怎样,为了能影响这个元素的top,left,bottom和right的样式属性,必需先要有position的样式设置。现在,添加我们的jQuery代码。

$(document).ready(function(){
$(”#theImage”).click(function()
{
$(this).animate
({left: “400px”}, 3000);
});
});

这里,我们为图片创建一个点击事件。然后加入”animate”方法。

动画语法结构:.animate({property: “value”}, speed, callbackFunction);

我们使元素3秒钟(3000毫秒)内完成右移400象素。

多重动画

看着,改动一下前面的例子,要让我们的图片向右滑动然后放大图片的宽度。下面的代码对吗?

$(“#theImage”).click(function()
{
$(this).animate
({
left: “400px”,
width: “300px”
}, 3000);

答案是否定的(至少不完全是)。如果你再重新理解我们的目标,我们是要让图片向右滑动,完成后再将图片的宽度改成300像素。这个代码的表示则是让两个动画同时进行,即图片向右滑动的同时改变了它的宽度。那么,我们如何能够让我们的动画“排队”呢

$(“#theImage”).click(function()
{
$(this).animate
({
left: “400px”,
}, 3000);
$(this).animate
){
width: “300px”
}, 3000);

现在我们将这两者分开了,在”left”这个定位属性改变之前”width”属性将不会改变。称其为“动画队列”……或动画链!

来个综合

看看效果

接下来的例子,我们要点击图片后让它向右移动,并将它的不透明度从10%变换到100%。当完成这些效果后,我们还要有一个三秒内淡出的过程。首先,我们要稍微编辑一下CSS文件。

#theImage
{
position: relative;
display: none;
}

为了使元素的”left”样式属性发生变化,元素需要相对定位。我们同样还要将元素的display设为none,以便它在横穿屏幕时我们可以淡入它。现在该jQuery了。

$(document).ready(function(){
$(”#theImage”).css(”opacity”, “.1″);
$(”#theImage”).click(function()
{
$(this).animate
({left: “400px”, opacity: “1″}, 3000, function()
{
$(this).fadeOut(3000);
}
);
});
});

.CSS居然插队!

如果图片移动并淡入之后,我们又要更换它的CSS为……

.css(“border”, “5px solid red”);

很遗憾,你不能得到预期响应。.CSS方法不会等待动画完成而是立即被更换样式。那么你怎样使这个没有效果过程的.CSS方法老老实实地排上队呢?答案是”callback”回调函数(我们已经在以前的示例中运行过)。这里我们复习一下。

$(document).ready(function(){
$(”#theImage”).css(”opacity”, “.1″);
$(”#theImage”).click(function()
{
$(this).animate
({left: “400px”, opacity: “1″}, 3000, function()
{
$(this).css(“border”, “5px solid red”);
$(this).fadeOut(3000);
}
);
});
});

回调函数允许你在效果完成后声明一些功能。它适用于jQuery所有的效果方法。

$(“#someElement”).slideDown(“normal”, function()
{
…这里可以写些代码
});
);

这段代码表示id=”someElement”的元素将在0.4秒内(正常速度)向下完全展开。当动画完成后,回调函数体的代码将会被执行。

是不是很强大哈!当然这一切效果的实现都需要在你的浏览器中引入了jQuery框架才可以实现!!

资源转自:薄荷的Weblog

Share with Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网

相关文章本月热门点击排行

  • N/A
Post a comment 2008/10/30 – 20:476,156 Views
Post a comment | Trackback URL | RSS Comments 23 Comments
  1. 2008/10/30 at 20:58 | #1

    ?有动画效果吗??我来试试,呵呵

  2. 2008/10/30 at 20:59 | #2

    呵呵……有点小问题,就是这个可以实现留言,但是不刷新页面那么 不会在同一个页面上显示已提交的内容,虽然写进了数据库此页面不刷新不会显示哦

  3. 2008/10/30 at 21:00 | #3

    测试结果是第一条留言不会显示第二条显示出来了

  4. 2008/10/30 at 23:38 | #4

    @久酷 是的,的确有这个问题!谢谢提醒哈!现在已经修复了!

  5. 2008/11/06 at 09:57 | #5

    啥子?

  6. 2008/11/06 at 09:59 | #6

    就这个啊,我不用jquery,用AJAX也很快能实现啊

  7. 2008/11/06 at 10:01 | #7

    不过AJAX要写很多代码来实现动画,你这个有问题啊….!!

  8. 2008/11/06 at 11:01 | #8

    @11 我没怎么用过AJAX,也是刚接触jQuery,觉得动画挺容易实现的,呵呵!不知道是哪里有问题哈?还请多指教!

  9. 2009/01/04 at 17:23 | #9

    这段时间刚好对这个兴趣比较大.

  10. 2009/05/04 at 18:01 | #10

    很有幫助的一篇文章 謝謝

  11. 2009/05/15 at 16:10 | #11
    erwrwrNotify

    test animation, :)

  12. 2009/05/29 at 16:11 | #12
    feifeiNotify

    试试

  13. 2009/05/30 at 02:58 | #13

    JQUERY很强大啊!很是喜欢他的特效动画

  14. 2009/06/09 at 18:06 | #14
    谔谔Notify

    试试效果。。。

  15. 2009/07/18 at 16:27 | #15
    lysNotify

    来看动画效果的!

  16. 2009/07/22 at 21:52 | #16
    robertskyNotify

    不错的教程,博主你的页面布局出错了,改一下啊

  17. 2009/08/14 at 14:15 | #17
    s.w.Notify

    好奇心作祟

  18. 2009/08/31 at 18:10 | #18
    凌天蓝Notify

    好奇,试一下

  19. 2009/09/17 at 20:41 | #19
    magicmoonNotify

    试试看啊

  20. 2009/09/28 at 11:37 | #20

    阿四大发送的

  21. 2009/11/13 at 05:58 | #21
    ZakkNotify

    向你学习~~~呵呵~~

  22. 2009/12/30 at 09:43 | #22
    看看Notify

    看看一下效果

  23. 2009/12/30 at 09:43 | #23
    看看Notify

    再试验下

2 Trackbacks
  1. [...] jQuery 中用到的一些函数,可以参考下有关jQuery动画的一些基本知识。当然还有更权威的 jQuery API [...]

  2. [...] 一些jQuery高手做的网站,如果不看源码和不点右键的话,会让你分不出来到底是JS做的还是Flash做的。在想实现这些超酷的特效之前,先学学jQuery动画基础吧… More [...]

Post a Comment

(必填)

(必填,有回复时方便邮件通知)

(可不填,填了方便回访)

Sharing technology, recording life