偏移不在IE中滚动重新计算

时间:2013-05-17 16:33:32

标签: jquery internet-explorer scroll tooltip offset

我已经开始在一家新公司工作,他们给了我一些在IE中打破的jQuery。出于某种原因,只有在Internet Explorer中向上或向下滚动页面时,工具提示的位置才会重新计算。文件中有很多内容,但这里是我认为与帮助最相关的部分:

reposition: function (target, tip, classes) {
                var width, nub, nubHeight, nubWidth, row, objPos;
                tip.css('visibility', 'hidden').show();
                width = target.data('width');
                nub = tip.children('.nub');
                nubHeight = nub.outerHeight();
                nubWidth = nub.outerWidth();
                objPos = function (obj, top, right, bottom, left, width) {
                    return obj.css({
                        'top': top,
                        'bottom': bottom,
                        'left': left,
                        'right': right,
                        'width': (width) ? width : 'auto'
                    }).end()
                };

                objPos(tip, (target.offset().top - tip.outerHeight() - nubHeight), 'auto', 'auto', target.offset().left, width);
                objPos(nub, 'auto', 'auto', -nubHeight, 'auto');  


                 <!--Some code here only if the window is less than 767px-->


   show: function ($target) {
            var $tip = methods.getTip($target);
            methods.reposition($target, $tip, $target.attr('class'));
            $tip.fadeIn(150)
        },

小块指的是工具提示底部的小尾巴,所以它看起来像是一个引号泡泡。

更新 我为scrollTop创建了一个警报,它在IE中保持为0,而其他浏览器会正确重新计算。所以感谢this post我能够让它重新计算。现在我的代码看起来像这样(用星号标记的更改):

 reposition: function (target, tip, classes) {
                var width, nub, nubHeight, nubWidth, row, objPos;
                tip.css('visibility', 'hidden').show();
                width = target.data('width');
                nub = tip.children('.nub');
                nubHeight = nub.outerHeight();
                nubWidth = nub.outerWidth();
            **pageTop = (document.documentElement && document.documentElement.scrollTop) || document.body.scrollTop;**          
                objPos = function (obj, top, right, bottom, left, width) {
                    return obj.css({
                        'top': top,
                        'bottom': bottom,
                        'left': left,
                        'right': right,
                        'width': (width) ? width : 'auto'
                    }).end()
                };

                **objPos(tip, (pageTop + (target.offset().top - tip.outerHeight() - nubHeight)), 'auto', 'auto', target.offset().left, width);**
                objPos(nub, 'auto', 'auto', -nubHeight, 'auto');

所以它适用于IE(yay),但现在它已经在Firefox和Chrome中关闭了。我越走越近了。我能感觉到。如果有人能在这一点上帮助我,我会很感激,否则我会在时间允许的情况下接受它。

更新2:我现在更新了pageTop变量:

 pageTop = $('html').scrollTop();

这适用于IE8和Chrome,但唉,Firefox并不喜欢它。我也试过

 pageTop = $('body,html').scrollTop();

但它也没有做任何事情,而且它更长,所以我把它拿出来了。

战斗仍在继续。

0 个答案:

没有答案