zoukankan      html  css  js  c++  java
  • js原生函数一些封装

    这是一些js原生封装的函数,主要是为了兼容IE浏览器,如下

    获取css样式

    function getStyle(ele, prop) {
            if(window.getComputedStyle) {
                return window.getComputedStyle(ele, null)[prop];
            }else {
                return ele.currentStyle[prop];
            }
        }

    fixed封装

    function fixed(ele) {
            var w = parseInt(getStyle(ele, 'left')),
                h = parseInt(getStyle(ele,  'top'));
            addEvent(ele, 'scroll', function () {
                ele.style.left = w + getScrollOffset().w + 'px';
                ele.style.top = h + getScrollOffset().h + 'px';
            })
        }

    获取浏览器可视区域宽度

     function getViewPortOffset() {
            if(window.innerWidth) {
                return {
                    w: window.innerWidth,
                    h: window.innerHeight
                }
            }else if(document.compatMode = "BackCompat") {
                return {
                    w: document.body.clientWidth,
                    h: document.body.clientHeigth
                }
            }else {
                return {
                    w: document.documentElement.clientWidth,
                    h: document.documentElement.clientHeight
                }
            }
        }

    获取浏览器滚动距离

    function getScrollOffset() {
            if(window.pageXOffset) {
                return {
                    w: window.pageXOffset,
                    h: window.pageYOffset
                }
            }else {
                return {
                    w: document.body.scrollLeft + document.documentElement.scrollLeft,
                    h: document.body.scrollTop + document.documentElement.scrollTop
                }
            }
        }

    获取元素尺寸宽高

     Element.prototype.getElementOffset = function () {
            var objData = this.getBoundingClientRect();
            if(objData.width)  {
                return {
                    w: objData.width,
                    h: objData.height
                }
            }else {
                return {
                    w: objData.right - objData.left,
                    h: objData.top - objData.bottom
                }
            }
        }

    获取元素相对于浏览器的left和top值

     Element.prototype.getElementPosition = function () {
            var x = 0,
                y = 0,
                ele = this;
            while(ele != document.body) {
                x += ele.scrollLeft;
                y += ele.scrollTop;
                ele = ele.offsetParent;
            }
            return {
                x: x,
                y: y
            }
        }

    绑定事件

     function addEvent(ele, type, handle) {
            if(ele.addEventListener) {
                ele.addEventListener(type, handle, false);
            }else if(ele.attachEvent) {
                ele['temp' + type + handle] = handle;
                ele[type + handle] = function () {
                    ele['temp'  + type + handle].call(ele);
                }
                ele.attachEvent('on' + type, ele[type + hadnle]);
            }else {
                ele['on' + type] = handle;
            }
        }

    取消事件绑定

     function removeEvent(ele, type, handle) {
            if(ele.removeEventListener) {
                ele.removeEventListener(type, handle, false);
            }else if(ele.detachEvent) {
                ele.detachEvent('on' + type, handle);
            }else {
                ele['on' + type] = null;
            }
        }

    阻止事件冒泡

    function stopBubble(event) {
            if(event.stopPropagation) {
                event.stopPropagation();
            }else {
                event.cancelBubble = true;
            }
        }

    取消默认事件

    function cancelHandle (event) {
            if(event.preventDefault) {
                event.preventDeault();
            }else {
                event.returnValue = false;
            }
        }

    拖拽实现

    function drag(ele) {
            var disX, disY;
            addEvent(ele, 'mousedown', function (e) {
                var event = e || window.event;
                disX = event.clientX - getStyle(ele, 'left');
                disY = event.clientY - getStyle(ele, 'top');
                addEvent(ele, 'mousemove', mouseMove);
                addEvent(ele, 'mouseup', mouseUp);
                stopBubble(event);
                cancelHandle(event);
            });
            function mouseMove(event) {
                ele.style.left = event.clientX - disX;
                ele.style.top  = event.clientY - disY;
            }
            function mouseUp(event) {
                removeEvent(ele, 'mousemove', mouseMove);
                removeEvent(ele, 'mouseup', mouseUp);
            }
            
        }

    js异步加载

    function asyncLoaded(url, cb) {
            var oScript = document.createElement('script');
            
            if(oScript.readyState) {
                oScript.onreadystatechange = function () {
                    if(oScript.readyState == 'loaded' || oScrip.readyState == 'completed') {
                        cb();
                    }
                }
            }else {
                oScript.onload = function () {
                    cb();
                }
            }
    
            oScript.src = url;
            document.body.appnedChild(oScript);
        }
  • 相关阅读:
    Python random() 生成随机数
    【centos7】添加开机启动服务/脚本
    SSH远程会话管理工具
    resolv.conf 的超时(timeout)与重试(attempts)机制
    Linux系统中sysctl命令详解
    NMI watchdog: BUG: soft lockup
    nginx实现最简单的直播
    Linux下编译PHP常见错误及解决方法
    zbb20180919 db 数据库的水平分割和垂直分割
    zbb20180918 java servlet 重定向与请求转发的区别
  • 原文地址:https://www.cnblogs.com/Walker-lyl/p/7443397.html
Copyright © 2011-2022 走看看