实现动画效果核心方式的js代码
发布时间:2024-04-19 10:45:39
标签:js,动画效果,核心方式
下边我就简单说一下过程和原理。
第一步:实现一个匿名函数并能自己执行。
(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>
0
投稿
猜你喜欢
- 问题说明最近在写爬虫,由于单个账号访问频率太高会被封,所以需要在爬虫执行一段时间间隔后自己循环切换账号所以就在想,有没有像单片机那样子设置一
- 问题:编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。例如:1 +
- 1、说明一个类没有声明自己的元类,默认他的元类就是type,除了使用元类type,用户也可以通过继承type来自定义元类。2、实例我们可以使
- 前几天,Opera宣布其用户已经超过1亿——桌面版和手机版均超过5000万。Opera Mini是一个很优秀的手机浏览器,对手机用户而言,O
- Django自带有个强大的后天管理系统,接下来我就给大家介绍一下x的admin一些强大的操作及后台美化。首先给大家介绍一些xadmin的注册
- 我就废话不多说了,还是直接看代码吧!from IPython.display import display,Latex,Math%matpl
- 引言周末我和小明又开始了疯狂的考证学习,昨晚通过合法的手段获取了一套学习资料,却遇到了一个问题:一套完整的资料,被机构拆分成了162个wor
- 本文详细讲述了Python使用MySQLdb for Python操作数据库的方法,分享给大家供大家参考。具体如下:一般来说网站就是要和数据
- 存储过程的功能非常强大,在某种程度上甚至可以替代业务逻辑层,接下来就一个小例子来说明,用存储过程插入或更新语句。1、数据库表结构所用数据库为
- SQLAlchemy是Python编程语言下的一款开源软件,提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行。SQLAl
- 1 写在前面1. 本文介绍的是基于TensorFlow tf.estimator接口的深度学习网络,而非TensorFlow&nb
- python版本和ssl版本都会导致 requests在请求https网站时候会出一些错误,最好使用新版本。1 Python2.6x use
- 1、打印九九乘法表#只打印结果for i in range(1,10): for j in range(1,i+1): &nbs
- javascript的分号代表语句的结束符,但由于javascript具有分号自动插入规则,所以它是一个十分容易让人模糊的东西,在一般情况下
- 无论哪种编程语言,时间肯定都是非常重要的部分,今天来看一下python如何来处理时间和python定时任务,注意咯:本篇所讲是python3
- 在操作过程中,两表查询都没有问题,但是三表查询就开始出现问题有以下三张表,分表为pl表(uid,content),user表(id,user
- 一直以来,jQuery是我最喜欢的框架之一。1月14号 1.4 Released版本发布后,就迫不及待去了解了一下1.4版本对比以往1.3.
- Bulk 方式进行目标数据的Load,是Informatica提供的一种高性能的Load数据方式。它利用数据库底层机制,依靠调用数据库本身提
- 代码如下:<% myDSN="DSN=xur;uid=xur;pwd=xur"mySQL="s
- Python 中 list.sort() 是列表中非常常用的排序函数, key 参数可以对单个属性进行排序。但是想要实现类似 sql 中 o