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

时间:2024-04-19 10:45:39 

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


(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>
标签:js,动画效果,核心方式
0
投稿

猜你喜欢

  • python matplotlib实现条形图的填充效果

    2022-03-12 07:55:20
  • Python Web框架之Django框架cookie和session用法分析

    2021-08-23 05:30:15
  • python妹子图简单爬虫实例

    2022-12-11 05:47:50
  • javascript replace()用法详解附实例代码

    2024-04-17 09:42:52
  • MySQL中Distinct和Group By语句的基本使用教程

    2024-01-26 09:51:53
  • 基于Python编写一个简单的端口扫描器

    2021-09-19 09:21:22
  • MySQL5.7 JSON类型使用详解

    2024-01-15 23:57:04
  • Python实现选择排序

    2021-06-17 03:23:40
  • 详解python实现邮件解析的方法

    2023-02-19 04:03:20
  • oracle数据库下统计专营店的男女数量的语句

    2024-01-17 04:18:17
  • python实现一个围棋小游戏

    2022-02-02 18:52:50
  • 树莓派(python)与arduino串口通信的详细步骤

    2022-05-29 15:31:06
  • MySQL索引概念及七种索引类型分享介绍

    2024-01-23 03:55:27
  • 解决pytorch-gpu 安装失败的记录

    2023-04-04 05:44:44
  • 使用Python创建简单的HTTP服务器的方法步骤

    2023-07-17 01:33:27
  • TensorFlow实现随机训练和批量训练的方法

    2022-06-07 07:45:29
  • 解决Building wheel for wrapt (setup.py) ... error的问题

    2023-09-25 22:24:17
  • Python如何调用JS文件中的函数

    2022-11-21 01:23:11
  • Python中 传递值 和 传递引用 的区别解析

    2023-12-26 07:05:22
  • Python 查看文件的编码格式方法

    2021-11-01 10:50:39
  • asp之家 网络编程 m.aspxhome.com