9种原生js动画效果(转)
2021-03-21 10:23
标签:小数 div turn 一个 color fun get height 返回 9种原生js动画效果(转) 标签:小数 div turn 一个 color fun get height 返回 原文地址:https://www.cnblogs.com/xiewangfei123/p/12723869.html1,匀速动画效果
window.onload = function(){
var odiv = document.getElementById(‘odiv‘);
odiv.onmouseover = function(){
startMover(0);
}
odiv.onmouseout = function(){
startMover(-200);
}
}
var timer = null;
function startMover(itarget){//目标值
clearInterval(timer);//执行当前动画同时清除之前的动画
var odiv = document.getElementById(‘odiv‘);
timer = setInterval(function(){
var speed = 0;
if(odiv.offsetLeft > itarget){
speed = -1;
}
else{
speed = 1;
}
if(odiv.offsetLeft == itarget){
clearInterval(timer);
}
else{
odiv.style.left = odiv.offsetLeft+speed+‘px‘;
}
},30);
}
2,缓冲动画效果
window.onload = function(){
var odiv = document.getElementById(‘odiv‘);
odiv.onmouseover = function(){
startMover(0);
}
odiv.onmouseout = function(){
startMover(-200);
}
}
var timer = null;
function startMover(itarget){//速度和目标值
clearInterval(timer);//执行当前动画同时清除之前的动画
var odiv = document.getElementById(‘odiv‘);
timer = setInterval(function(){
var speed = (itarget-odiv.offsetLeft)/10;//缓冲动画的速度参数变化值
//如果速度是大于0,说明是向右走,那么就向上取整
speed = speed>0?Math.ceil(speed):Math.floor(speed);
//Math.floor();向下取整
if(odiv.offsetLeft == itarget){
clearInterval(timer);
}
else{
//clientLeft 返回对象的offsetLeft属性值和到当前窗口左边的真实值之间的距离
odiv.style.left = odiv.offsetLeft+speed+‘px‘;
}
},30);
}
3,透明度动画
window.onload = function(){
var odiv = document.getElementsByTagName(‘div‘);
for(var i=0;i
4,多物体动画
window.onload = function(){
var olist = document.getElementsByTagName(‘li‘);
for(var i=0; i
5,获取样式动画
window.onload = function(){
var odiv = document.getElementById(‘odiv‘);
odiv.onmouseover = function(){
startMov(this);
};
function startMov(obj){
setInterval(function(){
obj.style.width = parseInt(getStyle(obj,‘width‘))+1+‘px‘;
obj.style.fontSize = parseInt(getStyle(obj,‘fontSize‘))+1+‘px‘;
},30);
}
function getStyle(obj,attr)
{
if(obj.currentStyle){
return obj.currentStyle[attr];
}
else{
return getComputedStyle(obj,false)[attr];
}
}
}
6,多物体复杂动画
window.onload = function(){
var li1 = document.getElementById(‘li1‘);
var li2 = document.getElementById(‘li2‘);
li1.onmouseover = function(){
startMov(this,400,‘width‘);
};
li1.onmouseout = function(){
startMov(this,200,‘width‘);
};
li2.onmouseover = function(){
startMov(this,200,‘height‘);
};
li2.onmouseout = function(){
startMov(this,100,‘height‘);
};
function startMov(obj,itarget,attr){
clearInterval(obj.timer);//执行动画之前清除动画
obj.timer = setInterval(function(){
var icur = parseInt(getStyle(obj,attr));
var speed =0;
speed = (itarget - icur)/8;
speed = speed>0?Math.ceil(speed):Math.floor(speed);
if(icur == itarget){
clearInterval(obj.timer);
}
else{
obj.style[attr] = icur+speed+‘px‘;
}
},30);
}
function getStyle(obj,attr)
{
if(obj.currentStyle){
return obj.currentStyle[attr];
}
else{
return getComputedStyle(obj,false)[attr];
}
}
}
7,多物体复杂动画(带透明度的)
window.onload = function(){
var li1 = document.getElementById(‘li1‘);
var li2 = document.getElementById(‘li2‘);
li1.onmouseover = function(){
startMov(this,100,‘opacity‘);
};
li1.onmouseout = function(){
startMov(this,30,‘opacity‘);
};
li2.onmouseover = function(){
startMov(this,200,‘height‘);
};
li2.onmouseout = function(){
startMov(this,100,‘height‘);
}
li1.timer = null;
li2.timer = null;
function startMov(obj,itarget,attr){
clearInterval(obj.timer);//执行动画之前清除动画
obj.timer = setInterval(function(){
var icur = 0;
if(attr == ‘opacity‘){
icur = Math.round(parseFloat(getStyle(obj,attr))*100);//转换成整数,并且四舍五入下
//计算机在计算小数的时候往往是不准确的!
}
else{
icur = parseInt(getStyle(obj,attr));
}
var speed =0;
speed = (itarget - icur)/8;
speed = speed>0?Math.ceil(speed):Math.floor(speed);
if(icur == itarget){
clearInterval(obj.timer);
}
else{
if(attr == ‘opacity‘){
obj.style.filter = ‘alpha(opacity:‘+(icur+speed)+‘)‘;
obj.style.opacity = (icur+speed)/100;
}
else{
obj.style[attr] = icur+speed+‘px‘;
}
}
},30);
}
function getStyle(obj,attr)
{
if(obj.currentStyle){
return obj.currentStyle[attr];
}
else{
return getComputedStyle(obj,false)[attr];
}
}
}
8,链式动画
window.onload = function(){
var li1 = document.getElementById(‘li1‘);
li1.onmouseover = function(){
startMov(li1,400,‘width‘,function(){
startMov(li1,200,‘height‘,function(){
startMov(li1,100,‘opacity‘);
});
});
};
li1.onmouseout = function(){
startMov(li1,30,‘opacity‘,function(){
startMov(li1,100,‘height‘,function(){
startMov(li1,100,‘width‘);
});
});
};
li1.timer = null;
function startMov(obj,itarget,attr,fn){//fn回调函数
clearInterval(obj.timer);//执行动画之前清除动画
obj.timer = setInterval(function(){
var icur = 0;
if(attr == ‘opacity‘){
icur = Math.round(parseFloat(getStyle(obj,attr))*100);//转换成整数,并且四舍五入下
//计算机在计算小数的时候往往是不准确的!
}
else{
icur = parseInt(getStyle(obj,attr));
}
var speed =0;
speed = (itarget - icur)/8;
speed = speed>0?Math.ceil(speed):Math.floor(speed);
if(icur == itarget){
clearInterval(obj.timer);
if(fn){
fn();
}
}
else{
if(attr == ‘opacity‘){
obj.style.filter = ‘alpha(opacity:‘+(icur+speed)+‘)‘;
obj.style.opacity = (icur+speed)/100;
}
else{
obj.style[attr] = icur+speed+‘px‘;
}
}
},30);
}
function getStyle(obj,attr)
{
if(obj.currentStyle){
return obj.currentStyle[attr];
}
else{
return getComputedStyle(obj,false)[attr];
}
}
}
9,多物体同时运动动画
window.onload = function(){
var li1 = document.getElementById(‘li1‘);
li1.onmouseover = function(){
startMov(li1,{width:201,height:200,opacity:100});
};
li1.onmouseout = function(){
startMov(li1,{width:200,height:100,opacity:30});
};
li1.timer = null;
function startMov(obj,json,fn){//fn回调函数
clearInterval(obj.timer);//执行动画之前清除动画
var flag = true;//是否动画都完成了
obj.timer = setInterval(function(){
for(var attr in json){
var icur = 0;
if(attr == ‘opacity‘){
icur = Math.round(parseFloat(getStyle(obj,attr))*100);//转换成整数,并且四舍五入下
//计算机在计算小数的时候往往是不准确的!
}
else{
icur = parseInt(getStyle(obj,attr));
}
var speed =0;
speed = (json[attr] - icur)/8;
speed = speed>0?Math.ceil(speed):Math.floor(speed);
if(icur != json[attr]){
flag = false;
}
if(attr == ‘opacity‘){
obj.style.filter = ‘alpha(opacity:‘+(icur+speed)+‘)‘;
obj.style.opacity = (icur+speed)/100;
}
else{
obj.style[attr] = icur+speed+‘px‘;
}
if(flag){
clearInterval(obj.timer);
if(fn){
fn();
}
}
}
},30);
}
function getStyle(obj,attr)
{
if(obj.currentStyle){
return obj.currentStyle[attr];
}
else{
return getComputedStyle(obj,false)[attr];
}
}
}