2012-06-06 72 views
0

我試圖完成這麼簡單的事情,這很痛苦,但是我還沒有運氣好幾個小時的工作。Javascript Viewport淡入淡出

我有4個div,每個都有'.slide'類。我想要做的就是讓它們看不見,但當它們在視口中時會淡入。如果他們離開視口,他們應該返回到隱形狀態。有任何想法嗎?

$('.slide').waypoint(
    function() { 
     if($(this).is(":in-viewport")) { 
      $(this).animate({ 
       opacity: 1 
      }, 100); 
     } 
     $('.slide').not(this).animate({ 
      opacity: 0 
     }, 100); 
    }, 
    { 
     offset: function() { 
      return $.waypoints('viewportHeight') - document.getElementById('navigation').clientHeight; 
     } 
    } 
); 

http://jsfiddle.net/Agdax/3/

+0

什麼是航點和航點? – Neal

+0

你可以發佈你現在擁有的jsfiddle嗎? – kei

+0

Waypoints是一個當用戶滾動到特定位置時執行的插件(在這種情況下,任何帶'.slide'類的div) – jwg2s

回答

5

所以我打了一點,得到了this

/*jslint browser: true */ 
/*global $ */ 

(function() { 
    'use strict'; 

    var invisibleClassName = 'invisible', 
     scrollWait = 500; 

    function isInvisible(el) { 
     var wh = $(window).height(), 
      wt = $(window).scrollTop(), 
      eh = $(el).height(), 
      et = $(el).offset().top; 
     return ((wh + wt) <= et || wt >= (et + eh)); 
    } 

    function checkVisibleAll(elements) { 
     elements.each(function() { 
      $(this)[(isInvisible(this) ? 'add' : 'remove') + 'Class'](invisibleClassName); 
     }); 
    } 

    $.fn.visible = function() { 
     var elements = this, 
      scrollTimer = null; 

     // Don't check too often 
     function scrolled() { 
      clearTimeout(scrollTimer); 
      scrollTimer = setTimeout(function() { 
       checkVisibleAll(elements); 
      }, scrollWait); 
     } 

     // Onload 
     checkVisibleAll(elements); 

     $(window).bind("scroll resize", scrolled); 
     return this; 
    }; 
}()); 

動畫是在現代瀏覽器中可見。

+0

好的工作......不管這是否回答問題。 +1 – AlexMA

+0

感謝您的回答。雖然有困難實施。你能描述一下它是如何在網站上下文中使用的嗎?我有一個固定的標題,我認爲這會影響偏移量。 – jwg2s

+0

@ jwg2s它使用CSS進行演示。確保您有兩個狀態用於轉換元素。你可以像旋轉,翻轉和放大一樣。 js在特定的超時後才切換.invisible類。只有當我想到它時,它纔是水平的,但你可以很容易地修改它。 – jasssonpet