JS代码备忘

function $(v) {
    if (typeof v === 'function') {
        window.onload = v;
    } else if (typeof v === 'string') {
        return document.getElementById(v);
    } else if (typeof v === 'object') {
        return v;
    }
}
/*
    获取浏览器计算后的样式。
    1、不要获取复合样式,如:background、margin;
    2、不要获取未定义的样式,否则会不兼容,因为浏览器会根据自身的情况弹出内容;
    3、不要在attr前面加空格,如:getStyle($('div1'),' width'),会弹出undefined.
*/
function getStyle(obj,attr) {
    return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj)[attr];
}


/*不管是否存在定位,获取从当前位置到html标签的偏移值*/

function getPos(obj) {
    var pos = {left:0,top:0};

    while(obj) {
        pos.left+= obj.offsetLeft;
        pos.top+= obj.offsetTop;
        obj = obj.offsetParent;
    }

    return pos;
}

/*获取class样式,并以数组的形式存回*/

function getElementsByClassName(parent,tagName,className) {
    var aEls = parent.getElementsByTagName(tagName);
    var arr = [];

    for (var i=0;i<aEls.length;i++) {

        var aClassName = aEls[i].className.split(' ');

        for (var j=0;j<aClassName.length;j++) {
            if (aClassName[j]== className) {
                arr.push(aEls[i]);
                break;
            }
        }

    }
    return arr;
}

/*添加class(可一次性写入多个class以逗号分隔,重复的class不会添加),移除class(可一次性写入多个class以逗号分隔)*/

function addClass(obj,className) {
    var newClassName = className.split(',');
    for (var i=0;i<newClassName.length;i++) {
        // 如果class存在
        if (obj.className) {
            // 如果要添加的class在原来的class中不存在,添加
            var arrClassName = obj.className.split(' ');
            var _index = arrIndexOf(arrClassName,newClassName[i]);
            if (_index == -1) {
                obj.className += ' '+newClassName[i];            
            }
            // 如果要添加的class在原来的class中存在,不添加
        } 
        // 如果class不存在
        else {
            obj.className = newClassName.join(' ');
        }        
    }

}
function removeClass(obj,className) {
    var newClassName = className.split(',');

    for (var i=0;i<newClassName.length;i++) {
        // 如果有class
        if (obj.className) {
            var arrClassName = obj.className.split(' ');
            var _index = arrIndexOf(arrClassName,newClassName[i]);
            if (_index != -1) {
                // 如果找到
                arrClassName.splice(_index,1);
                obj.className = arrClassName.join(' ');
            }
        }        
    }

}


function arrIndexOf(arr,v){
    for (var i=0;i<arr.length;i++) {
        if (arr[i]==v) {
            return i;
        }
    }
    return -1;
}

//匀速运动框架
        function toMove(obj,attr,target,speed,endFn) {
            clearInterval(obj.timer);
            var speed = obj.offsetLeft < target ? speed : - speed;
            obj.timer = setInterval(function(){
                
                if (Math.abs(obj.offsetLeft-target)<Math.abs(speed)) {
                    obj.style[attr] = target + 'px';
                    clearInterval(obj.timer);
                    endFn && endFn();
                } else {
                    obj.style[attr]= obj.offsetLeft + speed +'px';                    
                }

            },30);
        }

// 缓冲运动框架
function toMove (obj,iTarget) {
    clearInterval(obj.timer);
    obj.timer = setInterval(function(){
        var speed = (iTarget - obj.offsetTop)/10;
        speed = iTarget>obj.offsetTop ? Math.ceil(speed) : Math.floor(speed);
        if (obj.offsetTop==iTarget) {
            clearInterval(obj.timer);
        }    
        obj.style.top = obj.offsetTop + speed + 'px';            
    },30);
}

//事件绑定兼容,调用举例:bind(document,'click',fn)
function bind(obj,evName,fn){
  if (obj.addEventListener) {
      obj.addEventListener(evName,fn,false);  //标准浏览器
  } else {
      obj.attachEvent('on'+evName,function(){
               fn.call(obj);  //IE9以下 
       });
  }  
}
 
