资讯专栏INFORMATION COLUMN

回味jQuery系列(2)-动画效果

IamDLY / 2653人阅读

摘要:参数代表回调函数。参数为变化样式的对象必传,速度可选,回调函数可选。这是,肯定会想到采用回调函数来解决。确实可以解决问题,但是当列队动画变多时,回调函数的可读性大大降低确实一个非常烦人的问题。提供了一个类似于回调函数的方法。

jQuery-动画效果浅析

动画可以给网站的用户体验加分,让网页更加活泼。不过,什么东西都需要适量,简易快捷的动画会给网站加分不少。比如购物网站的个人中心按钮hover效果啊,各种hover产生的动画等。不过,现在CSS3的新特性可以模拟很多动画,可以多用CSS3去实现一些动画效果了。比如box-shadow,text-shaow,animation,transform等。jquery作为全明星级别插件,是有很强的动画功能的。

全局属性

jQuery在动画中提供了两个全局属性(不常在代码中使用),分别为:
$.fx.interval,设置每秒运行的帧数,默认13ms,越小越流畅,但太小耗费浏览器性能
$.fx.off,关闭页面上所有的动画,浏览器不支持动画时可以全部关掉。

$.fx.interval = 100; //默认为13
$.fx.off = true; //默认false

那么,我们看看jquery都提供了哪些动画方法。

显示&&隐藏

jQuery 中显示方法为:.show(speed,callback),隐藏方法为:.hide(speed,callback)。在无参数的时候,只是硬性的显示内容和隐藏内容。

$(".show").click(function () { 
    $(".xzavier").show();
});
$(".hide").click(function () { 
    $(".xzavier").hide();
});

两个可选参数。参数speed,毫秒,表示运动所花时间,用速度来说更切合动画一词。可以是number,也可以是这个三个参数字符串:slow、normal 和fast,分别对应600ms、400 ms和200ms。如果传参错误或者不传,默认normal,即400ms。参数callback代表回调函数。

$(".show").click(function () {
    $(".xzavier").show("fast"); 
});
$(".show").click(function () {
    $(".xzavier").show("");   //normal
});

$(".show").click(function () {
    $(".xzavier").show("fast", function () {
        console.log("animation is over");  //其他可执行代码
    });
});

原理上,.hide(speed,callback)方法其实就是在行内设置CSS 代码:display:none; 而.show(speed,callback)方法要根据原来元素是区块还是内联来决定,如果是区块,则设置CSS 代码:display:block; 如果是内联,则设置CSS 代码:display:inline。

.show()和.hide()的在同一元素的时候,需要一个按钮切换操作,或者需要进行一些条件判
断。而jQuery 提供给我们一个类似功能的独立方法:.toggle(speed,callback),自动切换。

$(".toggle").click(function () {
    $(this).toggle("fast");
});
收缩&&展开

jQuery 提供了一组改变元素高度的方法:.slideUp(speed,callback),向上收缩、.slideDown(speed,callback),向下展开和.slideToggle(speed,callback),自动切换。

$(".slidedown").click(function () {
    $(".xzavier").slideDown("slow");
});
$(".slideup").click(function () {
    $(".xzavier").slideUp();
});
$(".slidetoggle").click(function () {
    $(".xzavier").slideToggle("fast");
});
淡入&&淡出

jQuery 提供了一组专门用于透明度变化的方法:.fadeIn(speed,callback),淡入、.fadeOut(speed,callback),淡出、.fadeToggle(speed,callback),自动切换。

$(".fadein").click(function () {
    $(".xzavier").fadeIn("slow");
});
$(".fadeout").click(function () {
    $(".xzavier").fadeOut();
});
$(".fadetoggle").click(function () {
    $(".xzavier").fadeToggle("fast");
});

这三个方法只能透明度变化只能从0 到100,或者从100 到0。不能自己设定变化到一个值。不过,jQuery提供了.fadeTo(speed,opacity,callback)方法解决了这个问题。

$(".fadeto").click(function () {
    $(".xzavier").fadeTo("1000", 0.4); //0.4代表上面方法的30
});

如果本身透明度大于指定值,会淡出,否则相反。

自定义动画

jQuery提供了几种简单常用的固定动画方法供开发使用。随着业务逻辑的复杂,这些简单动画无法满足我们更加复杂的需求。这时,开发可以使用jQuery提供了一个.animate(params,speed,easing,callback);方法来创建我效果更为复杂的自定义动画。
参数为:CSS变化样式的对象(必传),速度(可选),回调函数(可选)。easing后面解释。

.xzavier {width:200px;height:100px;opacity:1;}
$(".animate").click(function () {
    $(".xzavier").animate({
        "width" : "800px",
        "height" : "400px",
        "opacity" : 0.3
    });
});

class为xzavier的盒子多重动画同步运动。变宽,变长,变淡。

$(".animate").click(function () {
    $(".xzavier").animate({
        "top" : "400px", 
        "left" : "200px"
    });
});

如果元素位置需要运动变化,需要设置元素的position为absolute。

jQuery还提供了自定义动画的累加、累减功能。

$(".animate").click(function () {
    $(".xzavier").animate({
        "top" : "+=100px",
        "left" : "+=100px"
    });
});

包括jquery固定的几个动画在内,都有可选参数easing,即运动方式,seasing有两个值:swing(缓动)、linear(匀速),默认为swing。不过这个参数很少用到O(∩_∩)O~

