简体   繁体   English

仅在锚定滚动时在Safari桌面上闪烁的粘滞标头

[英]Sticky Header Flickering on Safari Desktop Only When Anchor Scrolling

I've built a website in Adobe Muse which has a sticky header that appears when scrolling past the logo. 我在Adobe Muse中建立了一个网站,当滚动浏览徽标时会出现一个粘性标题。 This works perfectly on Chrome and Firefox, even on iPad Safari, however, it does not work well on desktop Safari and flickers badly when clicking an anchor link which smoothly scrolls to the anchor. 这在Chrome和Firefox上完美运行,即使在iPad Safari上也是如此,但是,它在桌面Safari上效果不佳,并且在单击平滑滚动到锚点的锚链接时会出现严重抖动。

Please see the example website below: 请参阅下面的示例网站:

http://mattstest03.businesscatalyst.com/index.html http://mattstest03.businesscatalyst.com/index.html

When clicking 'Contact Us' on Firefox/Chrome, the sticky header will look great throughout the smooth scroll. 在Firefox / Chrome上单击“联系我们”时,粘贴标题在整个平滑滚动中看起来很棒。 On Safari, it flickers on/off during the scrolling. 在Safari上,它在滚动过程中会打开/关闭。 Here's a GIF of the flickering effect: 这是闪烁效果的GIF:

在此输入图像描述

Here's my code: 这是我的代码:

CSS CSS

#sticky-bar {
    display: none;
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 53px;
    background: transparent url("assets/photoshop-eclipse.jpg") repeat left top;
}
/* Circle Logo */
#u73837 {
    width: 57px;
    transition: width 0.4s, height 0.4s;
    -moz-transition: width 0.4s, height 0.4s;
    -webkit-transition: width 0.4s, height 0.4s;
}
/* Text Logo */
#u56099 {
    width: 229px;
    transition: all 0.4s !important;
    -moz-transition: all 0.4s !important;
    -webkit-transition: all 0.4s !important;
}
/* Sticky Contact Us */
.sticky-contact {
    position: fixed !important;
    top: 9px !important;
    left: -160px !important;
    padding-bottom: 4px !important;
    margin-top: 0 !important;
    transition: all 0.4s;
    -moz-transition: all 0.4s;
    -webkit-transition: all 0.4s;
}
.sticky-contact:before {
    content: "We'd love to talk";
    position: absolute;
    left: calc(-100% - 30px);
    top: 8px;
    color: #eee;
    font-family: 'Raleway', 'Open Sans';
    font-size: 17px;
}
.contact-inner {
    margin-top: 4px !important;
    font-size: 17px !important;
    transition: all 0.4s;
    -moz-transition: all 0.4s;
    -webkit-transition: all 0.4s;
}
/* Circle Logo Transition */
.smaller-logo {
    position: fixed !important;
    top: 7px !important;
    width: 40px !important;
    height: 40px !important;
}
/* Normal Circle Logo */
.normal-logo {
    width: 57px;
    height: 57px;
}
/* Smaller Text */
.smaller-text {
    width: 0 !important;
}

JavaScript JavaScript的

var width = window.innerWidth;

if (width > 1000) {
    if (jQuery(window).scrollTop() > (jQuery('#u106240').offset().top - 15)) {
        // Fade in sticky bar
        jQuery('#sticky-bar').css('display', 'block');
        // Re-position 'Contact Us'
        jQuery('#buttonu206').addClass('sticky-contact');
        jQuery('#u200-4').addClass('contact-inner');
        // Hide logo text
        jQuery('#u56099').css('display', 'none');
        // Animate circle logo (CSS)
        jQuery('#u73837').removeClass('normal-logo');
        jQuery('#u73837').addClass('smaller-logo');
    } else {
        // Fade out sticky bar
        jQuery('#sticky-bar').css('display', 'none');
        // Re-position 'Contact Us'
        jQuery('#buttonu206').removeClass('sticky-contact');
        jQuery('#u200-4').removeClass('contact-inner');
        // Show logo text
        jQuery('#u56099').css('display', 'initial');
        // Animate circle logo (CSS)
        jQuery('#u73837').removeClass('smaller-logo');
        jQuery('#u73837').addClass('normal-logo');
    }
}

Please note, this isn't anything to do with the scrolling section of the JavaScript code (line 4) as I have removed this for testing and the issue persists. 请注意,这与JavaScript代码的滚动部分(第4行)没有任何关系,因为我已将其删除以进行测试并且问题仍然存在。

I have tried a couple of CSS "fixes" on the sticky-bar ID such as -webkit-transform: translate3d(0,0,0) and -webkit-translateZ(0) but I've not had any luck. 我在sticky-bar ID上尝试了几个CSS“修复”,例如-webkit-transform: translate3d(0,0,0)-webkit-translateZ(0)但我没有运气。 Could anybody please offer insight? 有人可以提供见解吗? Thank you. 谢谢。

position: fixed does not work well in ios is a know issue . position: fixed在ios中运行不正常是一个已知问题 Seem like it is not fixed till now. 好像到现在为止还没有修好。 Setting translate3d(0,0,0) for element is a walk around but it is not perfect. 为元素设置translate3d(0,0,0)是一种四处走走,但它并不完美。 It is still weird when you scroll. 滚动时仍然很奇怪。 So my advice is using position: absolute instead. 所以我的建议是使用position: absolute Just move your bar out of your content container, then give it position: absolute . 只需将您的栏移出内容容器,然后将其position: absolute See the code snipet below: 请参阅下面的代码snipet:

 html, body { width: 100%; height: 100%; margin: 0; padding: 0; } .fixed-bar { position: absolute; top: 0; left: 0; width: 100%; height: 50px; background-color: #123; color: #FFF; text-align: center; line-height: 50px; z-index: 1; } .content { background-color: #ddd; color: #333; width: 100%; padding-top: 50px; position: absolute; top: 0; left: 0; right: 0; bottom: 0; overflow: auto; } .item { width: 100%; text-align: center; height: 200px; height: 30vh; padding-top: 10vh; } 
 <div class="fixed-bar"> I am a fixed bar </div> <div class="content"> <div class="item"> Your content goes here </div> <div class="item"> Your content goes here </div> <div class="item"> Your content goes here </div> <div class="item"> Your content goes here </div> <div class="item"> Your content goes here </div> </div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM