2009.10 29

利用jQuery制作具有滑动动画效果的层

基本原理

这些具有动态效果的滑动盒都基于同样的基本原理。在你经过想要"窥见"对象中的其他两个项目,这个带有".boxgrid"的DIV标签充当着一个窗口。还不明白? 让这个图片来给你线索吧:

slidebreakdown

理解了这个基本原理之后,我们就可以利用滑动元素的动画效果来揭开或遮盖住要展示的区域,以此来创造滑动效果。

你可能需要的东西: 预览 | 下载这个实例的源文件

第一步 – CSS 基础工作

在上面给出基本结构的启示图中,我们需要使用一点CSS来让它显示出预期的效果。下面这个CSS定义了查看窗口(.boxgrid) 并的在LEFT和TOP设定图片的默认POSITION,这对于滑动时的重叠交代很重要。并且不要忘记overflow:hidden将使这一切成为可能。

.boxgrid{
        width: 325px;
        height: 260px;
        margin:10px;
        float:left;
        background:#161613;
        border: solid 2px #8399AF;
        overflow: hidden;
        position: relative;
}
.boxgrid img{
        position: absolute;
        top: 0;
        left: 0;
        border: 0;
}

如果你不准备用CSS来实现半透明的描述,可直接跳向第二步:

.boxcaption{
        float: left;
        position: absolute;
        background: #000;
        height: 100px;
        width: 100%;
        opacity: .8;
        /* For IE 5-7 */
        filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
        /* For IE 8 */
        -MS-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";
        }

现在,我们需要设定说明层(caption box,觉得用层好过于盒)的默认的起点。如果想让其初始化的时候完全隐藏,这将需要设定TOP和LEFT为你的窗口(.boxgrid)的高和宽,(当然)这是由所要滑动的方向决定的。你也可以让它在初始化的时候只显示一部分,像这个(CSS所定义的).caption和.boxcaption所给出的:

 .captionfull .boxcaption {
        top: 260;
        left: 0;
 }
 .caption .boxcaption {
        top: 220;
        left: 0;
 }

第二步 – 添加滑动动画

下一步是选择适合你的动画,我提供了几个预设的潜在需求(样式)。试用一下他们,选择一个符合你风格也是你需要的样式。

$(document).ready(function(){
        //要更改上、下方向和左、右方向,只需要在top/left的值中添加"-"号(表示反方面)。
        //垂直滑动
        $('.boxgrid.slidedown').hover(function(){
                $(".cover", this).stop().animate({top:'-260px'},{queue:false,duration:300});
        }, function() {
                $(".cover", this).stop().animate({top:'0px'},{queue:false,duration:300});
        });
        //水平没去
        $('.boxgrid.slideright').hover(function(){
                $(".cover", this).stop().animate({left:'325px'},{queue:false,duration:300});
        }, function() {
                $(".cover", this).stop().animate({left:'0px'},{queue:false,duration:300});
        });
        //比例缩放滑动
        $('.boxgrid.thecombo').hover(function(){
                $(".cover", this).stop().animate({top:'260px', left:'325px'},{queue:false,duration:300});
        }, function() {
                $(".cover", this).stop().animate({top:'0px', left:'0px'},{queue:false,duration:300});
        });
        //部分滑动 (只显示一部分背景)
        $('.boxgrid.peek').hover(function(){
                $(".cover", this).stop().animate({top:'90px'},{queue:false,duration:160});
        }, function() {
                $(".cover", this).stop().animate({top:'0px'},{queue:false,duration:160});
        });
        //完全滑动的说明 (从完全隐藏到完全显示)
        $('.boxgrid.captionfull').hover(function(){
                $(".cover", this).stop().animate({top:'160px'},{queue:false,duration:160});
        }, function() {
                $(".cover", this).stop().animate({top:'260px'},{queue:false,duration:160});
        });
        //部分滑动的说明 (部分显示-部分隐藏)
        $('.boxgrid.caption').hover(function(){
                $(".cover", this).stop().animate({top:'160px'},{queue:false,duration:160});
        }, function() {
                $(".cover", this).stop().animate({top:'220px'},{queue:false,duration:160});
        });
});

