2012-06-06 6 views
0

J'essaie d'accomplir quelque chose de si simple que c'est douloureux, mais je n'ai pas encore eu de chance après des heures de travail.Javascript Fade In Fade Out

J'ai 4 divs, chacun avec la classe '.slide'. Tout ce que je veux faire est de les rendre invisibles, mais de se fondre quand ils sont dans la fenêtre. Si elles quittent la fenêtre d'affichage, elles doivent retourner à invisible. Des idées?

$('.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

Qu'est-ce que 'waypoint' et' waypoints'? – Neal

+0

Pouvez-vous poster un jsfiddle de ce que vous avez en ce moment? – kei

+0

Waypoints est un plugin qui s'exécute lorsqu'un utilisateur fait défiler vers un emplacement particulier (dans ce cas, n'importe quel div avec la classe '.slide') – jwg2s

Répondre

5

donc j'ai joué un peu et obtenu 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; 
    }; 
}()); 

animation est visible dans les navigateurs modernes.

+0

Beau travail ... indépendamment du fait que cela réponde à la question. +1 – AlexMA

+0

Merci pour la réponse. J'ai du mal à l'appliquer. Pouvez-vous décrire un peu comment il est réellement utilisé dans un contexte de site? J'ai un en-tête fixe qui, je pense, affecte le décalage. – jwg2s

+0

@ jwg2s Il utilise CSS pour la présentation. Assurez-vous que vous avez deux états pour la transition sur l'élément. Vous pouvez faire comme tourner, retourner et zoomer aussi. Le js ne fait basculer la classe .invisible qu'après un certain délai. C'est seulement horizontal, quand j'y pense, mais vous pouvez facilement le modifier. – jasssonpet