jQuery循环动画与获取组件尺寸的方法


Posted in Javascript onFebruary 02, 2015

本文实例讲述了jQuery循环动画与获取组件尺寸的方法。分享给大家供大家参考。具体分析如下:

一、前言

1、jQuery中的animate()方法允许您创建自定义的动画。

animate() 方法几乎可以操作所有 CSS 属性,不过当使用 animate() 时,必须使用Camel标记法书写所有的属性名,比如,必须使用paddingLeft而不是padding-left,使用marginRight而不是margin-right,等等。同时,色彩动画并不包含在核心 jQuery 库中。如果需要生成颜色动画,您需要从 jquery.com 下载 Color Animations 插件。

2、通过jQuery,很容易处理元素和浏览器窗口的尺寸。
jQuery提供如下属性获取元素和浏览器窗口的尺寸。

jQuery循环动画与获取组件尺寸的方法

二、基本目标

如下图:

jQuery循环动画与获取组件尺寸的方法

在网页中创建两个按钮,一个按钮能够使组件的尺寸在显示与隐藏状态中切换,一个按钮能够使循环动画在开始与停止状态中切换

单纯的JQ没有暂停与开始动画播放的功能,必须下载jQuery Pause插件完成。本例而仅仅通过JavaScript去控制循环动画,所以每次暂停仅能在其完成一次循环体才能够打断,并不能做到在随意位置暂停开始的功能。

三、制作过程

以下是网页所有代码,之后再一部分一部分地解释:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  

<html xmlns="http://www.w3.org/1999/xhtml">  

    <head>  

        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  

        <title>JQ动画</title>  

        <script type="text/javascript" src="js/jquery-1.11.1.js"></script>  

        <script>  

var interval;  

var i = 0;  

var j = 0;  

function divanimate() {  

    $(".d_class").animate( {left : "+=100px"}, 500);  

    $(".d_class").animate( {top : "+=100px" }, 500);  

    $(".d_class").animate( {left : "-=100px"}, 500);  

    $(".d_class").animate( {top : "-=100px" }, 500);  

}  

function cycle() {  

    divanimate();  

    interval = setInterval("divanimate()", 2000);  

}  

$(document).ready(function() {  

    $("#stop").click(function() {  

        i++;  

        if (i % 2 != 0)  

            cycle();  

        else  

            clearInterval(interval);  

    });  

    $("#show").click(function() {  

        j++;  

        if (j % 2 != 0) {  

            var txt = "";  

            txt += "<p align=\"center\">高: " + $("#d_id").height() + "px</br>";  

            txt += "宽: " + $("#d_id").width() + "px</p>";  

            $("#d_id").html(txt);  

        } else {  

            var txt = "";  

            $("#d_id").html(txt);  

        }  

    });  

})  

    </script>  

    </head>  

  

    <body>  

        <button id="show">  

            显示/隐藏方块尺寸  

        </button>  

        <button id="stop">  

            开始/停止动画的循环  

        </button>  

        <div id="d_id" class="d_class"  

            style="width: 100px; height: 100px; background-color: #000; position: absolute; top: 50px; color: #FFF; left:50px;"></div>  

    </body>  

</html>

1、<body>部分
没有什么特别的,就是定义两个按钮在与一个图层。值得注意的是,在图层的style参数值中必须加入position:absolute一项,否则此图层无法在网页中随意移动

background-color是图层的背景颜色。color是图层中的字体颜色。

需要定义id与class两个参数,因为JQ动画需要通过class来控制,而JQ获取组件尺寸则需要通过id来控制。

同时,摆放图层的位置需要注意,是用left与top来放置,而不是margin-left与margin-top去放置,因为JQ动画控制代码是用left与top去控制的。如果使用margin-left与margin-top去放置在动画开始的瞬间会有小幅度的失真。

2、<head>部分

也就是核心代码部分:

<head>  

    <!--网页编码,标题,使用JQ-->  

        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  

        <title>JQ动画</title>  

        <script type="text/javascript" src="js/jquery-1.11.1.js"></script>  

        <script>  

/*这相当于记录循环状态的指针,为下面清理clearInterval()所用*/          

var interval;  

/*i是用来记录点击“开始/停止动画的循环”按钮的次数,如果此按钮点击奇数次就开始循环,偶数次就终止循环*/  

var i = 0;  

/*j是用来记录点击“显示/隐藏方块尺寸”按钮的次数,如果此按钮点击奇数次就显示尺寸,偶数次就隐藏尺寸*/  

var j = 0;  

/*由于没有封装好的toggle()方法,我们需要这么做*/  

function divanimate() {  

    /*这里只能通过图层的class值来控制图层,获取class值的前面的符号是.,而不是#*/  

    <!--要求class为d_class的图层,先向右偏移100px,再向下偏移100px,之后向左偏移100px,最后向上偏移100px回到原位,每个动作500毫秒以内完成,也就是0.5秒-->  

    <!--这里注意的是left的意义是x轴的正方向,屏幕最左为0px,越往右数值越大,top是y轴的负方向,屏幕最上为0px,越往下数值越大-->  

    $(".d_class").animate( {left : "+=100px"}, 500);  

    $(".d_class").animate( {top : "+=100px" }, 500);  

    $(".d_class").animate( {left : "-=100px"}, 500);  

    $(".d_class").animate( {top : "-=100px" }, 500);  

}  

