• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
彭小妍
博客园    首页    新随笔    联系   管理    订阅  订阅
仿(用原生js封装jQuery库——运动)

function JQuery(arg){
  //存对象
  this.elements=[];
  switch(typeof arg){
    case 'string':
      this.elements=getEle(arg);
      this.length=this.elements.length;
    break;
    case 'function':
      window.onload=arg;
    break;
    default:
      this.elements.push(arg);
    break;
  }
}

function $(arg){
  return new JQuery(arg);
}

JQuery.prototype.animate=function (json,options){
  for(var i=0; i<this.elements.length; i++){
    move(this.elements[i],json,options);
  }
};

function getStyle(obj,sName){
  return (obj.currentStyle||getComputedStyle(obj,false))[sName];
}

function move(obj,json,options){
  options=options||{};
  options.duration=options.duration||1000;
  options.easing=options.easing||'ease-out';

  var start={};
  var dis={};
  for(var name in json){
    start[name]=parseFloat(getStyle(obj,name));
    if(isNaN(start[name])){
      start[name]=1;
    };
    dis[name]=json[name]-start[name];
  }
  var count=Math.floor(options.duration/16);
  var n=0;
  clearInterval(obj.timer);
  obj.timer=setInterval(function (){
    n++;
    for(var name in json){
      switch(options.easing){
        case 'linear':
          var cur=start[name]+dis[name]*n/count;
        break;
        case 'ease-in':
          var cur=start[name]+dis[name]*Math.pow(n/count,3);
        break;
        case 'ease-out':
          var cur=start[name]+dis[name]*(1-Math.pow(1-n/count,3));
        break;
      }
      if(name=='opacity'){
        obj.style.opacity=cur;
        obj.style.filter='alpha(opacity:'+cur*100+')';
      }else{
        obj.style[name]=cur+'px';
      }
    }
    if(n==count){
      clearInterval(obj.timer);
      options.complete&&options.complete();
    }
  },16);
}

posted on 2017-05-26 10:38  彭小妍  阅读(520)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3