//拖拽

        function drag(obj){
            obj.onmousedown = function(ev){
                var ev = ev || event;
                var disX = ev.clientX-this.offsetLeft;
                var disY = ev.clientY-this.offsetTop;
          //IE9以下使用,全局捕捉
                if (this.setCapture){
                    this.setCapture();    
                }
                
                document.onmousemove = function(ev){
                    var ev = ev || event;
                    obj.style.left = ev.clientX - disX +'px';
                    obj.style.top = ev.clientY - disY +'px';
                };
                document.onmouseup = function(){
                    document.onmouseup = document.onmousemove = null;
                    if (obj.releaseCapture) {
                        obj.releaseCapture();    
                    }
                    
                };
                return false;
            };            
        }
 
 
 // 设置cookie
        function setCookie(key,value,t) {
            var oDate = new Date();
            oDate.setDate(oDate.getDate()+t);
            document.cookie = key+'='+encodeURI(value)+';expires='+oDate.toGMTString();
        }
 // 获取cookie的值
        function getCookie(key) {
            var arr1 = document.cookie.split('; ');
            for (var i=0;i<arr1.length;i++) {
                var arr2 = arr1[i].split('=');
                if (arr2[0] == key) {
                    return (decodeURI(arr2[1]));
                }
            }
        }
//删除cookie
        function removeCookie(key) {
            setCookie(key,'',-1);
        }
//AJAX封装
        function ajax(method,url,data,success){
            var xhr = null;
            if (window.XMLHttpRequest) {
                xhr = new XMLHttpRequest();
            } else {
                xhr = new ActiveXObject('Microsoft.XMLHTTP')
            }
            if (method == 'get' && data) {
                url+='?'+data;
            }
            xhr.open(method,url,true);

            if (method == 'post') {
                xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
                xhr.send(data);
            } else {
                xhr.send();
            }            
            

            xhr.onreadystatechange = function(){
                if (xhr.readyState==4) {
                    if (xhr.status==200) {
                        success && success(xhr.responseText);
                    } else {
                        alert('ERROR:'+xhr.status);
                    }
                }
            };
        }
        //异步方式请求URL下载
        function download_file(url) {

            var iframeBody, result;

            if (typeof(download_file.iframe) == "undefined") {

                var iframe = document.createElement("iframe");

                iframe.setAttribute("name", "newiframe");

                download_file.iframe = iframe;
                
                document.body.appendChild(download_file.iframe);
            }

            download_file.iframe.src = url;


            download_file.iframe.onload = function() {

                iframeBody = window.frames["newiframe"].document.body.innerHTML;

                if(iframeBody) {
                    try{
                        result = JSON.parse(iframeBody);
                        alert('result:',result);
                        if (result.status == 0) {

                            alert("抱歉,该包还没有生成");

                        }
                    }catch(e) {
                        //alert(e)
                    }
                    
                }

            }            

            download_file.iframe.style.display = "none";
        }

var DEFAULT_WIDTH = 800, // 页面的默认宽度

    ua = navigator.userAgent.toLowerCase(), // 根据 user agent 的信息获取浏览器信息

    deviceWidth = window.screen.width, // 设备的宽度

    devicePixelRatio = window.devicePixelRatio || 1, // 物理像素和设备独立像素的比例,默认为1

    scale = deviceWidth/DEFAULT_WIDTH,//缩放比例

    targetDensitydpi;

// Android4.0以下手机不支持viewport的width,需要设置target-densitydpi

if (ua.indexOf("android") !== -1 && parseFloat(ua.slice(ua.indexOf("android")+8)) < 4) {

    targetDensitydpi = DEFAULT_WIDTH / deviceWidth * devicePixelRatio * 160;

    $('meta[name="viewport"]').attr('content', 'target-densitydpi=' + targetDensitydpi + ', width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1 user-scalable=no');

}

else{

    $('meta[name="viewport"]').attr('content', 'width=' + DEFAULT_WIDTH + ', initial-scale=' + scale + ', minimum-scale=' + scale + ',maximum-scale=' + scale + ' user-scalable=no');

}

原文地址:https://www.cnblogs.com/joya0411/p/3557400.html