zoukankan      html  css  js  c++  java
  • 《Pro JavaScript Techniques》中的一些函数

    //获取元素的样式值。
    function getStyle(elem, name) {
        if (elem.style[name]) {
            return elem.style[name];
        } else if (elem.currentStyle) {
            return elem.currentStyle[name];
        } else if (document.defaultView && document.defaultView.getComputedStyle) {
            name = name.replace(/([A-Z])/g, "-$1");
            name = name.toLowerCase();
            var s = document.defaultView.getComputedStyle(elem, "");
            return s && s.getPropertyValue(name);
        } else {
            return null
        }
    }
    //获取元素相对于这个页面的x和y坐标。    
    function pageX(elem) {
        return elem.offsetParent ? (elem.offsetLeft + pageX(elem.offsetParent)) : elem.offsetLeft;
    }
    
    function pageY(elem) {
        return elem.offsetParent ? (elem.offsetTop + pageY(elem.offsetParent)) : elem.offsetTop;
    }
    //获取元素相对于父元素的x和y坐标。        
    function parentX(elem) {
        return elem.parentNode == elem.offsetParent ? elem.offsetLeft : pageX(elem) - pageX(elem.parentNode);
    }
    
    function parentY(elem) {
        return elem.parentNode == elem.offsetParent ? elem.offsetTop : pageY(elem) - pageY(elem.parentNode);
    }
    //获取使用css定位的元素的x和y坐标。
    function posX(elem) {
        return parseInt(getStyle(elem, "left"));
    }
    
    function posY(elem) {
        return parseInt(getStyle(elem, "top"));
    }
    //设置元素位置。    
    function setX(elem, pos) {
        elem.style.left = pos + "px";
    }
    
    function setY(elem, pos) {
        elem.style.top = pos + "px";
    }
    //增加元素X和y坐标。    
    function addX(elem, pos) {
        set(elem, (posX(elem) + pos));
    }
    
    function addY(elem, pos) {
        set(elem, (posY(elem) + pos));
    }
    //获取元素使用css控制大小的高度和宽度    
    function getHeight(elem) {
        return parseInt(getStyle(elem, "height"));
    }
    
    function getWidth(elem) {
        return parseInt(getStyle(elem, "width"));
    }
    //获取元素可能,完整的高度和宽度
    function getFullHeight(elem) {
        if (getStyle(elem, "display") != "none") {
            return getHeight(elem) || elem.offsetHeight;
        } else {
            var old = resetCss(elem, {
                display: "block",
                visibility: "hidden",
                position: "absolute"
            });
            var h = elem.clientHeight || getHeight(elem);
            restoreCss(elem, old);
            return h;
        }
    }
    
    function getFullWidth(elem) {
        if (getStyle(elem, "display") != "none") {
            return getWidth(elem) || elem.offsetWidth;
        } else {
            var old = resetCss(elem, {
                display: "block",
                visibility: "hidden",
                position: "absolute"
            });
            var w = elem.clientWidth || getWidth(elem);
            restoreCss(elem, old);
            return w;
        }
    }
    //设置css,并保存旧的css
    function resetCss(elem, prop) {
        var old = {};
        for (var i in prop) {
            old[i] = elem.style[i];
            elem.style[i] = prop[i];
        }
        return old;
    }
    
    function restoreCss(elem, prop) {
        for (var i in prop) {
            elem.style[i] = prop[i];
        }
    }
    //显示和隐藏
    function show(elem) {
        elem.style.display = elem.$oldDisplay || " ";
    }
    
    function hide(elem) {
        var curDisplay = getStyle(elem, "display");
        if (curDisplay != "none") {
            elem.$oldDisplay = curDisplay;
            elem.style.display = "none";
        }
    }
    //设置透明度    
    function setOpacity(elem, num) {
        if (elem.filters) {
            elem.style.filter = "alpha(opacity=" + num + ")";
        } else {
            elem.style.opacity = num / 100;
        }
    }
    //滑动    
    function slideDown(elem) {
        var h = getFullHeight(elem);
        elem.style.height = "0px";
        show(elem);
        for (var i = 0; i <= 100; i += 5) {
            new function() {
                var pos = i;
                setTimeout(function() {
                    elem.style.height = (pos / 100 * h) + "px";
                }, (pos * 10));
            }
        }
    }
    //渐变
    function fadeIn(elem) {
        show(elem);
        setOpacity(elem, 0);
        for (var i = 0; i <= 100; i += 5) {
            new function() {
                var pos = i;
                setTimeout(function() {
                    setOpacity(elem, pos);
                }, (pos + 1) * 10);
            }
        }
    }
    //获取鼠标光标相对于整个页面的位置。    
    function getX(e) {
        e = e || window.event;
        return e.pageX || e.clientX + document.body.scrollLeft;
    }
    
    function getY(e) {
        e = e || window.event;
        return e.pageY || e.clientY + document.body.scrollTop;
    }
    //获取鼠标光标相对于当前元素的位置。
    function getElementX(e) {
        return (e && e.layerX) || window.event.offsetX;
    }
    
    function getElementY(e) {
        return (e && e.layerY) || window.event.offsetY;
    }
    //获取页面的高度和宽度
    function getPageHeight() {
        var de = document.documentElement;
        return document.body.scrollHeight || (de && de.scrollHeight);
    }
    
    function getPageWidth() {
        var de = document.documentElement;
        return document.body.scrollWidth || (de && de.scrollWidth);
    }
    //获取滚动条的位置。
    function scrollX() {
        var de = document.documentElement;
        return self.pageXOffset || (de && de.scrollLeft) || document.body.scrollLeft;
    }
    
    function scrollY() {
        var de = document.documentElement;
        return self.pageYOffset || (de && de.scrollTop) || document.body.scrollTop;
    }
    //获取视口的高度和宽度。    
    function windowHeight() {
        var de = document.documentElement;
        return self.innerHeight || (de && de.offsetHeight) || document.body.offsetHeight;
    }
    
    function windowWidth() {
        var de = document.documentElement;
        return self.innerWidth || (de && de.offsetWidth) || document.body.offsetWidth;
    }
  • 相关阅读:
    UVA 1599 Ideal Path(双向bfs+字典序+非简单图的最短路+队列判重)
    UVA 1572 Self-Assembly(拓扑排序)
    最大流当前弧优化Dinic分层模板
    POJ 3683.Priest John's Busiest Day 2-SAT
    n的m划分 整数拆分问题
    表达式计算
    大白书中无向图的点双联通分量(BCC)模板的分析与理解
    Codeforces 766D. Mahmoud and a Dictionary 并查集 二元敌对关系 点拆分
    树状数组入门
    Tire树入门专题
  • 原文地址:https://www.cnblogs.com/leejersey/p/3548296.html
Copyright © 2011-2022 走看看