实现动画效果核心方式的js代码


Posted in Javascript onSeptember 27, 2013

下边我就简单说一下过程和原理。
第一步:实现一个匿名函数并能自己执行。

(function(){ })()

 这个函数在一样编的好的JS代码中经常会见到,起到闭包,自动执行的效果,在函数后加一对()表示自动执行,前边的匿名函数需要用()包起来,这样才能为宿主(我们的BOM环境)理解,里面的function(){}这就是个匿名函数。
第二步:实现动画,以改变一个box的秀明度来说明。
id为animation的div
<div id="animation"></div>

 要实现animation的透明渐变,需要不断改变其透明度opacity,我们这样实现
for(var i=0;i<10;i++){ 
    setTimeout((function(pos){ 
        return function(){ 
            someAnimation(pos); 
        } 
    })(i/10),i*100) 
}

下面我们来解释一下这段代码,这段代码比较复杂和难于理解,所以刚开始不明白也没事,慢慢就懂了,首先解释一下setTimeout在此处的用法
setTimeout((function(){})(i/10),i*100)

 setTimeout第一个参数为要执行的函数,第二个参数为时间参数,意为多久后开始执行
而js没有块的概念,作用域范围是以函数为准的,所以我们这里使用的闭包,实现原理如下:
(function(){ 
return function(){} 
})()

 这校才可以执行for循环,达到我们想要的结果,如果我们不使用闭包,代码会如下:
for(var i=0;i<10;i++){ 
setTimeout(function(pos){ 


someAnimation(pos); 

}(i/10),i*100) 
}

这样的for循环只会执行一次,即i=9时,感兴趣的同学可以自己试试
到目前为止,整个代码是这个样子滴
(function(){ 
            function someAnimation(args){ 
                document.getElementById("animation").style.opacity=args; 
            } 
            for(var i=0;i<10;i++){ 
                    setTimeout((function(pos){ 
                        return function(){ 
                            someAnimation(pos); 
                        } 
                    })(i/10),i*100) 
            } 
})()

 这样实现了id为animation的box透明度从0到1的一次变化。
第三步,实现不停地变化,我们用setInterval来实现
setInterval也是两个参数,第一个是要执行的函数,第二个是执行间隔时间
至此代码如下:
(function(){ 
            function someAnimation(args){ 
                document.getElementById("animation").style.opacity=args; 
            } 
            setInterval(function(){ 
                for(var i=0;i<10;i++){ 
                    setTimeout((function(pos){ 
                        return function(){ 
                            someAnimation(pos); 
                        } 
                    })(i/10),i*100) 
                } 
            },2000); 
        })()

下次我会实现这个代码的面向对象化设计和出一些具体的实现方案,方便学习使用。
全部代码如下
<!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" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <title></title>
    <style type="text/css">
        #animation{width:500px;height:350px;background-color:red;}
    </style>
</head>
<body>
    <div id="animation">
    </div>
    <script type="text/javascript">
        (function(){
            function someAnimation(args){
                document.getElementById("animation").style.opacity=args;
            }
            setInterval(function(){
                for(var i=0;i<10;i++){
                    setTimeout((function(pos){
                        return function(){
                            someAnimation(pos);
                        }
                    })(i/10),i*100)
                }
            },2000);
        })()
    </script>
</body>
</html>
Javascript 相关文章推荐
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
Nov 10 Javascript
利用js实现遮罩以及弹出可移动登录窗口
Jul 08 Javascript
node.js学习总结之调式代码的方法
Jun 25 Javascript
JavaScript前端图片加载管理器imagepool使用详解
Dec 29 Javascript
使用Jquery实现每日签到功能
Apr 03 Javascript
zepto中使用swipe.js制作轮播图附swipeUp,swipeDown不起效果问题
Aug 27 Javascript
JavaScript中的Reflect对象详解(ES6新特性)
Jul 22 Javascript
AngularJS深入探讨scope,继承结构,事件系统和生命周期
Nov 02 Javascript
BootStrap学习笔记之nav导航栏和面包屑导航
Jan 03 Javascript
详解从零搭建 vue2 vue-router2 webpack3 工程
Nov 22 Javascript
JS添加或删除HTML dom元素的方法实例分析
Mar 05 Javascript
微信小程序scroll-view不能左右滑动问题的解决方法
Jul 09 Javascript
javascript中call和apply方法浅谈
Sep 27 #Javascript
文本框回车提交与禁止提交示例
Sep 27 #Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
Sep 26 #Javascript
原生js实现改变随意改变div属性style的名称和值的结果
Sep 26 #Javascript
js克隆对象、数组的常用方法介绍
Sep 26 #Javascript
js将当前时间格式转换成时间搓(自写)
Sep 26 #Javascript
使用jquery获取网页中图片高度的两种方法
Sep 26 #Javascript
You might like
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
深入研究PHP中的preg_replace和代码执行
2018/08/15 PHP
PHP常见数组排序方法小结
2018/08/20 PHP
yii2实现Ueditor百度编辑器的示例代码
2018/11/02 PHP
laravel5环境隐藏index.php后缀(apache)的方法
2019/10/12 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/01/13 Javascript
理解Javascript_02_理解undefined和null
2010/10/11 Javascript
JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)
2012/04/07 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
js实现网页定位导航功能
2017/03/07 Javascript
jQuery实现验证码功能
2017/03/17 Javascript
jQury Ajax使用Token验证身份实例代码
2017/09/22 Javascript
vue生成随机验证码的示例代码
2017/09/29 Javascript
Angular表格神器ui-grid应用详解
2017/09/29 Javascript
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
详解小程序退出页面时清除定时器
2019/04/28 Javascript
JavaScript中的null和undefined用法解析
2019/09/30 Javascript
vue-element-admin 菜单标签失效的解决方式
2019/11/12 Javascript
[44:22]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第一场 11.01
2020/11/02 DOTA
Python实现端口复用实例代码
2014/07/03 Python
Python开发常用的一些开源Package分享
2015/02/14 Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
2018/01/04 Python
python操作mysql代码总结
2018/06/01 Python
Python中修改字符串的四种方法
2018/11/02 Python
selenium 安装与chromedriver安装的方法步骤
2019/06/12 Python
用sqlalchemy构建Django连接池的实例
2019/08/29 Python
Python搭建代理IP池实现接口设置与整体调度
2019/10/27 Python
解决tensorflow训练时内存持续增加并占满的问题
2020/01/19 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
英国第一摩托车和摩托车越野配件商店:GhostBikes
2019/03/10 全球购物
Kiwi.com中国:找到特价机票并发现新目的地
2019/10/27 全球购物
大学同学聚会邀请函
2014/01/29 职场文书
住房抵押登记委托书
2014/09/27 职场文书
女性健康知识讲座主持词
2015/07/04 职场文书
什么是Python装饰器?如何定义和使用?
2022/04/11 Python
Win11快速关闭所有广告推荐
2022/04/19 数码科技