固定位置元件性能不佳

时间:2015-01-03 03:45:14

标签: javascript jquery html css

在浏览Chrome时滚动时,我的网站上有固定元素的问题。

当向上和向下滚动页面时,元素会自动闪烁并重复。

通常在面对这个问题时,我通常能够通过简单的z-index解决问题,但这对这个特定问题没有任何影响。

Website Code Fiddle

Actual Website有问题的元素是左侧的黑色滚动元素。

Simplified Fiddle to isolate the issue

以下是复制问题的简化小提琴代码:

// HTML

 <ul id="et-float-menu">
     <li class="et-float-menu-item1">
        <a id="scrollUp">
            <span><img /></span>
        </a>
    </li>
    <li class="et-float-menu-item2">
        <a id="scrollDown">
            <span><img /></span>
        </a>
    </li>
</ul>

<div class="jumptosection selected" id="section1">
    <h2>Section 1</h2>
</div>    
<div class="jumptosection" id="section2">
    <h2>Section 2</h2>
</div>    
<div class="jumptosection" id="section3">
    <h2>Section 3</h2>
</div>    
<div class="jumptosection" id="section4">
    <h2>Section 4</h2>
</div>

// JS
function changeSelection(sectionFrom, sectionTo) {
    if(sectionTo.length > 0) {
        sectionFrom.removeClass("selected");
        sectionTo.addClass("selected");
        jQuery("body").animate({scrollTop: sectionTo.offset().top});
    }
}

jQuery(document).on("click", "#scrollDown", function(){
    var currentSection = jQuery(".selected");
    var nextSection = currentSection.next(".jumptosection");

    changeSelection(currentSection, nextSection);

    return false;
});

jQuery(document).on("click", "#scrollUp", function(){
    var currentSection = jQuery(".selected");
    var prevSection = currentSection.prev(".jumptosection");

    changeSelection(currentSection, prevSection);

    return false;
});

// CSS

.jumptosection {
    height: 200px;
    background-color:#e8e8e8;
}

#et-float-menu {
position: fixed;
z-index: 11;
left: 0;
top: 45%;
background-color: #000;
padding: 20px 10px 10px 15px;
margin: 0;
-webkit-border-top-right-radius: 8px;
-webkit-border-bottom-right-radius: 8px;
-moz-border-radius-topright: 8px;
-moz-border-radius-bottomright: 8px;
border-top-right-radius: 8px;
border-bottom-right-radius: 8px;
}

#et-float-menu a {
padding: 0;
clear: both;
float: left;
margin-bottom: 10px;
color: #fff;
}

#et-float-menu a:hover { color: #b2b2b2; transition: color 300ms ease 0s; }

#et-float-menu li {
display: block;
margin-left: 0;
}


.et-float-menu-item a { display: inline-block; font-size: 24px; position: relative; text-align: center; transition: color 300ms ease 0s; color: #fff; text-decoration: none; }
.et-float-menu-item a:hover { color: #a0a0a0; }
    .et-social-icon span { display: none; }
.et-float-menu-item1 a:before { content: '↑';font-size:22px; }
.et-float-menu-item2 a:before { content: '↓';font-size:22px; }

是否有人知道此问题的原因和可能的解决方案?

1 个答案:

答案 0 :(得分:4)

我设法在Chrome中复制了这个问题并使用Link我将-webkit-backface-visibility: hidden;添加到了UL元素中,它似乎解决了这个问题..至少对我来说。你可以尝试一下。

可以在上面的链接中找到对该问题的一个很好的解释,并且可以找到对该问题的更深入的评论Here

摘自上面的链接http://benfrain.com/improving-css-performance-fixed-position-elements/

  

...添加背面可见性:隐藏;到固定位置的元素。   这就是停止在滚动上发生的油漆。所以,我有一个很好的   我自己网站的简单解决方案,但我很生气,我不明白   为什么这样有效:我怀疑但没有实际的证据。在这些   情况我总是做同样的事情;问某人更聪明。

     

...元素重绘时,脏矩形计算完成   层。因此,如果一个元素在它自己的层上,那么它将不会影响   还要别的吗。如果您提升固定标题 - 比如说 - 那么当内容时   出现在页面底部的只有新内容   需要画画。没有促销标题需要   重新粉刷在页面顶部。你可能想知道为什么我们不这样做   自动提升固定位置元素。答案是:我们这样做   对于高DPI屏幕,但我们不会因为DPI低而丢失   文本上的子像素抗锯齿,这不是我们想要的   默认。在高DPI屏幕上你无法分辨,所以它在那里是安全的。