正在尝试查找javascript元素';s在屏幕上的位置…在webkit浏览器上工作不正常

正在尝试查找javascript元素';s在屏幕上的位置…在webkit浏览器上工作不正常,javascript,html,Javascript,Html,这就是我现在使用的代码。在webkit浏览器(特别是Chrome和Safari)上,如果页面被滚动,它不会考虑页面被滚动的数量。我需要帮助重新设计的功能,以工作的Webkit浏览器。我不想加载jQuery,因为它将在web小部件上使用,我需要将文件大小减小。谢谢大家 function __getIEVersion() { var rv = -1; // Return value assumes failure. if (navigator.appName == 'Microsof

这就是我现在使用的代码。在webkit浏览器(特别是Chrome和Safari)上,如果页面被滚动,它不会考虑页面被滚动的数量。我需要帮助重新设计的功能,以工作的Webkit浏览器。我不想加载jQuery,因为它将在web小部件上使用,我需要将文件大小减小。谢谢大家

function __getIEVersion() {
    var rv = -1; // Return value assumes failure.
    if (navigator.appName == 'Microsoft Internet Explorer') {
        var ua = navigator.userAgent;
        var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
        if (re.exec(ua) != null)
            rv = parseFloat(RegExp.$1);
    }
    return rv;
}

function __getOperaVersion() {
    var rv = 0; // Default value
    if (window.opera) {
        var sver = window.opera.version();
        rv = parseFloat(sver);
    }
    return rv;
}

var __userAgent = navigator.userAgent;
var __isIE =  navigator.appVersion.match(/MSIE/) != null;
var __IEVersion = __getIEVersion();
var __isIENew = __isIE && __IEVersion >= 8;
var __isIEOld = __isIE && !__isIENew;

var __isFireFox = __userAgent.match(/firefox/i) != null;
var __isFireFoxOld = __isFireFox && ((__userAgent.match(/firefox\/2./i) != null) || 
    (__userAgent.match(/firefox\/1./i) != null));
var __isFireFoxNew = __isFireFox && !__isFireFoxOld;

var __isWebKit =  navigator.appVersion.match(/WebKit/) != null;
var __isChrome =  navigator.appVersion.match(/Chrome/) != null;
var __isOpera =  window.opera != null;
var __operaVersion = __getOperaVersion();
var __isOperaOld = __isOpera && (__operaVersion < 10);

function __parseBorderWidth(width) {
    var res = 0;
    if (typeof(width) == "string" && width != null && width != "" ) {
        var p = width.indexOf("px");
        if (p >= 0) {
            res = parseInt(width.substring(0, p));
        }
        else {
            //do not know how to calculate other values 
        //(such as 0.5em or 0.1cm) correctly now
            //so just set the width to 1 pixel
            res = 1; 
        }
    }
    return res;
}

//returns border width for some element
function __getBorderWidth(element) {
    var res = new Object();
    res.left = 0; res.top = 0; res.right = 0; res.bottom = 0;
    if (window.getComputedStyle) {
        //for Firefox
        var elStyle = window.getComputedStyle(element, null);
        res.left = parseInt(elStyle.borderLeftWidth.slice(0, -2));  
        res.top = parseInt(elStyle.borderTopWidth.slice(0, -2));  
        res.right = parseInt(elStyle.borderRightWidth.slice(0, -2));  
        res.bottom = parseInt(elStyle.borderBottomWidth.slice(0, -2));  
    }
    else {
        //for other browsers
        res.left = __parseBorderWidth(element.style.borderLeftWidth);
        res.top = __parseBorderWidth(element.style.borderTopWidth);
        res.right = __parseBorderWidth(element.style.borderRightWidth);
        res.bottom = __parseBorderWidth(element.style.borderBottomWidth);
    }

    return res;
}

