妙味VQUERY



//添加事件myAddEvent(对象, 事件, 函数)    解决触发一个事件同时调用多个函数   --->更新2013.3-21
function myAddEvent(obj, sEv, fn)
{
 if(obj.attachEvent)
 {
  obj.attachEvent('on'+sEv, function (){
   if(false==fn.call(obj))//解决IE this的问题this->obj
   {
    event.cancelBubble=true;//阻止冒泡
    return false;//阻止默认事件
   }
  });
 }
 else
 {
  obj.addEventListener(sEv, function (ev){
   if(false==fn.call(obj))
   {
    ev.cancelBubble=true;//阻止冒泡
    ev.preventDefault();//阻止默认事件
   }
  }, false);
 }
}


//CLASS选择器getByClass(父级对象, class名)   --->更新2013.4-8
function getByClass(oParent, sClass)
{
 var aEle=oParent.getElementsByTagName_r('*');
 var aResult=[];
 var re=new RegExp('\\b'+sClass+'\\b','i');   //单词边界   \b
 var i=0;
 
 for(i=0;i
 {
  //if(aEle[i].className==sClass)
  if(re.test(aEle[i].className))
  {
   aResult.push(aEle[i]);
  }
 }
 
 return aResult;
}

//获取样式getStyle(对象, 属性)   --->更新2013.3-21
function getStyle(obj, attr)
{
 if(obj.currentStyle)
 {
  return obj.currentStyle[attr];
 }
 else
 {
  return getComputedStyle(obj, false)[attr];
 }
}

 


//远动框架startMove(对象, {'width':100,'height':100}, 执行后的再调用的函数)   --->更新2013.3-21
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')
    {
     iCur=parseInt(parseFloat(getStyle(obj, attr))*100);
    }
    else
    {
     iCur=parseInt(getStyle(obj, attr));
    }
    
    //2.算速度
    var iSpeed=(json[attr]-iCur)/8;
    iSpeed=iSpeed>0?Math.ceil(iSpeed):Math.floor(iSpeed);
    
    //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)
 }

 

 

 

 

//改变前面字符   --->更新2013.3-21
function $(vArg){
 return new VQuery(vArg);
 }


//面向对象VQuery  选择器   --->更新2013.3-21
function VQuery(vArg)
{
 //用来保存选中的元素
 this.elements=[];
 
 switch(typeof vArg)
 {
  case 'function':
   //window.onload=vArg;
   myAddEvent(window, 'load', vArg);
   break;
  case 'string':
   switch(vArg.charAt(0))
   {
    case '#': //ID
     var obj=document.getElementByIdx_x(vArg.substring(1));
     
     this.elements.push(obj);
     break;
    case '.': //class
     this.elements=getByClass(document, vArg.substring(1));
     break;
    default: //tagName
     this.elements=document.getElementsByTagName_r(vArg);
   }
   break;
  case 'object':
   this.elements.push(vArg);
 }
}

