jQuery学习笔记(4)——动画效果

jQuery动画效果

jQuery提供了较为丰富和简单的动画效果,但是效果是为了可用性服务的,如果简单的堆砌效果,往往适得其反。


jQuery的动画效果:

  • 隐藏/显示
  • 淡入/淡出
  • 滑动
  • 自定义动画

显示和隐藏

相关命令

show()用于显示包装集里的元素
hide()用于隐藏包装集里的元素
原理是修改style属性的display值,none表示隐藏。
实际使用中,在初始化的时候,不要利用元素的style属性使元素隐藏,而应该在页面的就绪处理程序里将hide()命令应用到想要使其隐藏的元素上,这样既能使元素隐藏,又可以确保每一个元素的初始状态可知,确保随后的操作可以如预期进行。


实际案例

可折叠的列表

<body>
    <fieldset>
        <legend>可折叠列表</legend>
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3
                <ul>
                    <li>3.1</li>
                    <li>3.2
                        <ul>
                            <li>3.2.1</li>
                            <li>3.2.2</li>
                        </ul>
                    </li>
                    <li>3.3</li>
                </ul>
            </li>
            <li>4
                <ul>
                    <li>4.1</li>
                    <li>4.2
                        <ul>
                            <li>4.2.1</li>
                            <li>4.2.2</li>
                        </ul>
                    </li>
                    <li>4.3</li>
                </ul>
            </li>
            <li>5</li>
        </ul>
    </fieldset>
</body>

实际效果

这样的效果显然不是友好的,当层次变深,条目变多,完全展开的列表会让用户找不到有用信息。所以用jQuery让子列表隐藏,当点击展开的时候再显示出来。
可以用如下方法实现:

$(function(){
    $('li:has(ul)').click(function(event){
        if(this == event.target){
            if($(this).children().is(':hidden')){
                $(this).css('list-style-image','url(minus.gif)').children().show();
            }else{
                $(this).css('list-style-image','url(plus.gif)').children().hide();
            }
        }
        return false;
    }).css('cursor','pointer').click();
    $('li:not(:has(ul))'),css({
        cursor:'default','list-style-image':'none'
    });
});

切换元素的显示状态

toggle()命令可以在显示、隐藏两个状态中切换。
还是之前的例子,这次用toggle()来实现:

$(function(){
    $('li:has(ul)').click(function(event){
        if(this == event.target){
            $(this).children().toggle();
            $(this).css('list-style-image',($(this).children().is(':hidden'))?'url(plus.gif)':'url(minus.gif)');
        }
        return false;
    }).css('cursor','pointer').click();
    $('li:not(:has(ul))'),css({
        cursor:'default','list-style-image':'none'
    });
});

动画方式显示和隐藏

show()和hide()其实是有参数的。

hide(speed,callback)
使包装集里的元素变为隐藏状态。不带参数时,隐藏效果为突然发生。
如果提供speed参数,就可以调整元素的大小和不透明度,使得元素在短时内逐渐隐藏,完全隐藏之后再把元素的display样式属性值设置为none。speed可以是毫秒数、slow、normal、fast。
callback是可选的回调函数,用来完成动画结束之后的事情。这个函数的上下文被设置为以动画方式隐藏的元素。


show(speed,callback)
和hide()类似,只不过是把display的值改为inline或block。


toggle(speed,callback)
同上


加入动画之后,原解决方法需要调整,因为在页面加载好之后,该隐藏的部分不应该再展现出来,如果只单纯的在toggle()中加入参数,那么用户会在加载完成之后,看见该隐藏的部分渐渐的消失。所以需要显式的调用hide()将子列表隐藏起来。

$(function(){
    $('li').css('pointer','default').css('list-style-image','none');
    $('li:has(ul)').click(function(event){
        if(this == event.target){
            $(this).children().toggle('slow');
            $(this).css('list-style-image',($(this).children().is(':hidden'))?'url(plus.gif)':'url(minus.gif)');
        }
        return false;
    }).css({cursor:'pointer','list-style-image':'url(plus.gif)'}).children().hide();
    $('li:not(:has(ul))'),css({
        cursor:'default','list-style-image':'none'
    });
});

淡入和淡出

相关命令

fadeIn()淡入效果
fadeOut()淡出效果
修改元素的透明度,除了不改变元素大小以外,与show()和hide()很相似。


fadeOut(speed,callback)
将非隐藏的任何已匹配元素的不透明度逐渐降低至0%,然后从显示器上删除
speed可以是毫秒数、slow、normal、fast,用来设定效果的持续时间
callback是可选的回调函数,用来完成动画结束之后的事情。这个函数的上下文被设置为以动画方式淡出的元素。


fadeIn(speed,callback)
与fadeOut()类似


fadeTo(speed,opacity,callback)
从当前的设置到opacity所指定的新设置,调整已包装的元素的不透明度。
opacity为目标不透明度,从0.0到1.0


滑动

相关命令

slideDown()向下滑动
slideUp()向上滑动
工作方式与show()、hide()类似,也有slideToggle()做二者的切换。


sildeDown(speed,callback)
通过从上往下逐渐扩大元素的垂直面积,使隐藏的任何已匹配的元素显示出来,非隐藏的元素不受影响。
参数意义和其他的命令几乎没有区别。


slideUp(speed,callback)
通过从下往上逐渐减小元素的垂直面积,最终使非隐藏的任何已匹配元素从显示器上删除。
参数意义和其他的命令几乎没有区别。


slideToggle(speed,callback)
在隐藏的元素上执行slideDown(),在非隐藏的元素上执行slideUp()。


停止动画

有时候需要停止一段已经开始的动画。
stop(),停止当前正在运行的、包装集里的元素的所有动画,这个命令没有参数。


自定义动画

相关命令

animate(),允许应用自定义的动画效果到包装集元素上

animate(properties,duration,easing,callback)
animate(properties,options)
将properties和easing参数所指定的动画应用到包装集的所有元素上,可以指定回调函数,在动画完成后调用,第二种方式除properties以外,还指定一组options。
properties,一个散列对象,指定在动画结束时所支持的CSS样式应该达到的终值。通过把元素的样式属性值,从当前值逐渐调整到这个散列对象所指定的终值从而产生动画。
duration,持续时间,不可缺省,取值和speed一样
easing,一个函数名称,用于实现缓和效果,核心jQuery提供了两个缓和函数,linear和swing。
callback,回调函数
options,指定动画参数值的对象,duration,easing,complete(完成时调用的函数),queue(如果为false,则动画会直接运行而不加入队列)


通常来说,能“动”的是数值型的属性(left,top,width,height,opacity,字体大小,边框尺寸)。

实际案例

坠落动画

$('.myAnimate').each(function(){
    $(this)
        .css('position','relative')
        .animate(
        {
            opacity:0,
            top:$(windows).height() - $(this).height() - $(this).position().top
        },
        'slow',
        function(){$(this).hide();});
});

top的计算是利用了Dimensions插件的position()命令以便确定相对于页面的元素的初始位置。


消散动画

$('.myAnimate').each(function(){
    var position = $(this).position();
    $(this)
        .css({
            position:'absolute',
            top:position.top,
            left:position.left
        })
        .animate(
        {
            opacity:'hide',
            width:$(this).width()*5,
            height:$(this).height()*5,
            top:position.top - ($(this).height()*5/2),
            left:position.left - ($(this).width()*5/2)
        },
        'normal');
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值