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 相关文章推荐
js文字滚动停顿效果代码
Jun 28 Javascript
Javascript 强制类型转换函数
May 17 Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
Jan 13 Javascript
jQuery旋转插件—rotate支持(ie/Firefox/SafariOpera/Chrome)
Jan 16 Javascript
jquery 模板的应用示例
Nov 12 Javascript
js取整数、取余数的方法
May 11 Javascript
浏览器缩放检测的js代码
Sep 28 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
Nov 13 Javascript
js实现页面跳转的几种方法小结
May 16 Javascript
angular4+百分比进度显示插件用法示例
May 05 Javascript
vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)
Feb 01 Javascript
基于JavaScript实现十五拼图代码实例
Apr 26 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
那些年一起学习的PHP(二)
2012/03/21 PHP
php实现对两个数组进行减法操作的方法
2015/04/17 PHP
详解YII关联查询
2016/01/10 PHP
Yii实现文章列表置顶功能示例
2016/10/18 PHP
php双层循环(九九乘法表)
2017/10/23 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
php实现有序数组旋转后寻找最小值方法
2018/09/27 PHP
Javascript学习笔记之相等符号与严格相等符号
2014/11/23 Javascript
jQuery中offset()方法用法实例
2015/01/16 Javascript
jquery 表单验证之通过 class验证表单不为空
2015/11/02 Javascript
js实现select选择框效果及美化
2016/08/19 Javascript
老生常谈JavaScript中的this关键字
2016/10/01 Javascript
JavaScript Canvas绘制圆形时钟效果
2020/08/20 Javascript
vue-cli+webpack在生成的项目中使用bootstrap实例代码
2017/05/26 Javascript
Mint UI 基于 Vue.js 移动端组件库
2017/11/07 Javascript
如何编写一个完整的Angular4 FormText 组件
2017/11/18 Javascript
JS开发常用工具函数(小结)
2019/07/04 Javascript
Vue使用自定义指令实现拖拽行为实例分析
2020/06/06 Javascript
python动态性强类型用法实例
2015/05/09 Python
Python使用Scrapy爬取妹子图
2015/05/28 Python
python爬虫 urllib模块发起post请求过程解析
2019/08/20 Python
Python2与Python3的区别详解
2020/02/09 Python
Pymysql实现往表中插入数据过程解析
2020/06/02 Python
一款基于css3的列表toggle特效实例教程
2015/01/04 HTML / CSS
使用HTML5拍照示例代码
2013/08/06 HTML / CSS
Myprotein芬兰官网:欧洲第一运动营养品牌
2019/05/05 全球购物
L’urv官网:精品女性运动服品牌
2019/07/07 全球购物
北美最大的零售退货翻新商:VIP Outlet
2019/11/21 全球购物
nohup的用法
2012/11/26 面试题
小学教师国培感言
2014/02/08 职场文书
乡村文明行动实施方案
2014/03/29 职场文书
《与朱元思书》的教学反思
2014/04/17 职场文书
员工安全生产责任书
2014/07/22 职场文书
2014年领导班子专项整治整改方案
2014/09/28 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
Anaconda安装pytorch及配置PyCharm 2021环境
2021/06/04 Python