//returns the absolute position of some element within document
function getElementAbsolutePos(element) {
    var res = new Object();
    res.x = 0; res.y = 0;
    if (element !== null) { 
        if (element.getBoundingClientRect) {
            var viewportElement = document.documentElement;  
            var box = element.getBoundingClientRect();
            var scrollLeft = viewportElement.scrollLeft;
            var scrollTop = viewportElement.scrollTop;

            res.x = box.left + scrollLeft;
            res.y = box.top + scrollTop;

        }
        else { //for old browsers
            res.x = element.offsetLeft;
            res.y = element.offsetTop;

            var parentNode = element.parentNode;
            var borderWidth = null;

            while (offsetParent != null) {
                res.x += offsetParent.offsetLeft;
                res.y += offsetParent.offsetTop;

                var parentTagName = 
                    offsetParent.tagName.toLowerCase(); 

                if ((__isIEOld && parentTagName != "table") || 
                    ((__isFireFoxNew || __isChrome) && 
                        parentTagName == "td")) {           
                    borderWidth = kGetBorderWidth
                            (offsetParent);
                    res.x += borderWidth.left;
                    res.y += borderWidth.top;
                }

                if (offsetParent != document.body && 
                offsetParent != document.documentElement) {
                    res.x -= offsetParent.scrollLeft;
                    res.y -= offsetParent.scrollTop;
                }


                //next lines are necessary to fix the problem 
                //with offsetParent
                if (!__isIE && !__isOperaOld || __isIENew) {
                    while (offsetParent != parentNode && 
                        parentNode !== null) {
                        res.x -= parentNode.scrollLeft;
                        res.y -= parentNode.scrollTop;
                        if (__isFireFoxOld || __isWebKit) 
                        {
                            borderWidth = 
                             kGetBorderWidth(parentNode);
                            res.x += borderWidth.left;
                            res.y += borderWidth.top;
                        }
                        parentNode = parentNode.parentNode;
                    }    
                }

                parentNode = offsetParent.parentNode;
                offsetParent = offsetParent.offsetParent;
            }
        }
    }

    var scrOfX = 0, scrOfY = 0;
    if( typeof( window.pageYOffset ) == 'number' ) {
        //Netscape compliant
        scrOfY = window.pageYOffset;
        scrOfX = window.pageXOffset;
    } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
        //DOM compliant
        scrOfY = document.body.scrollTop;
        scrOfX = document.body.scrollLeft;
    } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
        //IE6 standards compliant mode
        scrOfY = document.documentElement.scrollTop;
        scrOfX = document.documentElement.scrollLeft;
    }


    return res;
}
function\uuuu getIEVersion(){
var rv=-1;//返回值假定失败。
如果(navigator.appName==“Microsoft Internet Explorer”){
var ua=navigator.userAgent;
var re=newregexp(“MSIE([0-9]{1,}[\.0-9]{0,})”;
如果(重新执行(ua)!=null)
rv=parseFloat(RegExp.$1);
}
返回rv;
}
函数uuu getOperaVersion(){
var rv=0;//默认值
if(window.opera){
var sver=window.opera.version();
rv=浮点数(sver);
}
返回rv;
}
var\uu userAgent=navigator.userAgent;
var\uu isIE=navigator.appVersion.match(/MSIE/)!=无效的
var_uuuieversion=uuuu getIEVersion();
变量isIENew=&isIE&&IEVersion>=8;
var\uuuIseold=\uuuuuIsie&__伊西涅;
var\uu isFireFox=\uu userAgent.match(/firefox/i)!=无效的
var_uuuisfirefoxold=uuu isFireFox&(uuu userAgent.match(/firefox\/2./i)!=null)|
(_userAgent.match(/firefox\/1./i)!=null));
var\uuuiFirefoxNew=\uuuuiFirefox&__伊斯法尔福克奥尔德;
var\uu isWebKit=navigator.appVersion.match(/WebKit/)!=无效的
var\uu isChrome=navigator.appVersion.match(/Chrome/)!=无效的
var_uuisopera=window.opera!=无效的
var__operaVersion=_getOperaVersion();
var uuuIsoperald=uuuuIsopera&(uuuuuuOperaversion<10);
函数uu parseBorderWidth(宽度){
var-res=0;
if(typeof(width)=“string”&&width!=null&&width!=”){
var p=宽度指数(“px”);
如果(p>=0){
res=parseInt(宽度.子串(0,p));
}
否则{
//不知道如何计算其他值
//(如0.5em或0.1cm)现在正确
//所以只需将宽度设置为1像素
res=1;
}
}
返回res;
}
//返回某个元素的边框宽度
函数uu getBorderWidth(元素){
var res=新对象();
res.left=0;res.top=0;res.right=0;res.bottom=0;
if(window.getComputedStyle){
//对于Firefox
var-elStyle=window.getComputedStyle(元素,null);
res.left=parseInt(elStyle.borderLeftWidth.slice(0,-2));
res.top=parseInt(elStyle.borderTopWidth.slice(0,-2));
res.right=parseInt(elStyle.borderRightWidth.slice(0,-2));
res.bottom=parseInt(elStyle.borderBottomWidth.slice(0,-2));
}
否则{
//对于其他浏览器
res.left=\uu parseBorderWidth(element.style.borderLeftWidth);
res.top=\uu parseBorderWidth(element.style.borderTopWidth);
res.right=\uu parseBorderWidth(element.style.borderRightWidth);
res.bottom=\uu解析边界宽度(element.style.borderBottomWidth);
}
返回res;
}
//返回文档中某些元素的绝对位置
函数getElementAbsolutePos(元素){
var res=新对象();
res.x=0;res.y=0;
如果(元素!==null){
if(element.getBoundingClientRect){
var viewportElement=document.documentElement;
var box=element.getBoundingClientRect();
var scrollLeft=viewportElement.scrollLeft;
var scrollTop=viewportElement.scrollTop;
res.x=box.left+scrollLeft;
res.y=box.top+scrollTop;
}
else{//对于旧浏览器
res.x=element.offsetLeft;
res.y=元素偏移量;
var parentNode=element.parentNode;
var borderWidth=null;
while(offsetParent!=null){
res.x+=offsetParent.offsetLeft;
res.y+=offsetParent.offsetop;
变量parentTagName=
offsetParent.tagName.toLowerCase();
if((u ISEOLD&&parentTagName!=“table”)|
(uu isFireFoxNew | | uu isChrome)和
parentTagName==“td”){
borderWidth=kGetBorderWidth
(抵销母公司);
res.x+=borderWidth.left;
res.y+=borderWidth.top;
}
if(offsetParent!=document.body&&
offsetParent!=document.documentElement){
res.x-=offsetParent.scrollLeft;
res.y-=offsetParent.scrollTop;
}
//接下来的几行是修复问题所必需的
//与抵销父母
如果(!uu isIE&!u isoperald | | u isIENew){
while(offsetParent!=parentNode&&
parentNode!==null){
res.x-=parentNode.scrollLeft;
res.y-=parentNode.scrollTop;
如果(uuu isFireFoxOld | | uuu isWebKit)
{
边框宽度=
kGetBorderWidth(父节点);
res.x+=borderWidth.left;
res.y+=borderWidth.top;
}
parentNode=parentNode.parentNode;
}    
}
parentNode=offsetParent.parentNode;
offsetParent=offsetParent.offsetParent;
}
}
}
变量scrOfX=0,scrOfY=0;
if(typeof(window.pageYOffset)=“number”){
//网景兼容
scrOfY=window.pageYOffset;
scrOfX=window.pageXOffset;
}else if(document.body&(document.body.scrollLeft | | document.body.scrollTop)){
//DOM兼容
sc
    if (element.getBoundingClientRect) {
        var viewportElement = document.documentElement;  
        var box = element.getBoundingClientRect();
        var scrollLeft = viewportElement.scrollLeft;
        var scrollTop = viewportElement.scrollTop;

        res.x = box.left + scrollLeft;
        res.y = box.top + scrollTop;

    }