2016-10-10 17 views
0

我有以下jQuery腳本,它在頁面上滾動瀏覽點時向元素添加類。滾動過去x-px時刪除類(從底部)

jQuery(document).ready(function($) { 
     var s = $("#sticker"); 
     var pos = s.position();      
     $(window).scroll(function() { 
      var windowpos = $(window).scrollTop(); 
      if (windowpos >= pos.top + 380) { 
       s.addClass("stick"); 
      } else { 
       s.removeClass("stick"); 
      } 
     }); 

這是HTML部分。

<div id="sticker"> 
    <div class="widget"> 
     <?php dynamic_sidebar('widget-area-2'); ?> 
    </div>        
    <h3>Uw voordelen</h3> 
     <ul class="ClassName"> 
      <li><strong style="vertical-align:top; margin-bottom:0px">Something A</strong> 
       <div class="submenu">Some text A</div> 
      </li> 
      <li><strong style="vertical-align:top; margin-bottom:0px">Something B</strong> 
       <div class="submenu">Some text B</div> 
      </li> 
      <li><strong style="vertical-align:top; margin-bottom:0px">Something C</strong> 
       <div class="submenu">Some text C</div> 
      </li> 
     </ul> 
</div> 

現在發生的事情是在div #sticker比頁腳元素較高,增加了類.stick時。這導致內容滑過頁腳元素,這是我不想要的。

所以我想到的溶劑是在stick類上的removeClass,當你向下滾動頁面上的x個像素時。所以,我想下面的代碼:

jQuery(document).ready(function($) { 
     var s = $("#sticker"); 
     var pos = s.position();      
     $(window).scroll(function() { 
      var windowpos = $(window).scrollTop(); 
      if (windowpos >= pos.top + 380) { 
       s.addClass("stick"); 
      } if (windowpos >= pos.top + 900) { 
       s.removeClass("stick"); 
      } else { 
       s.removeClass("stick"); 
      } 
     }); 

但是沒有去,後來我發現這個頁面上的simular的問題,但是這不是exacly什麼我要找的。但我把它添加到我的代碼中,如下所示:

jQuery(document).ready(function($) { 
     var s = $("#sticker"); 
     var pos = s.position();      
     $(window).scroll(function() { 
      var windowpos = $(window).scrollTop(); 
      if (windowpos >= pos.top + 380) { 
       s.addClass("stick"); 
      } else if (windowpos >= pos.top + 900) { 
       s.removeClass("stick"); 
      } else { 
       s.removeClass("stick"); 
      } 
     }); 

兩個代碼都沒有做我想讓他們做的事。任何人都可以用正確的代碼來幫助我,或者指引我走向正確的方向嗎?謝謝。

+0

這將是有益的,看看你的HTML以及。 –

+0

@PaulRedmond添加了HTML。 – Steggie

回答

1

的如果條件是在錯誤的順序。您應該使用:

jQuery(document).ready(function($) { 
    var s = $("#sticker"); 
    var pos = s.position(); 
    $(window).scroll(function() { 
     var windowpos = $(window).scrollTop(); 
     if (windowpos >= pos.top + 900) { 
      s.removeClass("stick"); 
     } else if (windowpos >= pos.top + 380) { 
      s.addClass("stick"); 
     } else { 
      s.removeClass("stick"); 
     } 
    }); 
}); 

甚至更​​好:

jQuery(document).ready(function($) { 
    var s = $("#sticker"); 
    var pos = s.position(); 
    $(window).scroll(function() { 
     var windowpos = $(window).scrollTop(); 
     if (windowpos >= pos.top + 380 && windowpos < pos.top + 900) { 
      s.addClass("stick"); 
     } else { 
      s.removeClass("stick"); 
     } 
    }); 
}); 
+0

第二個代碼像魅力一樣工作..不知道爲什麼Paul的代碼不起作用。它看起來基本相同... – Steggie

+0

區別在於if的正確順序。你首先需要檢查更大的值,而不是更小的值。 我很高興能幫上忙。 :) –

0

你的代碼中有一些語法錯誤。

這裏是展示它的快速演示現在的工作:

http://codepen.io/paulcredmond/pen/jrzdxJ?editors=1111

$(document).ready(function($) { 
    var s = $("#sticker"); 
    var pos = s.position(); 

    $(window).scroll(function() { 
     var windowpos = $(window).scrollTop(); 

     if (windowpos >= pos.top + 380) { 
      s.addClass("stick"); 
     } else if (windowpos >= pos.top + 900) { 
      s.removeClass("stick"); 
     } else { 
      s.removeClass("stick"); 
     }  

    }); 
}); 
+0

順便說一下,我使用了自己的HTML,在更新問題之前,我開始了它。 –

+0

對我來說不起作用。當我使用你的代碼時,我得到一個語法錯誤:'SyntaxError:expected expression,got'}'[Learn More]' – Steggie

+0

你在Codepen上試過了嗎?我沒有得到任何控制檯錯誤。 –