js_animation_B块和块碰撞及封装函数动画 2024-05-09 16:00:19 碰撞检测 – 块与块在学习块和块的碰撞之前,我们先来分析一下块相撞的条件:两个块碰撞的交点,等于两个块分别为边缘到高和的一半和宽和的一半当两个元素相撞时,那么中心点的距离,一定会小于两元素宽高和的一半我们来编写一下:1.这里先来定义编写的check_block_collision (block1,block2)2.然后又加了一个div元素,通过div:nth-of-type(2)获取它3.分别给div1和div2的speedX和speedY设置他们的运动像素4.修改move函数中传入el参数,才可同时控制两个元素的移动,将move中的div全都改为el5.修改check_border_collision(el)函数中的参数,将left和top中的设置的-1反方向运动前面都要加上el,使其分别控制每个元素的运动6.在最后setInterval中将move(div1)和move(div2)分别调用我们来看一下运行结果:封装动画函数1.要封装一个getStyle的函数,通过这个函数可以处理兼容性,来取得当前元素正在应用的样式。2.另外,这个函数要实现的效果是最开始速度快,逐渐速度减小,最后速度为0时达到目的地;接着要把这个函数改变透明度、宽高、left、top这些值。3.最后这个函数还要实现同时left和top都要改变多个元素来进行这个动画。先来做一下水平由快到慢移动:先来看js封装函数:再来看从html中调用:向左移动500个像素,运行效果如下:以上就是我们的封装函数,当然这还没完,设置透明度动画:这里注意,我们的animate只要调用一次,它就会设定一个setInterval如果说调用多个animate对于同一个元素,就会有多个setInterval同时操作这个元素也就是说这个元素的运动速度就会越来越快,要解决这个问题就要将setInterval进行清除每一次进animate的时候,它都将前面的setInterval清掉为了避免我们的id在出了animate之后被消除,我们可以将id放在el上:el.timerId这时候进来animate先来清除元素的timerId:clearInterval(el.timerId);那么下一次它就会有timerId的值,这时候再进入animate就会将前一个清掉并重新设定这样就避免多次调用animate来改变同一个元素它会越来越快现在大家注意,只是处理了有px单位的这几个属性如果现在想要设定opacity,我们应该对opacity进行一个处理,进来的时候先判定,prpperty是不是opacity:if(property === ‘opacity’){current = Math.round(parseFloat(getStyle(el,’opacity’)) * 100);//扩大100倍之后取整,是为了像下面普通元素一样计算}else{current = parseInt(getStyle(el,property));}同样在speed下面也要进行一下设置:if(property === ‘opacity’){el.style.opacity = (current + speed) / 100;}else{el.style[property] = current + speed + ‘px’;}再从html文件中将animate中参数为opacity我们来看一下具体的代码和效果:先来看js封装函数代码:再来看html调用它的代码:运行效果如下:现在我们发现,它在改变的时候只能改变一个属性,那么怎么能让这个函数同时改变多个属性呢?我们就应该在传递参数的时候传递多个参数,且在我们的处理中同时处理多个属性。最方便的方式就是当调用animate的时候传递一个对象,这个对象左边的key是我们要改变的属性,而value是我们所要达到的某值。也就是说,我们要将后两个参数进行合并即:function animate(el.properties){…}接着在setInterval中,进行一个for循环具体的封装函数、调用、效果如下:先来看js封装代码:再来看html调用代码:运行效果如下:- 写作不易,大家多多关注,谢谢啦----web分享,分享的不只是web 赞 (0) 相关推荐 从一个超时程序的设计聊聊定时器的方方面面 目录 如何设计一个靠谱的超时程序 JS引擎的运行机制是怎样的? 如何避免程序卡顿? 如何判断H5程序是从后台台恢复过来的? 如何理解定时器的丢弃行为? 在开发中如何选择使用合适的定时器? 有没有一键回 ... JavaScript入门-函数function(二) JavaScript入门-函数function(二) 递归函数 什么是递归函数? 递归简单理解就是,在函数体里,调用自己. //我们在求一个10的阶乘的时候,可能会这么做 //写一个循环 var to ... 如何创建一个FB块,并进行加密封装成库文件 之前经常有朋友问什么是结构化编程,什么是FB块,怎么去建一个FB块,又或者有问到三菱PLC有没有库文件,怎么创建和调用等等问题.那么小编就给大家介绍一下FB块相关的知识,以及做一些解答吧. 1.什么是 ... 60块买块“小木桩”放水里就发芽?打脸了 不知道从什么时候开始,周围同事的桌子上都摆上一块小木桩,还以为是老板发的新玩意,周围4个同事,桌子上都摆的,只剩下我没摆了,看着还真有点别扭,午休的时候赶紧去问了问同事,还是小声问的,"这是 ... 这就是为什么现在房顶整块整块掉白灰的原因。 这就是为什么现在房顶整块整块掉白灰的原因。 现在农村耕地每家每户一小块一小块的适合现代农业的发展吗? 现在农村农户每家一小块一小块的耕地真的不适合现代化农业的发展了. 时代的大潮奔腾向前,势不可挡,当然也淘汰和沉淀了一些陈碴与杂质.(包括某时段的政策与方针).就讲当初的包田到户,在分田方法上是非常&q ... 农村的人买肉成百的买,城市人买肉三块五块的买,为什么会这样? 我出生于甘肃的偏远山区,成年后出嫁到小县城生活了30年有余.那么,可以说对农村和小县城两种不同环境的生活是非常熟悉和了解.因此,这里用切身体会为大家分享一下,农村人与城里人在选购消费肉食方面具体有哪些 ... DOM - 封装函数 我们来学习封装函数之前,先来回顾一下获取元素节点的方法 获取元素节点的方法 我们之前学了有四个方法: 1.Id document.getElementById() ... CAD中写块和块定义设置单位对文件有何影响? 在CAD中如果只是定义块而不写的话,则这个块只能在这个文档中使用;而若写块的话,该块会被存储入硬盘,在其他文件中如果也需要这样的块只需要调用命令(I)即可.但在写块或者定义块中我们都会遇到一个问题-- ... JavaScript封装函数:获取下一个/上一个兄弟元素节点 要求: 获得下一个/上一个兄弟元素节点,不包括文本节点等 解决IE兼容性问题 代码实现: 获得下一个兄弟元素节点: function getNextElement(element) { var el ... 黄焖鱼块--鱼块鲜嫩汤汁浓稠,比黄焖鸡还好吃! 鱼块鲜嫩汤汁浓稠的用料鲈鱼(鱼身) 600g 油豆腐 70g金针菇 120g 玉米淀粉 10g大葱 1段 生姜 5片大蒜 5瓣 青椒 2个小米辣 3个 盐 适量食用油 适量 葱伴侣黄豆酱 1勺味道美臻 ...