function cycle() {  

    /*此函数是首先执行divanimate()函数,之后,每2000毫秒,也就是每2秒执行divanimate()一次。这个间隔刚好是一次动画所完成时间,如果不打断此循环的话,刚好能够无间隔地无缝完美执行循环动画。*/  

    /*第一行必须存在,否则每次点击开始按钮,都要等2秒,才开始动画*/  

    divanimate();  

    interval = setInterval("divanimate()", 2000);  

}  

/*$(document).ready(function(){})意为一加载网页就加载的函数,所有按钮的动作类,必须放在其中*/  

$(document).ready(function() {  

    $("#stop").click(function() {  

        i++;  

        if (i % 2 != 0)  

            cycle();  

        else  

        /*终止循环与上面的开始循环是javascript的函数,都说了jquery仅仅是javascript的扩展。*/  

            clearInterval(interval);  

    });  

    $("#show").click(function() {  

        j++;  

        if (j % 2 != 0) {  

            var txt = "";  

            txt += "<p align=\"center\">高: " + $("#d_id").height() + "px</br>";  

            txt += "宽: " + $("#d_id").width() + "px</p>";  

            /*这个方法能够在相应的组件标签中输出文本*/  

            $("#d_id").html(txt);  

        } else {  

            var txt = "";  

            $("#d_id").html(txt);  

        }  

    });  

})  

</script>  

</head>

希望本文所述对大家的jQuery程序设计有所帮助。

Javascript 相关文章推荐
Array.slice()与Array.splice()的返回值类型
Oct 09 Javascript
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
Apr 19 Javascript
利用JS判断用户是否上网(连接网络)
Dec 23 Javascript
jQuery根据ID获取input、checkbox、radio、select的示例
Aug 11 Javascript
Jquery解析Json格式数据过程代码
Oct 17 Javascript
详解Jquery的事件操作和文档操作
Dec 19 Javascript
JS实现的系统调色板完整实例
Dec 21 Javascript
在javaScript中检测数据类型的几种方式小结
Mar 04 Javascript
10个经典的网页鼠标特效代码
Jan 09 Javascript
使用vue2.0创建的项目的步骤方法
Sep 25 Javascript
深入浅析Vue 中 ref 的使用
Apr 29 Javascript
百度小程序自定义通用toast组件
Jul 17 Javascript
基于jQuery实现最基本的淡入淡出效果实例
Feb 02 #Javascript
JavaScript对数字的判断与处理实例分析
Feb 02 #Javascript
JavaScript组件焦点与页内锚点间传值的方法
Feb 02 #Javascript
JavaScript分秒倒计时器实现方法
Feb 02 #Javascript
JavaScript使用setInterval()函数实现简单轮询操作的方法
Feb 02 #Javascript
同一个网页中实现多个JavaScript特效的方法
Feb 02 #Javascript
JavaScript实现同步于本地时间的动态时间显示方法
Feb 02 #Javascript
You might like
对javascript和select部件的结合运用
2006/10/09 PHP
php操作mongoDB实例分析
2014/12/29 PHP
thinkphp自带验证码全面解析
2016/09/18 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
laravel 实现登陆后返回登陆前的页面方法
2019/10/03 PHP
用JQuery在网页中实现分隔条功能的代码
2012/08/09 Javascript
jquery实现树形二级菜单实例代码
2013/11/20 Javascript
js使用循环清空某个div中的input标签值
2014/09/29 Javascript
js改变Iframe中Src的方法
2015/05/05 Javascript
JS实现iframe自适应高度的方法(兼容IE与FireFox)
2016/06/24 Javascript
js方法数据验证的简单实例
2016/09/17 Javascript
详解angularJs中关于ng-class的三种使用方式说明
2017/06/02 Javascript
全面解析Node.js 8 重要功能和修复
2017/06/02 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
2018/09/13 Javascript
layui实现三级导航菜单
2019/07/26 Javascript
微信小程序绑定手机号获取验证码功能
2019/10/22 Javascript
node.js开发辅助工具nodemon安装与配置详解
2020/02/06 Javascript
ES6中Set和Map用法实例详解
2020/03/02 Javascript
JavaScript 正则应用详解【模式、欲查、反向引用等】
2020/05/13 Javascript
python数据结构树和二叉树简介
2014/04/29 Python
解决Pycharm后台indexing导致不能run的问题
2019/06/27 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
Django的用户模块与权限系统的示例代码
2019/07/24 Python
Django 请求Request的具体使用方法
2019/11/11 Python
python 基于wx实现音乐播放
2020/11/24 Python
如何用H5实现一个触屏版的轮播器的实例
2017/01/09 HTML / CSS
应届毕业生就业自荐信
2013/10/26 职场文书
项目投资意向书
2014/04/01 职场文书
出国英文推荐信
2014/05/10 职场文书
学校党员干部承诺书
2015/05/04 职场文书
致运动员加油稿
2015/07/21 职场文书
超市啤酒狂欢夜策划方案范文!
2019/07/03 职场文书
应届生个人的求职(自荐信范文2篇)
2019/08/23 职场文书
Python实现打乒乓小游戏
2021/09/25 Python
利用python做数据拟合详情
2021/11/17 Python
Python字符串的转义字符
2022/04/07 Python