javascript - 修复了 header 在一个版本的 jquery 代码中无法正常工作的问题,为什么我的第二个版本在 Firefox 中如此缓慢?

标签 javascript jquery google-chrome scroll fade

这里首先是一个测试页面的链接:http://www.mindevo.com/tests/tacos.html

编辑:我也设置了一个 jsfiddle 来玩它:http://jsfiddle.net/E4Uav/1/

因此,我在主要功能 div 上设置了具有固定背景的页面。以下是页面设置的基本框架:

<div class="main"></div>
<div class="game2 dark"></div>
<div class="game3 dark"></div>
<div class="gave4 dark"></div>

这是该设置的相应 css:

.main{
  position: relative;
  width: 100%;
  height: 15em;
  background: white url('../images/tacobg.png') no-repeat fixed 0 0;
  padding-top:1em;
}
.game2, .game3, .game4 {
  height:13.3333em;
  width:100%;}
.game2 {background:rgb(0,51,16) url('../images/potatobackground.png') no-repeat 0 0em;}
.game3 {background-color: rgb(0, 1, 82);}
.game4 {background-color: rgb(255, 80, 0);}
.dark {opacity: .5;} 

现在一切正常了。然后我添加了一些 javascript 来告诉下一个 div 在到达某个点时淡入,当我添加 javascript 时,某些东西就会被破坏。

这种情况仅发生在 Chrome 中(也检查了 Chrome Canary),但不会发生在 Firefox 中。当您向下滚动时,淡入会完美发生。现在,当您由于某种原因向上滚动时,背景暂时不再固定,您会一直向上滚动,并且图像上方会出现一些空白(这是“主”div 的背景颜色,而不是整个页面的背景颜色)。

这是我用来淡入“game2”div 的 javascript:

$(document).ready(function() {
   $(window).scroll(function() {
      if ($(window).scrollTop() > 100 ){

         $('.dark').addClass('show');

      } else {

         $('.dark').removeClass('show');

        };    
   });
});

编辑:所以为了解决这个错误,我学习了一种不同的方法来实现我想要做的事情......

这是我的新 javascript,它会跳过添加/删除类(转换确实很奇怪,并且在 Chrome 中触发时非常慢,但它似乎有效):

$(document).ready(function(){
 $(window).scroll(function(){
  $('.dark').each(function(i){

   var half_object = $(this).position().top + ($(this).outerHeight()/2);
   var bottom_window = $(window).scrollTop() + $(window).height();
   var bottom_object = $(this).position().top + $(this).outerHeight();

   if(bottom_window > half_object){
    $(this).animate({'opacity':'1'},200);
   }
   else if(bottom_object > $(window).scrollTop()) {
    $(this).animate({'opacity':'.5'},200);
   }
  });
 });
});

它可能需要一些加速,现在在 Firefox 中这需要永远发生,使用“dark”类的第二个和第三个在相当长一段时间内没有改变其不透明度。以至于它会让用户交互变得烦人。

造成这种延迟的原因是什么?如何加快这段代码的速度,以便它在 div 显示一半时触发,然后当它位于视口(viewport)顶部或底部下方时,它会淡回到 50% 不透明度?

最佳答案

我不认为你做错了什么。看起来像是 Chrome 中的一个错误?对我来说,它会在 Chrome 中延迟后自行修复,并且不会在 IE 中发生。

关于javascript - 修复了 header 在一个版本的 jquery 代码中无法正常工作的问题,为什么我的第二个版本在 Firefox 中如此缓慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24193493/

相关文章:

javascript - 等待异步 grunt 任务完成

javascript - 查找下一个隐藏的 div 并使用 jQuery 选择器显示它

javascript - 如果单击按钮,则更改 Javascript 中的变量

javascript - 以编程方式检测 Chrome 中的混合内容阻止

javascript - 没有右键单击 Chrome 扩展程序

javascript - 如何在 Docker 上部署的 React JS 应用程序中隐藏 API key 和 secret

javascript - JQuery,不止一次克隆一个div

javascript - 如何使用 Javascript 或 jQuery 突出显示文本的前 10 个字符?

jQuery 和 grails 不工作

javascript - attachShadow 能否返回不是#shadow-root 的#document-fragment?