IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Simuler une zone de grattage


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2008
    Messages : 101
    Par défaut Simuler une zone de grattage
    Bonjour à tous

    Mon client souhaite afficher une petite fenêtre qui s’ouvre lors d’une première connexion journalière avec une case à gratter qui affiche un code promo uniquement valable pour l'utilisateur. Exactement comme un jeu de grattage

    J'aimerai donc pouvoir le faire en jquery. J'ai trouvé la solution jScratchCard mais la dernière évolution date de début 2011. De plus il faut utiliser une image sous la zone à gratter, je préfèrerai pouvoir mettre un texte dans un span ou un div par exemple.

    Connaitriez vous une autre solution + récente qui permet de faire ce dont j'ai besoin ?

    Merci à tous

  2. #2
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2008
    Messages : 101
    Par défaut
    Je reviens 5 jours après, personne ne connait une application faisant la simulation de grattage ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2008
    Messages : 101
    Par défaut
    Re bonjour

    Je continue ce post car voilà exactement ce que je voudrai : http://www.spartoo.com/
    A l'ouverture du site ils proposent une zone à gratter, ils utilisent un canvas. Pensez vous que c'est fait maison ?

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    j'en connais en flash...
    mais une simple recherche sur google et j'en trouve plein en html5
    http://www.websanova.com/blog/jquery...tch-pad-plugin
    (demo http://wscratchpad.websanova.com/ )
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par défaut
    Bonjour,

    J'ai analysé le grattage de Spartoo. Le code qui gère ça se trouve ici : http://static6.spartoo.com/js/happy_days.js

    Le pourcentage à « gagner » est un <span class="hd_gain_big"> caché derrière le canvas. Le canvas est d'abord rempli avec cette image :

    Le texte « Grattez » est dessiné par-dessus.

    La partie intéressante se trouve ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    _mouseMove : function(e, that) {
           if(!that.clicked) return;
           if (pas_bloque) {
               var offset = $(that.$elmt).offset(), x =e.pageX - offset.left, y = e.pageY - offset.top, i = -10;
               for(i = -10; i< 10; i++) {
                 for(var a = -5; a< 5; a++) {
                     if(Math.random() < 0.2) {
     
                        that.context.clearRect(x + i,y + a,1,1);
     
                        k_index = parseInt((y + a)*img_width + (x + i));
                        //alert(k_index+' : '+img_grat_array[k_index] + ' w '+ img_width + ' y '+ y +' a '+a + ' x '+x+' i '+i);
                        if (img_grat_array[k_index]) {
                            gratte_tout ++;
                            img_grat_array[k_index] = 0;
                            //alert(gratte_tout);
                        }
     
                    }
                 }
               }
               if (gratte_tout > percent_coverage) {
                    pas_bloque = 0;
                    document.getElementById('spartooday').style.height = window_final_size;
                    if(version_tablet) {
                    	sendDataSync('display_gain', 'ope=SPARTOODAY&init=display_gain', '../operations/spartooday/spartooday_ajax.php', 'GET');
                    }
                    else {
                    	sendDataSync('display_gain', 'ope=SPARTOODAY&init=display_gain', 'operations/spartooday/spartooday_ajax.php', 'GET');
                    }
     
               }
           }
        },
    En gros :
    • Ça se passe lors de l'évènement mousemove
    • seulement lorsque le bouton de la souris est enfoncé
    • x et y sont les coordonnées du curseur
    • i varie de -10 à +10 autour de x
    • a varie de -5 à +5 autour de y
    • Math.random() < 0.2 équivaut à « 1 chance sur 5 »
    • clearRect(..., ..., 1, 1) efface un rectangle de 1x1 pixels, autrement dit il efface juste un pixel.

    Tout ça signifie : chaque pixel dans un rectangle de 20x10 pixels autour du curseur a une chance sur 5 d'être effacé.

    Ensuite arrive la partie avec k_index. Le code utilise un tableau img_grat_array qui a été initialisé un peu plus haut dans le script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                for(k=0;k<img.height*img.width;k++) {
                    img_grat_array[k] = 1;
                }
    C'est un tableau à une dimension dont la longueur est égale au nombre de pixels dans l'image (img.height*img.width). Au départ il est rempli de 1 ; quand un pixel est effacé, l'entrée correspondante dans ce tableau est mise à 0. Ça permet de connaître le nombre total de pixels qui ont été effacés (gratte_tout ++).

    Pour finir, quand le nombre de pixels « grattés » dépasse un certain seuil (percent_coverage qui, soit dit en passant, est mal nommé car ce n'est pas un pourcentage), le grattage est bloqué (pas_bloque = 0) et le texte final (« Bravo » etc.) est affiché.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

Discussions similaires

  1. simuler Ctrl+Z dans une zone de texte
    Par danyboy85 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/05/2006, 14h19
  2. Tabulation dans une zone SELECT
    Par jfphan dans le forum ASP
    Réponses: 4
    Dernier message: 03/10/2003, 15h30
  3. Réponses: 11
    Dernier message: 24/07/2003, 09h24
  4. Réponses: 17
    Dernier message: 25/03/2003, 13h45
  5. Réponses: 17
    Dernier message: 17/10/2002, 20h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo