美文网首页前端小样
原生js实现功能

原生js实现功能

作者: 小淘气_嘻 | 来源:发表于2018-07-02 15:26 被阅读0次

对Class的处理

//增加类名
addClass : function(obj,classname){
  if(obj.className == ''){
       obj.className = classname;
  }else{
        var arrClassName = obj.classname.split(' ');
        if(arrIndexOf(arrClassName , classname) == -1){
            obj.className += ' ' +classname;
        }
  }
}
//移除类
removeClass: function(obj, classname){
    if(obj.classname !== ''){
         var arrClassName = obj.className.split(' ');
        if(arrIndexOf(arrClassName , classname) != -1){
              arrClassName.splice(arrIndexOf(arrClassName, classname) , 1);
              obj.className = arrClassName.join(' ');
        }
    }
}
//判断要添加的类名是否已经存在
arrIndexOf: function(arr,v){
    for(var i = 0; i<arr.length;i++){
          if(arr[i]  == v){  return i;}
     }
   return -1;
}

placeholder兼容函数

var obj = document.getElementById('input');
obj.onfocus = function(){
      if(this.value == '请输入内容'){
            this.value ='';
      }
}
obj.onblur = function(){
    if(this.value == ''){
          this.value = '请输入内容' ; 
    }
}

对事件的处理

var evet_fn = {

//事件绑定
bind:function(obj,evname,fn){
    if(obj.addEventListener){
        obj.addEventListener(evname,fn,false);
    }else{
        obj.attachEvent('on'+evname,function(){
            fn.call(obj);
//调用call方法,在IE下将this从指向window改为指向当前对象
        }
    )}
}
//事件解绑
removeBind :  function(obj,evname,fn,b1){
    if(obj.removeEventListener){
      obj.removeEventListener(evname,fn,b1);
    }else{     obj.detachEvent('on'+evname,fn,function(){ fn.call(obj); })
    }
}

//页面加载完成
readyEvent:function(fn){
    if(fn == null){  fn = document;  }
    var oldOnload = window.onload;
    if(typeof window.onload !== ‘function’){
          window.onload = fn;
    }else{
          windwo.onload = function(){
                oldOnload();
                fn();
          }
    }
}

//添加事件
addHandler : function(element, type, handler){
   if(element.addEventListener){ //DOM2级
         //事件类型,需要执行额函数 是否捕捉        element.addEventListerner(type,handler,false);
  }else if(element.attachEvent){ //是否为IE级
        element.attachEvent('on' + type, handler);
  }else{  //检查是否为DOM0级的方法
        element['on' + type] = handler;
  }
}

//移除事件
removeHandler: function(element,type,handler){
    if(element.removeEventListener){
              element.removeEventListener(type,handler,false);
    }else if( element.detachEvent){
          element.detachEvent('on' + type, handler);
    }else{
          element["on" + type] =null;
    }
}

// 获取事件及事件对象
getEvent :  function(event){
      return event ? event : window.event;
}

//获取事件对象目标的写法
getTarget :function(event){
     return event.target || event.srcElement;
}

//阻止浏览器默认事件
preventDefault: function(event){
  if(event.preventDefault){
        event.preventDefault();   //W3C标准
  }else{
      event.returnValue = false;   //IE
  }
}

//组织事件冒泡的兼容写法
stopPropagation: function(event){
    if(event.stopPropagation){
        event.stopProgation();
    }else{
        event.cancelBubble = true;
    }
}

//获取事件(在mouseover和mouseout事件监测中)
getRelatedTarget: function(event){
      if(event.relatedTarget){
            return event.relatedTarget;
      }else if(event.toElement){
            return event.toElement;
      }else if(event.fromElement){
            return event.fromElement;
      }else{
            return null;
      }
}

//获取event对象的引用,取到事件的所有信息,确保随时能使用event;
     getEvent:function (event) {
       var event = event || window.event;
       if (!event) {
           var c = this.getEvent.caller;
           while(!c){
               event = c.arguments[0];
               if (event && Event == ev.constructor) {
                   break;
               };
               c = c.caller;
           }
       };
       return event;
     }    
}