//在原型中添加一个点击事件click(function(){})   --->更新2013.3-21
VQuery.prototype.click=function(fn)
{
 var i=0;
 for(i=0;i
 {
  myAddEvent(this.elements[i], 'click', fn);
 }
 return this;
}

//show(function(){})   --->更新2013.3-21
VQuery.prototype.show=function()
{
 var i=0;
 
 for(i=0;i
 {
  this.elements[i].style.display='block';
 }
 return this;
}

//hide(function(){})   --->更新2013.3-21
VQuery.prototype.hide=function()
{
 var i=0;
 
 for(i=0;i
 {
  this.elements[i].style.display='none';
 }
 return this;
}


//hover(function(){鼠标移入事件},function(){鼠标移出事件})   --->更新2013.3-21
VQuery.prototype.hover=function(fnover,fnout)
{
 var i=0;
 
 for(i=0;i
 {
 
  myAddEvent(this.elements[i],'mouseover',fnover);
  myAddEvent(this.elements[i],'mouseout',fnout);
 }
 return this;
}


//设置样式  css(属性,值)    获取样式 css(属性)   --->更新2013.3-21
VQuery.prototype.css=function(attr,value){
 if(arguments.length==2)
  {
   var i=0;
   for(i=0;i
   {
    this.elements[i].style[attr]=value;
   }
  }
  else{
    if(typeof attr=='string')
     {
      return getStyle(this.elements[0],attr)
     }
    else{
      for(i=0;i
      {
        var k='';
        for(k in attr)
        {
         this.elements[i].style[k]=attr[k];
        }
      }
     }
   
   }
  return this;
}


//点击多个函数循环使用  toggle(function(){},function(){})   --->更新2013.3-21
VQuery.prototype.toggle=function()
{
 var i=0;
 var _arguments=arguments;
 
 for(i=0;i
 {
  addToggle(this.elements[i]);
 }
 
 function addToggle(obj)
 {
  var count=0;
  myAddEvent(obj, 'click', function (){
   _arguments[count++%_arguments.length].call(obj);
  });
 }
 return this;
};

//attr(属性,值)->attr('className','over')设置Class为over   --->更新2013.3-21
VQuery.prototype.attr=function(attr,value){
 if(arguments.length==2)
  {
   var i=0;
   for(i=0;i
   {
    this.elements[i][attr]=value;
   }
  }
  else{
   return this.elements[0][attr];
   }
  return this;  
}

//eq(n)同级中的第n个   --->更新2013.3-21
VQuery.prototype.eq=function(n){
 return $(this.elements[n]);
}


function appendArr(arr1, arr2)
{
 var i=0;
 
 for(i=0;i
 {
  arr1.push(arr2[i]);
 }
 return this;
}

//find('str')查询对象   --->更新2013.3-21
VQuery.prototype.find=function (str)
{
 var i=0;
 var aResult=[];
 
 for(i=0;i
 {
  switch(str.charAt(0))
  {
   case '.': //class
    var aEle=getByClass(this.elements[i], str.substring(1));
    
    aResult=aResult.concat(aEle);
    break;
   default: //标签
    var aEle=this.elements[i].getElementsByTagName_r(str);
    
    //aResult=aResult.concat(aEle);
    appendArr(aResult, aEle);//appendArr把数组连接起来类似concat的效果
  }
 }
 
 var newVquery=$();
 
 newVquery.elements=aResult;
 
 return newVquery;
};

function getIndex(obj)
{
 var aBrother=obj.parentNode.children;//获取节点数
 var i=0;
 
 for(i=0;i
 {
  if(aBrother[i]==obj)
  {
   return i;
  }
 }
}

//index()获取下标   --->更新2013.3-21
VQuery.prototype.index=function ()
{
 return getIndex(this.elements[0]);
 return this;
};


//bind('事件',事件触发的函数)   --->更新2013.3-21
VQuery.prototype.bind=function(sEv,fn)
{
 var i=0;
 for(i=0;i
 {
  myAddEvent(this.elements[i], sEv, fn)
 }
}


//VQuery插件扩充extend   --->更新2013.3-21
VQuery.prototype.extend=function(name,fn)
{
 VQuery.prototype[name]=fn;
}


//插件的扩充例子   size()  获取个数->$('div').size()   --->更新2013.3-21
$().extend('size',function(){
 return this.elements.length;
 })


//插件的扩充例子   animate({'width':100,'height':200})   --->更新2013.3-21
$().extend('animate', function (json){
 var i=0;
 
 for(i=0;i
 {
  startMove(this.elements[i], json);
 }
})

 

//插件的扩充例子 拖拽drag()   --->更新2013.3-22
$().extend('drag', function (){
 var i=0;
 
 for(i=0;i
 {
  this.elements[i].style.position='absolute';//拖拽的物体必须得绝对定位
  drag(this.elements[i]);
 }
 
 function drag(oDiv)
 {
  oDiv.onmousedown=function (ev)
  {
   var oEvent=ev||event;
   var disX=oEvent.clientX-oDiv.offsetLeft;
   var disY=oEvent.clientY-oDiv.offsetTop;
   
   if(oDiv.setCapture){
     oDiv.setCapture();//IE 获取捕获
     oDiv.onmousemove=fnMove;
     oDiv.onmouseup=fnUp;
    }
   else{
     document.onmousemove=fnMove;
     document.onmouseup=fnUp;
    }
   
   //鼠标移动
   function fnMove(ev)
   {
    var oEvent=ev||event;
    
    this.style.left=oEvent.clientX-disX+'px';
    this.style.top=oEvent.clientY-disY+'px';
   };
   
   
   //鼠标提起
   function fnUp()
   {
    this.onmousemove=null;
    this.onmouseup=null;
    
    if(this.releaseCapture)
    {
     this.releaseCapture();//IE 取消捕获
    }
     
   };
   
   
   return false;//阻止默认行为    解决FF低版本空DIV推拽出现bug
  };
 }
})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值