我已经开始在一家新公司工作,他们给了我一些在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();
但它也没有做任何事情,而且它更长,所以我把它拿出来了。
战斗仍在继续。