鼠标滚轮判断

类似于mousedownmouseup事件,event对象存在一个button属性
DOM的button属性:
- 0 表示主鼠标按钮 即左键
- 1 表示中间鼠标; 即中间滚轮
- 2 表示次鼠标按钮 即右键

IE8及之前版本button属性
- 0 没有按下按钮
- 1 按下了主鼠标按钮
- 2 按下了次鼠标按钮
- 3 同时按下了主、次鼠标按钮
- 4 按下了中间的鼠标按钮
- 5 同时按下了主鼠标和中间的鼠标按钮
- 6 同时按下了次鼠标和中间的鼠标按钮
- 7 同时按下了三个鼠标按钮

getButton : function(event){
      if(document.implementation.hasFeature("MouseEvents" , "2.0")){
            return event.button;
      }else{
          switch(event.button){
                case 0: return -1; //指没有按下任何按钮
                case 1:
                case 3:
                case 5:
                case 7:  return 0;
                case 2:
                case 6:  return 2;
                case 4:  return 1;
          }
      }
}

鼠标滚轮增量值 delta

getWheelDelta: function(){
    if(event.wheelDelta){
        return (client.engine.opera && client.engine.opera < 9.5 ? -event.wheelDelta : event.wheelDelta) ;
    }else{
          return -event.detail * 40;    //firefox中的值为+3表示向上滚,-3表示向下滚
    }
}

跨浏览器的方式取得字符编码

getCharCode:function(event){
    if(typeof event.chartCode == "number"){
        return event.chartCode;
    }else{
        return event.keyCode;
    }
}

访问剪贴板的数据

getClipboardText :function(event){
    var clipboardData = (event.clipboardData  || window.clipboardData);
    return clipboardData.getData('text');
}

设置剪贴板中的数据

setClipboardText :function(event,value){
    if(event.clipboardData){
          retrun event.clipboardData.setData('text/plain',value);
    }else if(window.clipboardData){
          return window.clipboardData.setData('text',value);
    }
}

相关文章

  • 【React】Get Started

    1. React之初衷 首先用原生JS实现一个简单的功能: 使用React实现同样的功能: 2. 原生js VS ...

  • 第四天2018-10-24

    switf原生与html.js交互 目的:实现点击更换图片的功能原理:点击->js调用原生方法->在原生的方法里面...

  • 原生js实现功能

    对Class的处理 placeholder兼容函数 对事件的处理 鼠标滚轮判断 类似于mousedown和mous...

  • js 复制文字功能

    功能:点击按钮,复制值。 实现方法:通过原生js 的方法 document.execCommand('copy')...

  • 原生js实现拖拽功能

    在前端技术日新月异,飞速发展的当下,涌现出了很多优秀的开源框架以及优秀的开源组件,这些都是优秀的前端开发者的技术成...

  • 原生js实现可拖拽功能

    原生js实现一个可全局拖拽的按钮功能,直接上代码*js部分 *html部分 *css部分

  • 原生JS实现Tab切换效果和模态框效果

    原生JS实现Tab切换效果 效果展示 原生JS实现模态框效果 效果展示

  • 实现一个 jQuery 的 API

    想要实现一个以下功能用原生js的DOM API来实现一个类jQuery API的功能 1、首先获取DOM元素 判断...

  • react-native剖析之ios解析导出原生module

    前言 我们知道,在ios的react-native开发中,可以通过自定义原生模块,来实现js调用原生功能。 先看下...

  • 实现拖拽

    原生js实现 HTML5原生实现:拖拽draggable属性、DataTranfers对象

网友评论

    本文标题:原生js实现功能

    本文链接:https://www.haomeiwen.com/subject/xkcnyftx.html