zoukankan      html  css  js  c++  java
  • 获取元素的页面位置,兼容各浏览器

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
    </head>
    <body>
    <div id="test"></div>
        <script>
            /**
            *获取页面元素的滚动位置
            @param {DOM} el Dom元素
            *return {Object} 元素滚动位置对象
            */
            function getScroll (el) {
                var d = el,
                    doc = document,
                    body = doc.body,
                    docElement = doc.documentElement,
                    l,
                    t,
                    ret,
                    isStrict = document.compatMode == "CSS1Compat",
                    isIE = /msie/.test(navigator.userAgent);
    
                if (d == doc || d == body) {
                    if (isIE && isStrict) {
                        l = docElement.scrollLeft;
                        t = docElement.scrollTop;
                    } else {
                        l = window.pageXOffset;
                        t = window.pageYOffset;
                    }
                    ret = {
                        left: l || (body ? body.scrollLeft : 0),
                        top: t || (body ? body.scrollTop : 0)
                    };
                } else {
                    ret = {
                        left: d.scrollLeft,
                        top: d.scrollTop
                    };
                }
    
                return ret;
            }
            /**
            *获取页面元素的位置
            @param {DOM} el Dom元素
            *return {Object} 元素位置对象
            */
            function getXY (el) {
                var doc = document, bd = doc.body,
                    docEl = doc.documentElement,
                    leftBorder = 0,
                    topBorder = 0,
                    ret = [0, 0],
                    round = Math.round,
                    box,
                    scroll,
                    isIE = /msie/.test(navigator.userAgent);
    
    
                if (el != doc && el != bd) {
                    if (isIE) {
                        try {
                            box = el.getBoundingClientRect();
                            // 在ie8之前版本,  documentElement 元素会有两像素的边框, 所以要减去它
                            topBorder = docEl.clientTop || bd.clientTop;
                            leftBorder = docEl.clientLeft || bd.clientLeft;
                        } catch (ex) {
                            box = { left: 0, top: 0 };
                        }
                    } else {
                        box = el.getBoundingClientRect();
                    }
    
                    scroll = getScroll(document);
                    ret = [round(box.left + scroll.left - leftBorder), round(box.top + scroll.top - topBorder)];
                }
                return ret;
            }
            var div = document.getElementById("test");
            var sc = getXY(div);
            console.log(sc);
        </script>
    </body>
    </html>
  • 相关阅读:
    大学生自学网
    如何保证主从复制数据一致性
    CDN
    后端 线上 服务监控 与 报警 方案2
    利用 Gearman 实现系统错误报警功能
    增量部署和全量部署
    后端线上服务监控与报警方案
    简析TCP的三次握手与四次分手
    301 和 302 对 SEO 的影响
    Linux 查看负载
  • 原文地址:https://www.cnblogs.com/webjs/p/2722393.html
Copyright © 2011-2022 走看看