【问题标题】:Redraw/Repaint Issue with show/hide in Chrome在 Chrome 中显示/隐藏的重绘/重绘问题
【发布时间】:2015-08-15 14:35:41
【问题描述】:

我的网站引导导航菜单的 navbar-brand 元素在 Chrome 中出现了一个奇怪的问题。

我们在标题部分显示了一个较大的网站徽标,在导航栏的 navbar-brand 元素中显示了一个较小的徽标,默认情况下不显示。当向下滚动页面时,我们将导航栏附加到浏览器的顶部并显示()导航栏品牌元素。向上滚动时,小标志应该会隐藏(),因为大标志是可见的。

这在 IE 和 Firefox 中有效,但在 Chrome 中仅部分有效。向下滚动时的显示与向上滚动时的隐藏一样工作,但正如您将看到的,为显示徽标而移动的菜单项在隐藏徽标时不会向后移动。如果您随后单击任何菜单条目,菜单条目将移回它们应位于的位置。

代码本身尽可能简单,所以我不认为这是错误的;

$(window).scroll(function () {
    if ($(this).scrollTop() > $('header').height()) {
        $('.navbar-brand').show();
    } else {
        $('.navbar-brand').hide();
    }
});

我在 https://jsfiddle.net/96jqnu38/3/ 有一个简化的 jsfiddle 来说明问题

我似乎不知道如何让 chrome 重绘/重绘菜单项回到原位。

(Windows 8.1 上的 Chrome 43.0.2357.81)

【问题讨论】:

  • 你需要去抖动。你调用你的脚本太多了。我今天才回答这个问题。这是中级 javascript 开发人员的常见问题。 stackoverflow.com/questions/30577225/…
  • 如果您还有其他问题,请告诉我。
  • 感谢@JosephCasey 我在jsfiddle.net/96jqnu38/4 添加了去抖,但问题仍然存在
  • 抱歉,滚动问题经常是同一件事,我草草下结论。

标签: jquery css google-chrome twitter-bootstrap-3


【解决方案1】:

好的,您的问题主要是 CSS 问题。您正在使用一个 jquery 函数,它为所选元素提供和内联 css 属性。实际上,通过 .hide 方法分配给元素的 display:none 将删除项目的高度和宽度。但是,您隐藏了一个子元素,并且您需要隐藏 container 元素才能使 css 结构生效。


jquery

    if ($(this).scrollTop() > $('header').height()) {
        $('.navbar-header').show();
    } else {
        $('.navbar-header').hide();
    }

css

.navbar-brand {
    position: relative;
    padding: 5px 15px;
}

【讨论】:

  • 您的答案在一定程度上可以显示/隐藏和重新对齐,但是通过隐藏导航栏标题本身,反应菜单在缩小显示时没有改变。但这确实让我意识到我可以将锚点包装在带有 navbar-brand 类的 div 中,然后将其移到标题之外,然后我的原始代码就可以工作了...jsfiddle.net/96jqnu38/7
猜你喜欢
  • 2013-04-26
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 2015-04-03
  • 2016-02-01
  • 1970-01-01
  • 2015-06-03
  • 2023-03-22
相关资源
最近更新 更多