javascript原生态写动画
长期用css写惯了的动画的我来说,用js写动画有些困难,不过有些地方必须要用JS才能做的出来,例如动画要替换字体内容,CSS就不可能做出来吧!今天就用原生态的JS写一个动画效果并替换字内容,话不多说。
首先思考效果,如图:

那么要实现这个,我首先想到了用闭包和计时器来实现,代码如下:
(function() {
function someAnimation(args, obj) {
obj.style.opacity = args / 5;
obj.getElementsByTagName('h1')[0].style.right = args + "%";
}
//显示时间
var time = 100;
var a_time = 10000;
var curIndex = 0;
var banner_div = document.getElementById('heading');
var xDiv = document.createElement('div');
xDiv.id = 'xifan_content';
xDiv.innerHTML = '内容';
banner_div.appendChild(xDiv);
for (var i = 0; i < time; i++) {
setTimeout((function(pos) {
return function() {
someAnimation(pos, xDiv);
}
})(i / 10), i * 100)
}
}
setInterval(run, a_time);
})()
这里要给一些不明白的人解释下:
//定义一个for循环,时间为time
for (var i = 0; i < time; i++) { setTimeout((function(pos) { return function() {
//这里的pos就是funtion的参数i/10,不懂的可以百度下JS闭包 someAnimation(pos, xDiv); } })(i / 10), i * 100) }
效果基本出来了,我们要实现更换字母,需要定义数组,结合以上代码,完整如下:
<!DOCTYPE html>
<html lang="en" ng-app="app">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" />
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title></title>
<style type="text/css">
#xifan_content{
position:absolute;
left:50%;
top:50%;
}
</style>
</head>
<body ontouchstart="">
<div id="heading">
</div>
<script language="javascript" type="text/javascript">
(function(){
function someAnimation(args,obj){
console.log(args);
obj.style.opacity=args/5;
obj.getElementsByTagName('h1')[0].style.right=args+"%";
}
//显示时间
var time=100;
var a_time=10000;
var curIndex=0;
var banner_div = document.getElementById('heading');
var xDiv = document.createElement('div');
xDiv.id = 'xifan_content';
banner_div.appendChild(xDiv);
var arr=new Array();
arr[0]="后勤是我家,服务靠大家";
arr[1]="后勤后保,诚信可亲";
arr[2]="脚踏实地,认真做事";
arr[3]="心随你动,服务大家";
arr[4]="务实创新,全心服务";
function run(){
if (curIndex==arr.length-1)
{
curIndex=0;
}
else
{
curIndex+=1;
}
xDiv.innerHTML ='<h1>'+arr[curIndex]+'</h1>';
for(var i=0;i<time;i++){
setTimeout((function(pos){
return function(){
someAnimation(pos,xDiv);
}
})(i/10),i*100)
}
}
run();
setInterval(run,a_time);
})()
</script>
</body>
</html>
浙公网安备 33010602011771号