20
AVR

ShineTime -Un slideshow CSS3 et jQuery avec des effets de lueurs

Publié le 20/04/10 à 08h56 par DJo

ShineTime est un slideshow original développé en XHTML/CSS3 et jQuery, avec des effets de lueurs sur les images.

ShineTime - Un slideshow Kick Ass !

Si vous avez des photos à présenter originalement, ce script jQuery vous permettra de les mettre en page efficacement avec un rendu très sympathique.

Addy Osmani, le créateur, a eu l'idée de créer un effet de lueur au passage de la souris et au chargement des images, et uniquement avec du CSS et jQuery !

ShineTime - Un slideshow avec effets de lueurs

Il nous livre les sources de son slideshow, que vous pourrez facilement adapter à votre site web:

Le HTML:

<!-- Each entry takes the form -->
<!-- start entry-->
<div class="thumbnailimage">
    <div class="thumb_container"> 
        <div class="large_thumb"> 
            <img alt="thumb" class="large_thumb_image" src="images/thumbnails/sample1.jpg">   
            <img rel="Just because I can't code, doesn't mean I can't kick your ass!" class="large_image" src="images/large/sample1.jpg" alt="">
            <div class="large_thumb_border"> </div>
            <div class="large_thumb_shine"> </div>
        </div>
    </div>
</div>
<!--end entry-->       

<!-- whilst the main image container itself looks like-->
<div id="containertitle">Welcome to ShineTime</div>
<div class="mainframe">
    <div id="largephoto">
        <div id="loader"> </div>
        <div id="largecaption">
            <div class="captionShine"> </div>
            <div class="captionContent"> </div>
        </div>
        <div id="largetrans"> </div>
    </div>
</div>

 

Le CSS:

body { 
    background-color:#333; 
    margin:0 auto; 
    background-image:url('images/interface/bgnoise.png');
}

#container { 
    width:793px; 
    height:498px; 
    margin:0 auto; 
    background-image:url('images/interface/back_noise.png');
    background-color:#111; margin-top:40px;
}

#container .mainframe { width: 500px; height:498px; float:left}

#container .thumbnails { 
    float:left; width:293px; 
    height:498px;
    background-repeat:no-repeat; 
    background-image:url('images/interface/total_grid.png');
    background-position:9px 70px; 
}

.thumbnailimage { float:left; padding:7px;}

.large_thumb    {
    float:left; 
    position: relative; 
    width:64px;
    height:64px; 
    padding:0px 10px 0px 0;
}

img.large_thumb_image    {position:absolute; left:5px; top:4px;}

.large_thumb_border    {
    width:64px; 
    height:64px;
    background:url('images/interface/thumb_border.png'); 
    position:absolute; 
}
.large_thumb_shine {
    width:54px; 
    height:54px;
    background:url('images/interface/shine.png'); 
    position:absolute;
    background-position:-150px 0; left:5px; top:4px; 
    background-repeat:no-repeat;
}
.thumb_container { 
    width:64px; 
    height:64px;
    background-image:url('images/interface/thumb_holder.png'); 
}
#largephoto { 
    width: 444px; 
    height:370px; 
    background-color:#333333;
    margin-top:68px; 
    margin-left:40px; 
    -moz-border-radius: 10px;
    -webkit-border-radius: 10px; 
    border-left: 1px solid #fff;
    border-right: 1px solid #fff; 
    border-bottom: 1px solid #fff; 
}

#largetrans { 
    width: 444px; 
    height:370px;
    background-image:url('images/interface/main_bg_trans.png');
    -moz-border-radius: 10px; 
    -webkit-border-radius: 10px;
}

.large_image { display:none}

#containertitle { 
    position:absolute; 
    margin-top:35px;
    margin-left:40px; 
    font-family:Arial, 
    Helvetica, sans-serif;
    font-weight:bold; 
    text-shadow: 0px 1px 2px #fff;
}
#largecaption {  
    text-align:center; 
    height:100px;
    width:100%; 
    background-color:#111; 
    position:absolute; 
    width: 444px;
    margin-top:270px; 
    -moz-border-radius-bottomleft: 10px;
    -moz-border-radius-bottomright: 10px; 
    -webkit-border-bottom-left-radius: 10px;
    -webkit-border-bottom-right-radius: 10px;
    display:none; 
    color:#fff; 
    font-size:30px;
    font-family:Arial; 
    letter-spacing:-1px; 
    font-weight:bold
}
#largecaption .captionContent { padding:5px;}
#largecaption .captionShine { 
    background:url('images/interface/bigshine.png');
    position:absolute;  
    width: 444px; 
    height: 100px; 
    background-position:-150px 0;
    background-repeat:no-repeat;
}
#loader { 
    width:150px; 
    height:150px;
    background-image:url('images/interface/loader.gif');
    background-repeat:no-repeat; 
    position:absolute;
}

