在重新加载页面的情况下奇怪的 JQuery 行为
Weird JQuery behaviour in case of reloading page
我网站的导航中有一条"魔术线"(它是悬停菜单元素下的幻灯片,如果我已经在该 URL 上,请保留在那里)。
$(function() {
var $el, leftPos, newWidth, $mainNav = $("#menu");
$mainNav.append("<li id='magic-line'></li>"); // line with position
// absolute
var $magicLine = $("#magic-line");
// initialization
if ($('.selected')[0].id == 'logo') { // we're on the main page
$magicLine.width(1) // just hide
.css({
"left" : 100
}).data("origLeft", 100).data("origWidth", 1);
} else { // we're on the not-main page
off = parseInt($('#menu > .selected').css('padding-left').slice(0, -2));
leftPos = $("#menu > .selected").position().left + off;
$magicLine.width($(".selected").width()) // stay under the menu
// element
.css("left", leftPos).data("origLeft", $magicLine.position().left)
.data("origWidth", $magicLine.width())
}
$("#menu > .nav-item").hover(function() { // go under the menu element
$el = $(this);
newWidth = $el.width();
off = parseInt($el.css('padding-left').slice(0, -2));
leftPos = $el.position().left + off;
$magicLine.stop().animate({
left : leftPos,
width : newWidth
}, 200);
}, function() {
$magicLine.stop().animate({
left : $magicLine.data("origLeft"),
width : $magicLine.data("origWidth")
}, 200);
});
});
我发现了一些奇怪的行为。每个浏览器都略有不同,但趋势是相同的:当我单击菜单元素时 - 它转到正确的位置(假设左 260px),我可以一次又一次地单击,但它仍然存在。但是当我按 F5(或只是输入 url)时,它出现在略有不同的位置(左 256px)。因此,我单击相同的元素,它再次位于正确的位置。如果我不停止,它可能会发生巨大变化,并且在 F5 出现在正确的位置之后。
那么这种行为的原因是什么呢?它以某种方式保存状态吗?F5 和仅单击有什么区别?我目前看到的唯一原因是我的 django 开发 Web 服务器是完全同步、缓慢且非缓存的,但我无法在生产服务器上检查它。
因此,问题出在菜单(@font面)中使用的自定义字体和相关宽度上。如果字体更改为安全列表中的字体(Arial,Verdana),它将呈现并按照我的预期行事,但是当使用自定义字体时,它会折叠。顺便说一句,浏览器的JS控制台给了我这个警告:"资源解释为字体,但使用MIME类型application/x-font-otf传输",但我不确定它是否与问题有关。
我的解决方案是简单地声明每个元素的宽度,以便浏览器从一开始就可以正确呈现它。
相关文章:
- 如何在未直接触发的情况下停止事件
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 在不使用jquery的情况下查找页面中的所有锚点并附加函数
- 在不打开聊天屏幕的情况下制作Zopim-ding代理
- 在不阻止默认行为的情况下检测IE10中的缩放
- 如何在不传递此信息的情况下查找被调用的元素
- 如何在不刷新页面的情况下更新显示框
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- JavaScript-在手机上不工作的情况下,在外部单击时隐藏元素
- 在我的情况下,如何进行http请求
- 在不知道深度或父属性的情况下从对象中删除属性
- 在不破坏未定义函数的情况下,对多个视图使用单个js文件
- 在以下情况下解释 >= 和 <= 运算符的行为
- 在重新加载页面的情况下奇怪的 JQuery 行为
- 如何在不丢失鼠标行为的情况下使用DIV覆盖层
- 在FullCalendar中,我可以在不使用拖动的情况下获得类似于dropable的行为
- 在没有CMD/CTRL的情况下,更改单击更改时选择[多个]的行为
- 被Javascript弄糊涂了'It’这种行为是在特定情况下发生的
- 在Javascript行为不规律的情况下在两种状态之间应用转换
- 是否可以在不改变行为的情况下重新定义javascript函数的部分