Thématiques :

Un effet de page cornée en quelques lignes de jQuery

Posé ici le mardi 29 septembre 2009 à 15:16 par Jay Salvat

Un effet de page cornée en quelques lignes de jQuery

Vous avez certainement déjà croisé ce genre d'animation en Flash qui imite un coin de page cornée qui laisse apparaitre une publicité à son survol ? L'effet est très sympa mais demande Flash.

Je n'ai rien contre Flash, mais ce n'est pas mon univers. Comme vous commencez certainement à le comprendre jQuery est plus ma tasse de thé. Sa puissance ne cessera de m'étonner et permet de réaliser un tel effet en quelques lignes.


L'idée en deux mots

Partons d'un simple lien contenant une image. C'est le cas d'une bannière de publicité.

<a href="http://monsite.com"><img src="mabanniere.png" /></a>

Imaginons maintenant que le lien affiche une illustration en background et que l'image contenue dans le lien reprensente un coin de page dont la partie supérieure est transparente. Ce coin laissera entrevoir l'illustration de fond.

Au survol de la souris, l'image du coin s'agrandit, laissant ainsi entrevoir toute l'illustration. Lorsque la souris s'échappe, le coin reprend sa petite taille et masque l'illustration à nouveau.

Voir la démo

Mise en forme

Modifions à peine notre précédente bannière.

<a id="corner" href="http://monsite.com"><img src="corner.png" /></a>

Elle porte maintenant l'id #corner et contient corner.png, une image de coin de page. Grâce à CSS on applique illustration.png.


#corner {
    background:url(illustration.png) top right;
}

Ensuite on place le tout en haut à droite de l'écran. Rien de bien extraordinaire, la feuille de style est la suivante :

#corner {
    background:url(illustration.png) top right;
    position:absolute;
    top:0px; right:0px;
    z-index:9999;
}

A ce stade, l'illustration est encore dévoilée. Il faut juste réduire l'image du coin de page. Vue que l'image est contenue dans un lien, on annule la bordure.

corner4.png
#corner img {
    border:0;
    width:80px; height:80px;
    -ms-interpolation-mode:bicubic;
}

Référez-vous ici pour l'explication du cabalistique -ms-interpolation-mode.

jQuery au boulot

Alors là, attention, faut être attentif car ça va très vite et je ne me répéterai pas ^^

/**
 * Effet page cornée
 * par Jay Salvat - http://blog.jaysalvat.com/
 */
$(function() {
    $('#corner img').hover(function() {
        $(this).stop().animate({ width:'200px', height:'200px' });
    }, function() {
        $(this).stop().animate({ width:'80px', height:'80px' });
    });
});

Lors du survol (.hover) de l'image du coin (#corner img) on anime sa taille(.animate) à 200px sur 200px. On la remet à 80px sur 80px lorsque la souris quitte la zone. A chaque animation, on prend soin de bloquer (.stop) une éventuelle animation déjà lancée.

C'est tout !

Trackbacks

0 trackback

Commentaires

8 commentaires

Bonjour

Je lis ton blog depuis un moment car j'y trouve des infos très souvent intéressantes (dev iphone, jquery, ...)
Concernant ce corner, le principe est intéressant mais ce qui est dommage ici c'est que c'est l'image du corner qui se trouve dans le flux html et non pas la bannière.
Merci encore pour toutes ces infos que tu partages avec tes lecteurs.

1. Par Gwenn le mardi 29 septembre 2009 à 21:00

Bonjour,
Encore un beau tutoriel, merci pour tes explications

2. Par Djb le mardi 29 septembre 2009 à 21:26

Tuto sympa, encore une fois :)

Par contre comme le dit Gwenn, je pense qu'en utilisation hors tuto il serait peut être mieux de faire que ça soit l'image "utile" qui soit dans le flux.

Avec le raffinement ultime pour l'accessibilité aux gens n'ayant pas javascript de cacher le bandgeau à l'aide de javascript au chargement de la page pour en voir le contenu en cas de désactivation ou d'absence de javascript.

En tout cas, ça rend très bien :)

3. Par Stan le mercredi 30 septembre 2009 à 14:42

Bonjour à tous, merci de vos commentaires !

Encore une fois l'article va droit au but en un minimum de ligne de code pour illustrer l'idée le plus simplement possible.

Mais en effet le script demande une édition du code, ne le rendant plus forcement sémantique et inobstrusif.

Il est possible de faire un swap entre les deux images pour adapter la bannière aux besoins du scripts:

$('#corner a').css('background-image', 'illustration.png');
$('#corner img').attr('src', 'corner.png').hover(function() {
$(this).stop().animate({ width:'200px', height:'200px' });
}, function() {
$(this).stop().animate({ width:'80px', height:'80px' });
});

4. Par Jay Salvat le mercredi 30 septembre 2009 à 15:56

"Mais en effet le script demande une édition du code, ne le rendant plus forcement sémantique et inobstrusif."

C'est vrai qu'en y réfléchissant un peu l'image qui se trouve "en dessous" ne peut être que celle en background étant donné qu'on ne peut pas faire un "foreground" (ce qui serait top) en CSS, à moins que je ne me trompe.
Du coup sémantiquement parlant, c'est sans doute la meilleure façon avec laquelle tu as procédé.

En ce qui concerne le caractère non instrusif du script, je maintiens qu'il serait sans doute mieux de "cacher" le background en cas d'activation du javascript pour que ceux qui ne l'ont pas voient tout de même l'image.
Mais ça sort bien évidemment du cadre du tuto "comment faire" mais serait plutôt dans une section "pour aller plus loin, vers la vraie vie" :)

5. Par Stan le mercredi 30 septembre 2009 à 16:17

Très bonne idée pour les vacances, un jQuery en plus, que demander de mieux !

6. Par Mr Xhark le dimanche 11 octobre 2009 à 18:02

Bonjour,
je souhaiterai mettre en application votre système de page cornée sur mon site de radio.
Je ne suis pas du tout developper Jquery et j'ai donc suivi votre tuto.
J'ai fait mon css, ajouter le script que vous proposez et lorsque j'ouvre ma page j'ai bien en haut a droite mon image mais aucunes animation lorsque je passe la souris dessus.

Pourriez vous m'en dire plus sur le mise en place de ce jquery.

autre question : le fait de mettre ce code sur un site de radio pose t'il problème au niveau des droits ? devons nous payé quelque chose ?

7. Par Fabrice le mercredi 19 mai 2010 à 08:55

Bonjour Fabrice,

Il faut télécharger et inclure la librairie jQuery sur Jquery.com

Le script est gratuit et vous ne me devez rien pour le script.
Si vous avez besoin de mes services pour le mettre en place, là, c'est à discuter. :)

8. Par Jay Salvat le mercredi 19 mai 2010 à 10:22

Obligatoire. Vrai nom apprécié.

Il ne sera ni affiché, ni spammé.

Votre blog ou votre site web.

Constructif, courtois et correctement écrit. SMS proscrit. Merci.