Et le jQuery:

 $(document).ready(function()
  {

     /*Your ShineTime Welcome Image*/
     var default_image = 'images/large/default.jpg';
     var default_caption = 'Welcome to ShineTime';

     /*Load The Default Image*/
     loadPhoto(default_image, default_caption);

     function loadPhoto($url, $caption)
     {

        /*Image pre-loader*/
        showPreloader();
        var img = new Image();
        jQuery(img).load( function()
        {
            jQuery(img).hide();
            hidePreloader();

        }).attr({ "src": $url });

        $('#largephoto').css('background-image','url("' + $url + '")');
        $('#largephoto').data('caption', $caption);
     }

     /* When a thumbnail is clicked*/
     $('.thumb_container').click(function()
     {

          var handler = $(this).find('.large_image');
          var newsrc  = handler.attr('src');
          var newcaption  = handler.attr('rel');
          loadPhoto(newsrc, newcaption);

     });

     /*When the main photo is hovered over*/
     $('#largephoto').hover(function()
     {

        var currentCaption  = ($(this).data('caption'));
        var largeCaption = $(this).find('#largecaption');

        largeCaption.stop();
        largeCaption.css('opacity','0.9');
        largeCaption.find('.captionContent').html(currentCaption);
        largeCaption.fadeIn()

         largeCaption.find('.captionShine').stop();
         largeCaption.find('.captionShine').css("background-position","-550px 0");
         largeCaption.find('.captionShine').animate({backgroundPosition: '550px 0'},700);

         Cufon.replace('.captionContent');

     },

     function()
     {
        var largeCaption = $(this).find('#largecaption');
        largeCaption.find('.captionContent').html('');
        largeCaption.fadeOut();

     });

     /* When a thumbnail is hovered over*/
     $('.thumb_container').hover(function()
     {
         $(this).find(".large_thumb").stop().animate({marginLeft:-7, marginTop:-7},200);
         $(this).find(".large_thumb_shine").stop();
         $(this).find(".large_thumb_shine").css("background-position","-99px 0");
         $(this).find(".large_thumb_shine").animate({backgroundPosition: '99px 0'},700);

     }, function()
     {
        $(this).find(".large_thumb").stop().animate({marginLeft:0, marginTop:0},200);
     });

     function showPreloader()
     {
       $('#loader').css('background-image','url("images/interface/loader.gif")');
     }

     function hidePreloader()
     {
       $('#loader').css('background-image','url("")');
     }

  });

 

Démo

Site Officiel

Baraguiné par felix le 20/04/10 à 12h14
felix sur La Ferme du Web
C'est vraiment impressionant !

Y'a trop de nouveautés en ce moment, j'ai du mal à suivre :/
Baraguiné par didus le 20/04/10 à 20h33
didus sur La Ferme du Web
Trop classe merci au fermier
Baraguiné par Mealin le 21/04/10 à 00h56
Mealin sur La Ferme du Web
C'est vrai que ces derniers mois nous sommes gâtés ! De mon côté j'apprécie de plus en plus jquery =)
Baraguiné par bisca330 le 13/07/10 à 10h20
bisca330 sur La Ferme du Web
Franchement très joli. Avec une génération automatique des miniatures ça aurait été parfait ;-)
Baraguiné par bisca330 le 13/07/10 à 14h51
bisca330 sur La Ferme du Web
Encore un petit commentaire pour vous demander quelque chose.

Est-ce que quelqu'un saurait comment faire pour afficher plus de 15 vignettes sur la partie de droite réservées aux miniatures ? Si on met plus de 15 vignettes elles vont s'ajouter en-dessous des 15 premières mais du coup elles vont dépasser de l'image principale et ça devient pas très joli.

J'avais pensé à ajouter un petit clique (genre une petite flèche cliquable) à droite des vignettes pour afficher la suite des miniatures si on dépasse le nombre de 15. Pour résumer on aurait nos 15 premières vignette, puis on clique sur la flèche et on affiche les 15 suivantes, etc... Mais je ne sais pas faire ce genre de chose.

Est-ce que quelqu'un aurait une idée ?

Par avance merci.

Ajouter un Commentaire

Pour poster un commentaire, vous devez être identifié. Vous pouvez choisir parmi ces trois méthodes d'identification:

Compte la Ferme du Web

Identifiez-vous
Inscrivez-vous

Compte Facebook

Compte Twitter

Connexion avec votre compte twitter
Rechercher sur la Ferme du web