js 动画
1、鼠标移入移出 、单物体运动动画
<div id='mydiv' style="border: 1px solid red; width: 100px;height: 100px;position: relative;left: -100px;">
<span style="position: absolute;left: 100px;border: 1px solid green;">分享</span>
</div>
<div id='mydiv2' style="width: 100px;height: 100px;background-color: green;opacity:0.1;filter:alpha(opacity=10);">
</div>
<script type="text/javascript">
//匀速显示、隐藏
var mydiv = document.getElementById('mydiv'),
timer = null;
mydiv.onmouseover = function(){
moveDiv(10,0);
}
mydiv.onmouseout = function(){
moveDiv(-10,-100);
}
function moveDiv(speed,iTarget){
var mydiv = document.getElementById('mydiv');
clearInterval(timer);
timer = setInterval(function(){
if(mydiv.offsetLeft == iTarget){
clearInterval(timer);
}else{
mydiv.style.left = mydiv.offsetLeft + speed + 'px';
}
},30)
}
//开始快、后来慢非匀速移动显示隐藏
var mydiv = document.getElementById('mydiv'),
timer = null;
mydiv.onmouseover = function(){
moveDiv(0,10);
}
mydiv,onmouseout = function(){
moveDiv(-100,-10);
}
function moveDiv(iTarget,speed){
var mydiv = document.getElementById('mydiv');
clearInterval(timer);
timer = setInterval(function(){
speed = (iTarget - mydiv.offsetLeft) /20;
speed = speed > 0 ? Math.ceil(speed): Math.floor(speed); //>0右移否则左移,所有这种判断都要取整
if(iTarget == mydiv.offsetLeft){
clearInterval(timer);
}else{
mydiv.style.left = mydiv.offsetLeft + speed + 'px';
}
},30)
}
//修改透明度
var mydiv2 = document.getElementById('mydiv2'),
timer2 = null,
alpha = 10;
mydiv2.onmouseover = function(){
moveDiv2(3,90);
}
mydiv2.onmouseout = function(){
alert(22);
moveDiv2(-3,10);
}
function moveDiv2(speed,iTarget){
clearInterval(timer2);
var mydiv2 = document.getElementById('mydiv2');
timer2 = setInterval(function(){
if(alpha == iTarget){
clearInterval(timer2);
}else{
alpha += speed
mydiv2.style.filter ='alpha(opactiy:'+alpha+')' ;
mydiv2.style.opacity = alpha/100;
}
},30)
}
</script>
2、多物体运动动画
<div style="border: 1px solid red; width: 100px;height: 100px;position: relative;left: -100px;">
<span style="position: absolute;left: 100px;border: 1px solid green;">分享</span>
</div>
<div style="border: 1px solid red; width: 100px;height: 100px;position: relative;left: -100px;">
<span style="position: absolute;left: 100px;border: 1px solid green;">分享</span>
</div>
<div style="border: 1px solid red; width: 100px;height: 100px;position: relative;left: -100px;">
<span style="position: absolute;left: 100px;border: 1px solid green;">分享</span>
</div>
<script type="text/javascript">
var mydivs = document.getElementsByTagName('div');
for (var i = 0; i < mydivs.length; i++) {
mydivs[i].timer = null;
mydivs[i].onmouseover = function(){
moveDiv(this,0,10);
}
mydivs[i].onmouseout = function(){
moveDiv(this,-100,-10);
}
}
function moveDiv(obj,iTarget,speed){
clearInterval(obj.timer);
obj.timer = setInterval(function(){
speed = (iTarget - obj.offsetLeft) /20;
speed = speed > 0 ? Math.ceil(speed): Math.floor(speed); //>0右移否则左移
if(iTarget == obj.offsetLeft){
clearInterval(obj.timer);
}else{
obj.style.left = obj.offsetLeft + speed + 'px';
}
},30)
}
3、公用方法、变换任意属性、透明度、宽度、高度
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
<style type="text/css">
*{margin: 0;padding: 0}
div{width: 100px;}
</style>
</head>
<body>
<div style="background-color:red;height: 100px;position: relative;left: 0px"></div>
<div style="background-color:red;height: 100px;position: relative;left: 0px;margin-top: 10px;"></div>
<div style="background-color:red;height: 100px;position: relative;left: 0px;margin-top: 10px;filter:alpha(opacity:30);opacity:0.3;"></div>
<script type="text/javascript">
var mydiv1 = document.getElementsByTagName('div')[0];
var mydiv2 = document.getElementsByTagName('div')[1];
var mydiv3 = document.getElementsByTagName('div')[2];
mydiv1.onmouseover = function(){
moveDiv(this,200,'width');
}
mydiv1.onmouseout = function(){
moveDiv(this,100,'width');
}
mydiv2.onmouseover = function(){
moveDiv(this,200,'height');
}
mydiv2.onmouseout = function(){
moveDiv(this,100,'height');
}
mydiv3.onmouseover = function(){
moveDiv(this,100,'opacity');
}
mydiv3.onmouseout = function(){
moveDiv(this,30,'opacity');
}
function moveDiv(obj,iTarget,attr){
clearInterval(obj.timer);
obj.timer = setInterval(function(){
var icur = 0;
if(attr =='opacity' || attr == 'filter'){
attr = 'opacity';
icur= Math.round(parseFloat(getStyle(obj,attr)) * 100);
}else{
icur= parseInt(getStyle(obj,attr));
}
var speed = ( iTarget - icur ) /8;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
var num = icur + speed;
if(iTarget ==icur){
clearInterval(obj.timer);
}else{
if(attr =='opacity'){
console.log(icur + speed);
//透明度
obj.style.filter ='alpha(opacity:'+num+')' ;
obj.style.opacity = num/100;
}else{
//其他属性
obj.style[attr] = num + 'px';
}
}
},30)
}
function getStyle(obj,attr){
if(obj.currentStyle){
return obj.currentStyle[attr];
}else{
return getComputedStyle(obj,false)[attr];
}
}
</script>
</body>
</html>
4、先变宽、在变高
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
<style type="text/css">
*{margin: 0;padding: 0}
</style>
</head>
<body>
<div style="background-color:red;height: 100px;width: 100px;position: relative;left: 0px"></div>
<script type="text/javascript">
var mydiv1 = document.getElementsByTagName('div')[0];
mydiv1.onmouseover = function(){
moveDiv(mydiv1,200,'width',function(){
moveDiv(mydiv1,200,'height')
});
}
mydiv1.onmouseout = function(){
moveDiv(mydiv1,100,'width',function(){
moveDiv(mydiv1,100,'height')
});
}
function moveDiv(obj,iTarget,attr,fn){
clearInterval(obj.timer);
obj.timer = setInterval(function(){
var icur = 0;
if(attr =='opacity' || attr == 'filter'){
attr = 'opacity';
icur= Math.round(parseFloat(getStyle(obj,attr)) * 100);
}else{
icur= parseInt(getStyle(obj,attr));
}
var speed = ( iTarget - icur ) /8;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
var num = icur + speed;
if(iTarget ==icur){
clearInterval(obj.timer);
if(fn){
fn();
}
}else{
if(attr =='opacity'){
console.log(icur + speed);
//透明度
obj.style.filter ='alpha(opacity:'+num+')' ;
obj.style.opacity = num/100;
}else{
//其他属性
obj.style[attr] = num + 'px';
}
}
},30)
}
function getStyle(obj,attr){
if(obj.currentStyle){
return obj.currentStyle[attr];
}else{
return getComputedStyle(obj,false)[attr];
}
}
</script>
</body>
</html>
5、鼠标移入 多个动画同时改变
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
<style type="text/css">
*{margin: 0;padding: 0}
</style>
</head>
<body>
<div style="background-color:red;height: 100px;width: 100px;position: relative;left: 0px;opacity:0.3;filter:alpha(opacity:30);"></div>
<script type="text/javascript">
var mydiv1 = document.getElementsByTagName('div')[0];
mydiv1.onmouseover = function(){
moveDiv(mydiv1,{width:101,height:200,opacity:100});
}
mydiv1.onmouseout = function(){
moveDiv(mydiv1,{width:100,height:100,opacity:30});
}
function moveDiv(obj,json,fn){ //json={width:200,height:200}
var flag = true; //判断是否所有属性都到达目标值,用来关闭定时器
clearInterval(obj.timer);
obj.timer = setInterval(function(){
for(var attr in json){
var icur = 0;
if(attr =='opacity' || attr == 'filter'){
attr = 'opacity';
icur= Math.round(parseFloat(getStyle(obj,attr)) * 100);
}else{
icur= parseInt(getStyle(obj,attr));
}
var speed = ( json[attr] - icur ) /8;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
var num = icur + speed;
if(json[attr] !=icur){ //不是所有属性都到达目标值
flag = false;
}
if(attr =='opacity'){
//透明度
obj.style.filter ='alpha(opacity:'+num+')' ;
obj.style.opacity = num/100;
}else{
//其他属性
obj.style[attr] = num + 'px';
}
if(flag === true){ //所有属性都到达目标值关闭
clearInterval(obj.timer);
if(fn){
fn();
}
}
}
},30)
}
function getStyle(obj,attr){
if(obj.currentStyle){
return obj.currentStyle[attr];
}else{
return getComputedStyle(obj,false)[attr];
}
}
</script>
</body>
</html>
js动画
最新推荐文章于 2018-08-02 14:31:24 发布