2012-06-06 73 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