JS动画效果(移动、透明度、缓冲、多物体)
2017-10-24 23:46
579 查看
JavaScript中可以通过setInterval()函数来实现动态效果。
setInterval()函数设置一个定时器,可以按照指定周期调用函数或计算表达式。setInterval()可以不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。
setInterval()函数用法:
clearInterval()函数用法:
消除无序列表符号:
设置透明度:
setInterval()函数设置一个定时器,可以按照指定周期调用函数或计算表达式。setInterval()可以不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。
setInterval()函数用法:
//每隔3000毫秒输出"Hello world" var timer = setInterval(function(){alert("Hello world"); }, 3000);
clearInterval()函数用法:
var timer = setInterval(function(){alert("Hello world"); }, 3000); //设置每3000毫秒输出"Hello world" clearInterval(timer); //取消定时器
移动动画
通过setInterval()设置定时器,周期性地修改div的left偏移属性,从而达到移动的效果。<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>速度动画</title> </head> <style type="text/css"> body,div,span{ margin: 0px; padding: 0px; } #div1 { width: 200px; left: -200px; height: 200px; background-color: red; position: relative; } #div1 span{ width: 20px; height: 50px; position: absolute; background-color: aqua; top: 75px; left: 200px; } </style> <script type="text/javascript"> window.onload = function () { var onDiv = document.getElementById("div1"); onDiv.onmouseover = function () { onMove(0); } onDiv.onmouseout = function () { onMove(-200); } } var timer; function onMove(target) { clearInterval(timer); var onDiv1 = document.getElementById("div1"); timer = setInterval(function () { if(target>onDiv1.offsetLeft) var speed = 10; else var speed = -10; if(onDiv1.offsetLeft!=target) onDiv1.style.left = onDiv1.offsetLeft + speed + "px"; else clearInterval(timer); },10) } </script> <body> <div id="div1"> <span>分享</span> </div> </body> </html>
透明度动画
周期性地修改透明度的值实现鼠标移入移出div透明度变化。<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>透明度动画</title> </head> <style> body,div{ padding: 0px; margin: 0px; } #div1{ width: 200px; height: 200px; background-color: red; opacity: 0.3; filter: alpha(opacity:30); } </style> <script> window.onload = function () { onDiv = document.getElementById("div1"); onDiv.onmouseover = function () { onMove(100); } onDiv.onmouseout = function () { onMove(30); } } var alpha = 30; var timer = null; var speed = 10; function onMove(target) { clearInterval(timer); onDiv =document.getElementById("div1"); timer = setInterval(function () { if(alpha < target){ alpha = alpha+speed; } else if(alpha > target){ alpha = alpha-speed; } else{ clearInterval(timer); return; } onDiv.style.filter = "alpha(opacity:"+alpha+");"; onDiv.style.opacity = alpha/100; },30); } </script> <body> <div id="div1"></div> </body> </html>
缓冲动画
现实中不是所有东西都是匀速移动的,在速度动画中移动是匀速的,下面例子在此基础上进行改进,定时器每次运行时修改变化速度可实现缓冲动画。<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>缓冲动画</title> </head> <style type="text/css"> body,div,span{ margin: 0px; padding: 0px; } #div1 { width: 200px; left: -200px; height: 200px; background-color: red; position: relative; } #div1 span{ width: 20px; height: 50px; position: absolute; background-color: aqua; top: 75px; left: 200px; } </style> <script type="text/javascript"> window.onload = function () { var onDiv = document.getElementById("div1"); onDiv.onmouseover = function () { onMove(0); } onDiv.onmouseout = function () { onMove(-200); } } var timer = null; function onMove(target) { clearInterval(timer); var onDiv1 = document.getElementById("div1"); timer = setInterval(function () { var speed = (target - onDiv1.offsetLeft)/20; speed = Math.floor(speed); if(onDiv1.offsetLeft!=target) onDiv1.style.left = onDiv1.offsetLeft + speed + "px"; else clearInterval(timer); },10) } </script> <body> <div id="div1"> <span>分享</span> </div> </body> </html>
多物体动画
当需要对多个相似物体设置动画时,例如列表中的多个选项,各个物体之间不能共用物体。下例中需要对每一个li设置初始透明度、定时器。<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>多物体动画</title> <style> body,ul,li{ padding: 0px; margin: 0px; } ul,li{ list-style: none; } li{ width: 200px; height: 100px; margin-top: 20px; background-color: red; filter: alpha(opacity:30); opacity: 0.3; } </style> <script> window.onload = function () { var allLi = document.getElementsByClassName("lis"); for(var i = 0;i < allLi.length;i++){ allLi[i].alpha = 30; allLi[i].timer = null; allLi[i].onmouseover = function () { onMove(this,400); } allLi[i].onmouseout = function () { onMove(this,200); } } } function onMove(obj,target) { clearInterval(obj.timer); obj.timer = setInterval(function () { var speed = (target - obj.offsetWidth)/30; speed = (speed>0)?Math.ceil(speed):Math.floor(speed); var cSpeed = (speed>0)?5:-5; if(obj.offsetWidth!=target){ obj.style.width = obj.offsetWidth + speed + "px"; if(obj.alpha<=100 && obj.alpha>=30){ obj.alpha = obj.alpha + cSpeed; if(obj.alpha>100) obj.alpha = 100; if(obj.alpha<30) obj.alpha = 30; obj.style.opacity = obj.alpha/100; obj.style.filter = "alpha(opacity:"+ obj.alpha +")"; } } else{ clearInterval(obj.timer); } },30) } </script> </head> <body> <div> <ul> <li class="lis"></li> <li class="lis"></li> <li class="lis"></li> </ul> </div> </body> </html>
杂项
body、ul、li自带默认边距对程序产生影响。使用padding:0px;margin:0px消除
消除无序列表符号:
list-style: none;
设置透明度:
filter: alpha(opacity:30); //IE浏览器 opacity: 0.3; //firefox等
相关文章推荐
- javascript动画效果之多物体缓冲运动
- js动画效果(移动、变化效果)实现整理
- JS实现物体带缓冲的间歇运动效果示例
- js实现div整块向上移动的动画效果
- Android基础-简单的动画实现 *补间动画 *透明度渐变 *旋转动画 *位移动画 *如果需要几个效果整合到一起,需要将所有效果全部放到set里
- JS多物体实现缓冲运动效果示例
- JS实现带缓冲效果打开、关闭、移动一个层的方法
- JS打开层/关闭层/移动层动画效果的实例代码
- js 实现简单的动画效果(小圆移动)
- JS实现带缓冲效果打开、关闭、移动一个层的方法
- 图片的左右移动,js动画效果实现代码
- 前端--js实现透明度动画效果
- javascript动画效果之多物体透明度
- JS实现的透明度渐变动画效果示例
- 原生JS实现的多个彩色小球跟随鼠标移动动画效果示例
- 动画效果:位置移动、画面旋转、渐变透明度、渐变尺寸缩放
- js动画效果之透明度变化
- js动画效果之多物体动画
- 简单JS动画实例 广告移动效果
- js盒子抛物线移动(购物车动画效果)