博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js基础之动画(三)
阅读量:4920 次
发布时间:2019-06-11

本文共 4445 字,大约阅读时间需要 14 分钟。

一、链式运动

首先,要改进运动框架

function getStyle(obj,attr){

  if(obj.currentStyle){
    return obj.currentStyle[attr];
  }else{
    return getComputedStyle(obj,false)[attr];
  }
}
 function startMove(obj,attr,iTarget,fn){//多div运动
//var obj = document.getElementsByClassName('menu');
clearInterval(obj.timer);
obj.timer=setInterval(function(){
  var iCur=0;
  if(attr=='opacity'){
    var iCur=parseInt(parseFloat(getStyle(obj,attr))*100);
  }else{
    var iCur=parseInt(getStyle(obj,attr));
}
var iSpeed=(iTarget-iCur)/8;
iSpeed=iSpeed>0?Math.ceil(iSpeed):Math.floor(iSpeed);console.log(iSpeed+'/'+iCur);
  if(iCur==iTarget){
    clearInterval(obj.timer);

    if(fn){fn()};

  }else{
    if(attr=='opacity'){
        obj.style.filter='alpha(opacity:'+(iCur+iSpeed)+')';
      obj.style.opacity=(iCur+iSpeed)/100;
    }else{
      obj.style[attr]=iCur+iSpeed+'px';console.log(obj.style.attr);
    }
  }
},30);
  }

然后引用即可

var oBtn = document.getElementById('btn1');

var oDiv = document.getElementById('div1');
oBtn.οnmοuseοver=function(){
  startMove(oDiv,'width',300,function(){
    startMove(oDiv,'height',333,function(){
      startMove(oDiv,'opacity',100);
    });
  });
}
oBtn.οnmοuseοut=function(){
  startMove(oDiv,'opacity',50,function(){
    startMove(oDiv,'height',20,function(){
      startMove(oDiv,'width',0);
    });
  });
}

二、用json打造完美框架

 function getStyle(obj,attr){

  if(obj.currentStyle){
    return obj.currentStyle[attr];
  }else{
    return getComputedStyle(obj,false)[attr];
  }
}
 function startMove(obj,json,fn){
clearInterval(obj.timer);
obj.timer=setInterval(function(){
var bStop=true;//如为真,这次运动结束,所有值都达到目标
for(var attr in json){
//1.取当前的位置
var iCur=0;
if(attr=='opacity'){
var iCur=parseInt(parseFloat(getStyle(obj,attr))*100);
}else{
var iCur=parseInt(getStyle(obj,attr));
}
//2.算速度
var iSpeed=(json[attr]-iCur)/8;
iSpeed=iSpeed>0?Math.ceil(iSpeed):Math.floor(iSpeed);//console.log(iSpeed+'/'+iCur);
//3.检测停止
if(iCur!=json[attr]){
bStop=false;
}
if(attr=='opacity'){
  obj.style.filter='alpha(opacity:'+(iCur+iSpeed)+')';
obj.style.opacity=(iCur+iSpeed)/100;
}else{
obj.style[attr]=iCur+iSpeed+'px';
}
}
if(bStop){
clearInterval(obj.timer);
if(fn){fn()};
}
},30);
}

三、照片墙——多图展开、收缩

var oUl = document.getElementById('ul1');

var aLi = oUl.getElementsByTagName('li');
var oImg = document.getElementsByClassName('img1');
//js布局
var minIndex=2;//设置层级初始值
var i=0;
for(i=0;i<aLi.length;i++){
//aLi[i].innerHTML='left:'+aLi[i].offsetLeft+',top:'+aLi[i].offsetTop;
aLi[i].style.left=aLi[i].offsetLeft+'px';
aLi[i].style.top=aLi[i].offsetTop+'px';
}
for(i=0;i<aLi.length;i++){
aLi[i].style.position='absolute';
}
//加事件
for(i=0;i<aLi.length;i++){
aLi[i].οnmοuseοver=function(){
this.style.zIndex=minIndex++;//console.log(this.style.zIndex);确保当前图片的层级为最高
startMove(this,{width:200,height:200,margin:-50});
}
aLi[i].οnmοuseοut=function(){
startMove(this,{width:100,height:100,margin:10});
}
}
for(i=0;i<oImg.length;i++){
oImg[i].οnmοuseοver=function(){
startMove(this,{width:300,height:200,margin:0});
}
oImg[i].οnmοuseοut=function(){
startMove(this,{width:100,height:100,margin:0});
}
}

四、新浪微博之大家正在说

var oTxt = document.getElementById('txt1');

var oBtn = document.getElementById('btn1');
var oUl = document.getElementById('ul1');
oBtn.οnclick=function(){
  var oLi = document.createElement('div');//这里要用div替换li,否则IE7的移动效果会卡
var aLi = oUl.getElementsByTagName('div');//这里要用div替换li,否则IE7的移动效果会卡
oLi.innerHTML=oTxt.value;
oTxt.value='';
if(aLi.length){
oUl.insertBefore(oLi,aLi[0]);
}else{
oUl.appendChild(oLi);
}
var iHeight=oLi.offsetHeight;
oLi.style.height=0;
startMove(oLi,{height:iHeight},function(){
startMove(oLi,{opacity:100});//alert();
});
}

布局的时候也要用div套div代替ul套li

五、无缝滚动

 var oDiv = document.getElementById('div1');

var oUl = oDiv.getElementsByTagName('ul')[0];
var oLi = oUl.getElementsByTagName('li');
var aA = document.getElementsByTagName('a');
var timer=null;
var iSpeed=-3;
oUl.innerHTML+=oUl.innerHTML;
oUl.style.width=oLi.length*oLi[0].offsetWidth+'px';
function fnMove(){
  if(oUl.offsetLeft<-oUl.offsetWidth/2){
    oUl.style.left=0;
  }else if(oUl.offsetLeft>0){
    oUl.style.left=-oUl.offsetWidth/2+'px';
  }
oUl.style.left=oUl.offsetLeft+iSpeed+'px';
}
timer=setInterval(fnMove,30);
aA[0].οnclick=function(){
  iSpeed=-3;
};
aA[1].οnclick=function(){
  iSpeed=3;
};
oDiv.οnmοuseοver=function(){
  clearInterval(timer);
}
oDiv.οnmοuseοut=function(){
  timer=setInterval(fnMove,30);
}

转载于:https://www.cnblogs.com/kuangliu/p/3483041.html

你可能感兴趣的文章
如何让你的网页符合W3C标准
查看>>
ubuntu下firefox访问12306
查看>>
变量命名规范
查看>>
【转】Matrix67:十个利用矩阵乘法解决的经典题目
查看>>
文件异步上传-ajaxFileUpload
查看>>
开发人员行走Unix的随身四艺
查看>>
织梦联动类型地区联动三级修复以及省份-市级-地区分开+高亮
查看>>
阿里技术嘉年华官网上线啦!
查看>>
获取Android状态栏的高度
查看>>
21. 比较三个整数大小
查看>>
ESXi主机和NTP server快速进行时间同步
查看>>
Python使用random.shuffle()打乱列表顺序
查看>>
(二)
查看>>
浏览器内核引擎
查看>>
SqlServer中怎么删除重复的记录(表中没有id)
查看>>
操作系统基础知识之————单线程(Thread)与多线程的区别
查看>>
PAT 1022 Digital Library[map使用]
查看>>
由于目标计算机积极拒绝,无法连接。
查看>>
hive常用命令
查看>>
Nmap使用教程 - 一
查看>>