$(".animate").click(function () {
    $(".xzaiver").animate({
        left : "800px"
    }, "slow", "swing");
    $(".xzavier").animate({
        top : "40px"
    }, "fast", "linear");
});
列队动画

自定义实现列队动画的方式,有3种:
1.在回调函数中再执行一个动画

$(".animate").click(function () {
    $(".xzavier").animate({
        "left" : "800px"
    }, function () {
        $(".xzavier").animate({
            "top" : "400px"
        }, function () {
            $(".xzavier").animate({
                "opacity" : 0.3
            });
        });
    });
});

2.通过连缀来实现列队动画

$(".animate").click(function () {
    $(".xzavier").animate({
        "left" : "800px"
    }).animate({
        "top" : "400px"
    }).animate({
        "opacity" : 0.3
    });
});

3.通过顺序来实现列队动画(需要时同一元素动画,否则,就是同步动画)

$(".animate").click(function () {
    $(".xzavier").animate({"left" : "100px"});
    $(".xzavier").animate({"top" : "100px"});
    $(".xzavier").animate({"opacity" : 0.3});
});

这样来看,我们更倾向于后面两种写法,因为嵌套多了就出现了}}}}}}}}}}

连缀非动画方法

先看个问题:

//连缀
$(".xzavier").slideUp().slideDown().css("background", "#ccc");

这里面css方法并不是动画方法,不会排在列队之后执行,但是,我们又需要它在前面动画执行之后再执行。这是,肯定会想到采用回调函数来解决。

$(".xzavier").slideUp().slideDown(function () {
    $(this).css("background", "#ccc");
});

确实可以解决问题,但是当列队动画变多时,回调函数}}}}}}}}}}的可读性大大降低确实一个非常烦人的问题。jQuery 提供了一个类似于回调函数的方法:.queue()。.queue()方法将css方法跟随动画方法之后。如果还需继续调用动画方法,使用.dequeue()方法。

$(".xzavier").slideUp();
$(".xzavier").slideDown();
$(".xzavier").queue(function () {
    $(this).css("background", "#ccc");
    $(this).dequeue();
})
$(".xzavier").hide("slow");
停止动画&&延迟动画

停止正在运行中的动画:.stop()方法。可选参数:clearQueue, gotoEnd。clearQueue 传递一个布尔值,代表是否清空未执行完的动画列队,gotoEnd 代表是否直接将正在执行的动画跳转到末状态。

$(".stop").click(function () {
    $(".xzavier").stop(true ,true);
});

延迟执行动画:.delay()方法。可以在动画之前设置延迟,也可以在列队动画设置。

$(".animate").click(function () {
    $(".xzavier").delay(1000).animate({
        "opacity" : 0.3
    }, 1000);
    $(".xzavier").delay(1000).animate({
        "width" : "800px"
    }, 1000);
    $(".xzavier").animate({
        "height" : "400px"
    }, 1000);
});

周末好天气,打篮球去咯。代码,篮球,生活...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/80202.html

相关文章

  • 回味jQuery系列(1)-选择器

    摘要:选择器浅析最核心的组成部分就是选择器引擎,选择器引擎占了很大一部分。它继承了的语法,可以对元素的标签名属性名状态等进行快速准确的选择,并且不必担心浏览器的兼容性。在构造选择器时,尽量简单,只保证必要的确定性。 jQuery-选择器浅析 jQuery 最核心的组成部分就是:选择器引擎,选择器引擎Sizzle占了jQuery很大一部分。它继承了CSS 的语法,可以对DOM 元素的标签名、属...

    rubyshen 评论0 收藏0
  • 锋利的jQuery学习心得

    摘要:熟悉了插件的组织结构以及比较统一的修改和学习方法。项目结束后,抽时间专门学习的进一步知识。对于选择器的性能,自己在看到了类似问题无人回答,好奇之下自己测试了与的速度,并被网友指出使用不当。 智营销项目中开始尝试使用jQuery并获得了很大的帮助,项目结束之后专门花时间认真看本书,配合网上搜索的一些知识和源码,收获很大。首先就是在项目中实战边学边用了DOM的系列操作,并踩了JQ attr...

    focusj 评论0 收藏0
  • 【连载】前端个人文章整理-从基础到入门

    摘要:个人前端文章整理从最开始萌生写文章的想法,到着手开始写,再到现在已经一年的时间了,由于工作比较忙,更新缓慢,后面还是会继更新,现将已经写好的文章整理一个目录,方便更多的小伙伴去学习。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 个人前端文章整理 从最开始萌生写文章的想法,到着手...

    madthumb 评论0 收藏0
  • 个人分享--web前端学习资源分享

    摘要:前言月份开始出没社区,现在差不多月了,按照工作的说法,就是差不多过了三个月的试用期,准备转正了一般来说,差不多到了转正的时候,会进行总结或者分享会议那么今天我就把看过的一些学习资源主要是博客,博文推荐分享给大家。 1.前言 6月份开始出没社区,现在差不多9月了,按照工作的说法,就是差不多过了三个月的试用期,准备转正了!一般来说,差不多到了转正的时候,会进行总结或者分享会议!那么今天我就...

    sherlock221 评论0 收藏0

发表评论

0条评论

IamDLY

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<