2009-09-27 7 views
6

Je suis curieux de savoir comment je peux créer un DIV (ou quelque chose de vraiment) que je peux fondre (ou modifier l'opacité de) quand un utilisateur fait défiler la page. Ce DIV serait assis en haut de la page, mais seulement être clairement visible en haut de la page.Fading Element on Scroll

En outre, il serait idéal si je pouvais avoir cet élément se fondre dans onmouseover, quelle que soit la position défilée actuelle sur la page. Utilisez l'événement de défilement et analysez la valeur de document.documentElement.scrollTop pour définir l'opacité appropriée.

Répondre

8

jQuery permettrait une solution succincte, tout en cachant la plupart des différences de navigateur. Voici une maquette rapide pour vous aider à démarrer:

<script type="text/javascript"> 

    //when the DOM has loaded 
    $(document).ready(function() { 

     //attach some code to the scroll event of the window object 
     //or whatever element(s) see http://docs.jquery.com/Selectors 
     $(window).scroll(function() { 
       var height = $('body').height(); 
       var scrollTop = $('body').scrollTop(); 
       var opacity = 1; 

       // do some math here, by placing some condition or formula 
       if(scrollTop > 400) { 
        opacity = 0.5; 
       } 

       //set the opacity of div id="someDivId" 
       $('#someDivId').css('opacity', opacity); 
     }); 
    }); 
</script> 

Voir aussi:

+0

Merci pour votre réponse! Je suis devenu opérationnel, mais étant complètement nouveau dans le monde de jquery et javascripting, je ne sais pas où aller à partir d'ici. La boîte s'estompe ou défile, mais elle semble rester fanée même si je défile vers le haut à nouveau. Et comment puis-je contrôler jusqu'où on doit faire défiler avant de disparaître? Merci encore !! – marck

+0

Malheureusement, à moins de vous fournir une solution complète, il n'y a pas beaucoup plus d'aide qui peut être donnée. Si vous êtes vraiment intéressé par ce fonctionnement, vous devrez probablement apprendre et apprendre du JavaScript. –

2

Je pensais que je lui donnerais une fois en utilisant la valeur réelle de scrollTop de dicter le niveau d'opacité, obtenant ainsi un fondu lisse. J'ai également ajouté l'état hover pour la deuxième partie. Thanks to David pour affiner les maths pour moi.

//reduce the opacity of the banner if the page is scrolled. 
$(window).scroll(function() { 
    var height = $("body").height(); 
    var scrollTop = $("body").scrollTop(); 
    var opacity = 1; 

    if(scrollTop < 41) 
    {opacity = 1-Math.floor(scrollTop)/100;} 
    else 
    {opacity = 0.6;} 

    $("#header").css("opacity", opacity); 
    $("#header").hover(function(){ 
    $(this).css("opacity", 1); 
    },function(){ 
    $(this).css("opacity", 0.6); 
    }); 
}); 
+0

Pour une raison quelconque, cela ne semble pas fonctionner sur FF 8.0.1? – Daniel

+0

Et IE ne semble pas fonctionner, cependant, à la fois sur FF et IE fonctionne le hover. Donc je pense que jquery et css opacity ne fonctionnent pas en cross browser ?! – Daniel