第三步 – HTML

这里需要一些类(class)来作为jQuery的选择器,在心里存着这样的标准:

  • DIV标签的类".cover"必须分配给任何一个想要滑动的对象;
  • 有.boxgrid类的DIV标签,图片通常最先显示。

这是一个我将用在.captionfull动画的HTML例子:

<div class="boxgrid captionfull">
        <img src="jareck.jpg"/>
        <div class="cover boxcaption">
                <h3>Jarek Kubicki</h3>
                <p>Artist<br/><a href="http://www.nonsensesociety.com/2009/03/art-by-jarek-kubicki/" target="_BLANK">More Work</a></p>
        </div>
</div>

好吧。文章标题就这样被我改了。不过,这样对于中文更好理解。而文章这最后一段就不用全译了。只要你知道,这些实例只是供你选择,要创造出一个适合自己的,就要自己动手。如果你有什么不懂的,欢迎到Tech Meme论坛来讨论。这里面没有很多人,因为需要邀请。但,大家喜欢讨论技术问题。如果你需要进来讨论,请联系我。不讨论的就不用邀请码了,因为你可以看到里面的所有文章,除了下载资料。

原文:Sliding Boxes and Captions with jQuery

3 Tweets

39

  1. 2009.10.29 7:20 pm
    ZH CEXO(visit): [回复]

    沙发没有了……

  2. 2009.10.29 7:20 pm
    ZH CEXO(visit): [回复]

    靠,原来我是沙发,那就再水一层好了~

  3. 2009.10.29 7:24 pm
    ZH CEXO(visit): [回复]

    这个效果很帅啊,不过我想到一个问题,以前你写过一篇用jq来制作像你博客的订阅按钮一样的效果,但你的那个,鼠标反复滑过后,那个下拉列表就不停地上上下下,而这些效果不会这样,为什么?

  4. 2009.10.29 7:49 pm
    不含税(visit): [回复]

    Jquery好像有好多这样的插件~~
    解决浏览器兼容性Jquery还不错~~
    长时间用这个话js得不到提高~~
    老衲深受其害~~

  5. 2009.10.29 8:06 pm
    万戈(visit): [回复]

    这个效果在懒人图库看到过,很不错,可以用作产品展示

  6. 2009.10.29 8:10 pm
    meters(visit): [回复]

    同意.@不含税:

  7. 2009.10.29 8:33 pm
    林木木(visit): [回复]

    原来这么回事儿呀!有明白了一个~

  8. 2009.10.29 9:08 pm
    Dianso(visit): [回复]

    真绚丽 貌似在css3也见过差不多的效果

  9. 2009.10.30 12:45 am
    洗眼器(visit): [回复]

    不多 ,研究研究,,,

  10. 2009.10.30 6:15 am
    Jinwen(visit): [回复]

    @ZH CEXO: 我觉得这两个效果是一样的啊,都是指向指定区域则开始动作,离开指定区域则动作消失。是不是?

  11. 2009.10.30 7:23 am
    yavg(visit): [回复]

    学习了

  12. 2009.10.30 9:51 am
    ZH CEXO(visit): [回复]

    @Jinwen: 我说的是这个http://www.happinesz.cn/archives/1020/,你可以看看,如果在下拉列表没有完全展开的情况下,反复把鼠标在那个rss图标上晃来晃去,那个列表就开始抽筋似的上上下下

  13. 2009.10.30 9:55 am
    iinterest(visit): [回复]

    IE8的透明滤镜跟以前的不一样?…真悲剧.
    animate做动画效果考验的是人的思路

  14. 2009.10.30 10:17 am
    Hobo(visit): [回复]

    jQuery新手来学习一下

  15. 2009.10.30 10:24 am
    sleepy(visit): [回复]

    @不含税: 这个没有用jquery插件呀, 自己编码的

  16. 2009.10.30 10:42 am
    underone(visit): [回复]

    由此可见…只有IE8才是真的改革…

  17. 2009.10.30 11:00 am
    leehow(visit): [回复]

    我来问候一下,降温了主意保暖。

  18. 2009.10.30 1:40 pm
    zEUS.(visit): [回复]

    哈哈,我正想写一篇关于这个效果的文章~
    不过说实话,我从没有去理解过jQuery的原理,把现成的效果拿过来改改样式就行了,呵呵呵… 我很懒吧 =。=

  19. 2009.10.30 3:36 pm
    sofish(visit): [回复]

    @leehow: 你也一样!

  20. 2009.10.31 1:17 am
    种草人(visit): [回复]

    我喜欢夜晚行动,呵呵。挺有风格的博客,顶一下。

  21. 2009.10.31 9:59 am
    WordPress啦(visit): [回复]

    Jquery还真的需要研究下,不错啊

  22. 2009.10.31 11:43 am
    韦斯特(visit): [回复]

    有事没事就该到这来欣赏动画

  23. 2009.10.31 12:04 pm
    吖Bee(visit): [回复]

    效果很爽~哈哈!

  24. 2009.10.31 1:20 pm
    zwwooooo(visit): [回复]

    这效果很赞,但不知哪里用好。好久没来了,坐坐,哈

  25. 2009.10.31 9:15 pm
    DELL电脑(visit): [回复]

    今天你偷菜了没有?戴斯克姆

  26. 2009.11.01 8:54 am
    ucax(visit): [回复]

    DEMO 裡面,女人頭泡一半水那張圖不錯.

  27. 2009.11.01 10:04 am
  28. 2009.11.01 10:47 am
    淘宝网导购(visit): [回复]

    博客不错啊。有空大家来我这里坐坐

  29. 2009.11.02 12:21 am
    大地工作室(visit): [回复]

    不错哦,我也开了一个博客,有空大家经常交流…

  30. 2009.11.03 7:11 am
    大地软件工作室(visit): [回复]

    换友情链接么?记得回访哦!

  31. 2009.11.03 7:56 am
    meters(visit): [回复]

    下不了….

  32. 2009.11.04 9:32 pm
    armgod(visit): [回复]

    效果很帅

  33. 2009.11.05 12:30 am
    bolo(visit): [回复]

    这个效果相当不错啊

  34. 2009.11.09 7:49 pm
    lin1605(visit): [回复]

    源码链接无效,下载不了啊

  35. 2010.01.25 8:08 pm
    牛博哄哄(visit): [回复]

    用作产品展示不错,动画我喜欢

  36. 2010.02.26 1:50 pm
    The7in(visit): [回复]

    这个效果真好,学习了。
    准备用在自己的博客里面。

  37. 2009.10.29 7:12 pm
    sofish(visit): [回复]

    《利用jQuery制作具有滑动动画效果的层》-http://is.gd/4H0QP

    This comment was originally posted on Twitter

  38. 2009.10.30 6:11 am
    jinwen(visit): [回复]

    临睡前看下这篇,觉得做CMS型的blog适合-”利用jQuery制作具有滑动动画效果的层 – 幸福收藏夹” ( http://bit.ly/47hdZf )

    This comment was originally posted on Twitter

  39. 2009.10.30 9:43 am
    sfufoe(visit): [回复]

    RT @ jinwen: 临睡前看下这篇,觉得做CMS型的blog适合-”利用jQuery制作具有滑动动画效果的层 – 幸福收藏夹” ( http://bit.ly/47hdZf ) http://bit.ly/3qjhhc

    This comment was originally posted on Twitter

Additional comments powered by BackType