【问题标题】:JQuery scrollTop causes problems in ChromeJQuery scrollTop 导致 Chrome 出现问题
【发布时间】:2014-05-07 11:17:00
【问题描述】:

我希望一些天才可以帮助我调试我的 JQuery 函数。它在 Firefox 和 Safari 上运行良好,但在 Chrome 上却无法完全呈现背景。奇怪的是,如果我以任何方式调整浏览器窗口的大小,它就会自行修复。

每当您在网站上向下滚动时,JQuery 还会导致顶部导航上的悬停属性中断。

我是编码领域的新手,所以我真的需要一些帮助。我确信它与“window.scroll”有关,但我真的不知道。

您可以访问我的网站:Here

我做了一个 JFiddle:Here

我在下面粘贴了我的 Javascript/JQuery:

$("document").ready(function() {
    flag=true;
    $(window).scroll(function(){
        st = $(window).scrollTop();
        if(st>170){
            if(flag);
            $("#flipBox_contain").css("opacity", ".2");
            $("#flipBox_contain").css({"position": "relative"});
        }
        else if(st<170){
            if(flag);
            $("#flipBox_contain").css("opacity", "1");
            $("#flipBox_contain").css("position", "");
        }
        if(st>400){
            if(flag);
            $("#introText").css("opacity", ".2");
            $("#introText").css({"position": "relative"});
        }
        else if(st<400){
            if(flag);
            $("#introText").css("opacity", "1");
            $("#introText").css("position", "");
        }
        if(st>500){
            if(flag);
            $("#psLogo").css("top","0px");
            $("#psLogo").css("opacity","1");
            $("#psBar").css("width","98%");
            $("#psLabel").css("opacity","1");
            $("#psSkill").css("opacity","1");
            setTimeout (function(){
                $("#aiLogo").css("top","0px");
                $("#aiLogo").css("opacity","1");
                $("#aiBar").css("width","93%");
                $("#aiLabel").css("opacity","1");
                $("#aiSkill").css("opacity","1");
            }, 500);
            setTimeout (function(){
                $("#htmlLogo").css("top","0px");
                $("#htmlLogo").css("opacity","1");
                $("#htmlBar").css("width","80%");
                $("#htmlLabel").css("opacity","1");
                $("#htmlSkill").css("opacity","1");
            }, 1000);
            setTimeout (function(){
                $("#cssLogo").css("top","0px");
                $("#cssLogo").css("opacity","1");
                $("#cssBar").css("width","80%");
                $("#cssLabel").css("opacity","1");
                $("#cssSkill").css("opacity","1");
            }, 1500);
            setTimeout (function(){
                $("#javaLogo").css("top","0px");
                $("#javaLogo").css("opacity","1");
                $("#javaBar").css("width","60%");
                $("#javaLabel").css("opacity","1");
                $("#javaSkill").css("opacity","1");
            }, 2000);
            setTimeout (function(){
                $("#phpLogo").css("top","0px");
                $("#phpLogo").css("opacity","1");
                $("#phpBar").css("width","40%");
                $("#phpLabel").css("opacity","1");
                $("#phpSkill").css("opacity","1");
            }, 2500);
            /*setTimeout (function(){$("#psLabel").css("opacity","1")}
            , 1600);
            setTimeout (function(){$("#psSkill").css("opacity","1")}
            , 2100)*/
        }
        else if (st<170){
            if(flag);
            $("#psLogo").css("top","100px");
            $("#psLogo").css("opacity","0");
            $("#psBar").css("width","0");
            $("#psLabel").css("opacity","0");
            $("#psSkill").css("opacity","0");
            setTimeout (function(){
                $("#aiLogo").css("top","100px");
                $("#aiLogo").css("opacity","0");
                $("#aiBar").css("width","0");
                $("#aiLabel").css("opacity","0");
                $("#aiSkill").css("opacity","0");
            }, 500);
            setTimeout (function(){
                $("#htmlLogo").css("top","100px");
                $("#htmlLogo").css("opacity","0");
                $("#htmlBar").css("width","0");
                $("#htmlLabel").css("opacity","0");
                $("#htmlSkill").css("opacity","0");
            }, 1000);
            setTimeout (function(){
                $("#cssLogo").css("top","100px");
                $("#cssLogo").css("opacity","0");
                $("#cssBar").css("width","0");
                $("#cssLabel").css("opacity","0");
                $("#cssSkill").css("opacity","0");
            }, 1500);
            setTimeout (function(){
                $("#javaLogo").css("top","100px");
                $("#javaLogo").css("opacity","0");
                $("#javaBar").css("width","0");
                $("#javaLabel").css("opacity","0");
                $("#javaSkill").css("opacity","0");
            }, 2000);
            setTimeout (function(){
                $("#phpLogo").css("top","100px");
                $("#phpLogo").css("opacity","0");
                $("#phpBar").css("width","0");
                $("#phpLabel").css("opacity","0");
                $("#phpSkill").css("opacity","0");
            }, 2500);
        }//--closes else if
        else{flag=false;}
    }); //--closes window.scroll function
}); //--closes document ready function

【问题讨论】:

  • 请修复指向您网站和 jsfiddle 的链接。
  • 看起来你只是没有正确关闭你的函数,这可能会搞砸你的代码。在某些情况下,您没有左括号{,后面是else if {,没有右括号}
  • if(flag); 是什么意思?如果您刚刚开始,请使用括号明确:if(flag){...}
  • 仅供参考,$("document") 返回 jq 空对象,document 是一个对象,您需要使用$(document)。也就是说,由于 jQuery 内部使用了 Promise,伪就绪处理程序甚至可以在空对象上工作。请注意,这与您的问题无关
  • @Amyth 我修复了链接,感谢您指出这一点。

标签: javascript jquery css google-chrome scrolltop


【解决方案1】:

问题终于解决了!经过一些相当大的“消除过程”故障排除后,它归结为对 z-index 属性的简单滥用。我使用 z-index 编辑了所有 div,因此值是一致的,并且它们都不是太高(例如:200)或太低(例如:-99),而是将它们全部设为 0、1 或 2。这解决了 Chrome重绘问题。希望这可以帮助其他人。

【讨论】:

    【解决方案2】:

    去掉 .wrapper 上的负 z-index 值。这不是一个有效值。

    请参阅此link 了解更多信息。

    【讨论】:

    • 谢谢迷你。我知道 z-index 在技术上不允许没有位置属性伴随它,但为了让一切正常工作,我必须将 z-index 添加到某些元素。我从.wrapper 中删除了它,但一切仍然有效。问题是如果翻转框的任何父元素涉及任何定位,则翻转框不会翻转。这就是为什么我必须使用 JQuery 在滚动事件中添加和删除它。一切都通过 WC3 验证,所以我不确定它发生了什么。
    猜你喜欢
    • 1970-01-01
    • 2018-03-14
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多