Accueil > > > CHECKUSERACTIVITY : DETECTER L'INACTIVITÉ DU VISITEUR
CHECKUSERACTIVITY : DETECTER L'INACTIVITÉ DU VISITEUR
Information sur la source
Description
Suite à un post sur le forum j'ai fais ce code... donc je le poste tant qu'à faire si ça peut servir... qui plus est si quelqu'un a un commentaire sur la façon de procéder pour surveiller l'inactivité du visiteur ça peut être intéressant même si, comme dit sur le topic d'origine, je ne suis pas fan de ce genre de contrôle coté client vu qu'on a, normalement, les outils adéquats coté serveur... bref... .. . Ce code "surveille" donc l'inactivité de l'internaute et exécute un callback si l'inactivité dépasse x minutes... pour cela je me base sur l'évènement onmousemove et justement ça peut être un point de discussion car il y a surement moyen de faire plus propre... à mon goût trop d'appel à la méthode reset() si l'utilisateur est actif... mais bon je l'ai codé assez rapidement à vrai dire... j'en ai profité pour fait quelques ajouts/corrections et le commenter... .. . Testé uniquement sous IE7 et firefox3... .. . @ tchaOo°
Source
- /*
- * Object checkUserActivity
- * Check if user is activ or not
- *
- * @copyright kankrelune
- * @license LGPL - www.gnu.org/licenses/lgpl.html
- */
- var checkUserActivity = {
-
- timeout: 60, // (int) timeout in minutes
- loop: true, // (bool) restart check after callback exec
- timer: null, // (obj) timeout id
- callback: null, // (function) timeout function
- cWrapper: null, // (function) callback wrapper
- eWrapper: null, // (function) event callback wrapper
-
- /*
- * start activity check
- * @access public
- * @arg function callback the callback function
- * @arg int timeout the timeout in minutes (optional)
- */
- start: function( callback, timeout) {
- this.timeout = (this.timeout*60*1000);
- this.setTime(timeout);
- this.setCallback(callback);
- this._startObserving();
- this.reset();
- },
-
- /*
- * stop activity check
- * @access public
- */
- stop: function() {
- this.loop = false;
- this._stopObserving();
- if(this.timer) {
- clearTimeout(this.timer);
- this.timer = null;
- }
- },
-
- /*
- * set the callback function
- * @access public
- * @arg function callback the callback function
- */
- setCallback: function(callback) {
- if(typeof callback == "function") {
- this.callback = callback;
- }
- else {
- this.callback = function() {};
- }
- this.cWrapper = function() {
- checkUserActivity.callback.apply(checkUserActivity);
- if(checkUserActivity.loop) {
- checkUserActivity.reset();
- }
- else if(checkUserActivity.timer) {
- checkUserActivity.stop();
- }
- };
- },
-
- /*
- * set the timeout
- * @access public
- * @arg int timeout the timeout in minutes
- */
- setTime: function(timeout) {
- if(!isNaN(timeout)) {
- this.timeout = (timeout*60*1000);
- if(this.timer) {
- this.reset();
- }
- }
- },
-
- /*
- * reset the timeout
- * @access public
- */
- reset: function() {
- if(this.timer) {
- clearTimeout(this.timer);
- this.timer = null;
- }
- this.timer = setTimeout( this.cWrapper, this.timeout);
- },
-
- /*
- * register event callback wrapper
- * @access private
- */
- _startObserving: function() {
- if(!this.eWrapper) {
- this.eWrapper = function(){ checkUserActivity.reset(); };
- if(window.addEventListener) {
- window.addEventListener("mousemove", this.eWrapper, true);
- }
- else {
- window.attachEvent("onmousemove", this.eWrapper);
- }
- }
- },
-
- /*
- * unregister event callback wrapper
- * @access private
- */
- _stopObserving: function() {
- if(this.eWrapper) {
- if (window.removeEventListener) {
- window.removeEventListener("mousemove", this.eWrapper, true);
- }
- else {
- window.detachEvent("onmousemove", this.eWrapper);
- }
- this.eWrapper = null;
- }
- }
- };
-
-
- /*
- * exemple d'utilisation lancer la page et attendez ou faites autre chose pendant 30s...
- *
- * le calllback est exécuté dans le contexte de checkUserActivity
- * les propriétées et methodes de ce dernier sont donc directement
- * accessible depuis le callback...
- */
- checkUserActivity.start( function() {
- // un petit message
- alert("Ca fait "+(this.timeout/1000).toFixed(0)+" secondes que tu est là comme ça\ndevant ton écran, pationnant n'est il pas... .. .");
- // on change le callback pour le prochain appel
- this.setCallback(function() {
- // second message puis on arrete
- alert("Voila voila... 2nd callback...\n"+(this.timeout/500).toFixed(0)+" secondes à rien faire... trépidant cet exemple... .. .");
- this.stop();
- }
- );
- },
- 0.25
- );
/*
* Object checkUserActivity
* Check if user is activ or not
*
* @copyright kankrelune
* @license LGPL - www.gnu.org/licenses/lgpl.html
*/
var checkUserActivity = {
timeout: 60, // (int) timeout in minutes
loop: true, // (bool) restart check after callback exec
timer: null, // (obj) timeout id
callback: null, // (function) timeout function
cWrapper: null, // (function) callback wrapper
eWrapper: null, // (function) event callback wrapper
/*
* start activity check
* @access public
* @arg function callback the callback function
* @arg int timeout the timeout in minutes (optional)
*/
start: function( callback, timeout) {
this.timeout = (this.timeout*60*1000);
this.setTime(timeout);
this.setCallback(callback);
this._startObserving();
this.reset();
},
/*
* stop activity check
* @access public
*/
stop: function() {
this.loop = false;
this._stopObserving();
if(this.timer) {
clearTimeout(this.timer);
this.timer = null;
}
},
/*
* set the callback function
* @access public
* @arg function callback the callback function
*/
setCallback: function(callback) {
if(typeof callback == "function") {
this.callback = callback;
}
else {
this.callback = function() {};
}
this.cWrapper = function() {
checkUserActivity.callback.apply(checkUserActivity);
if(checkUserActivity.loop) {
checkUserActivity.reset();
}
else if(checkUserActivity.timer) {
checkUserActivity.stop();
}
};
},
/*
* set the timeout
* @access public
* @arg int timeout the timeout in minutes
*/
setTime: function(timeout) {
if(!isNaN(timeout)) {
this.timeout = (timeout*60*1000);
if(this.timer) {
this.reset();
}
}
},
/*
* reset the timeout
* @access public
*/
reset: function() {
if(this.timer) {
clearTimeout(this.timer);
this.timer = null;
}
this.timer = setTimeout( this.cWrapper, this.timeout);
},
/*
* register event callback wrapper
* @access private
*/
_startObserving: function() {
if(!this.eWrapper) {
this.eWrapper = function(){ checkUserActivity.reset(); };
if(window.addEventListener) {
window.addEventListener("mousemove", this.eWrapper, true);
}
else {
window.attachEvent("onmousemove", this.eWrapper);
}
}
},
/*
* unregister event callback wrapper
* @access private
*/
_stopObserving: function() {
if(this.eWrapper) {
if (window.removeEventListener) {
window.removeEventListener("mousemove", this.eWrapper, true);
}
else {
window.detachEvent("onmousemove", this.eWrapper);
}
this.eWrapper = null;
}
}
};
/*
* exemple d'utilisation lancer la page et attendez ou faites autre chose pendant 30s...
*
* le calllback est exécuté dans le contexte de checkUserActivity
* les propriétées et methodes de ce dernier sont donc directement
* accessible depuis le callback...
*/
checkUserActivity.start( function() {
// un petit message
alert("Ca fait "+(this.timeout/1000).toFixed(0)+" secondes que tu est là comme ça\ndevant ton écran, pationnant n'est il pas... .. .");
// on change le callback pour le prochain appel
this.setCallback(function() {
// second message puis on arrete
alert("Voila voila... 2nd callback...\n"+(this.timeout/500).toFixed(0)+" secondes à rien faire... trépidant cet exemple... .. .");
this.stop();
}
);
},
0.25
);
Conclusion
Hésitez pas pour les avis... .. .
Historique
- 16 juin 2009 20:43:14 :
- fatigué j'ai du mal mettre les mots dans le bon ordre... .. . ;o)
- 16 juin 2009 20:46:06 :
- re
- 16 juin 2009 20:49:36 :
- jamais 2 sans 3
- 16 juin 2009 20:58:29 :
- -_-
- 16 juin 2009 21:27:11 :
- petite correction du code...
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
onUnload event, popup... [ par VicoLaChips2 ]
Voila mon problème. J'ai mis dans la balise bodyd'une frame le code suivant : <body onUnload="return goodbye('<% =user %>';">Le script : f
controle liste de formulaire [ par gwerz ]
Bonjour,Je cherche un script très simple, permettant d'obliger les internautes à selectionner une option dans une liste, sinon le formulaire ne se pos
user_logon [ par akimodo ]
AkimodoNewbieMaisPasPourLongtempsje cherche une solution pour récuperer l equivalent de user_logon en aspl identifiant NT en javascriptmerci
problème avec Windows.Open [ par asm123 ]
En quelques mots voici mon problème,j'utilise la fonction javascript côté client "windows.open"(*) à qui je passe des paramètres.mais il arrive +/- 1
Controle formulaire paranoiaque [ par ma2x ]
Bonjour à tousIl m'a été demandé dans le cadre du boulot de mettre en oeuvre une interface de saisie de données soumis à des controles de toutes parts
controle de chargement de sons [ par theyann ]
existe t il une variable pour le controle de chargementdes embed comme pour les images ?Img = new Image(); Img.src = 'images/toto.gif';if( Img.complet
probleme avec fichier joint [ par desrimaisd ]
bonjour a tous,je ne connais pas du tout le javascript et j'ai donc besoin d'un peu d'aide (ca ne devrait pas etre trop dur je pense pour ceux ki conn
récupération info user ! Poste,Nom,OS... [ par Xanders ]
Bjr a vous!Je début en JS donc je sais pas si c'est possible mais j'aimerais récupéré des information sur le client et en priorité son OS puis eventue
Controle textarea quote [ par gallianofr ]
Bonjour je recherche un script contrôlant si j'ai la structure qu'il faut dans un texte. J'ai une textarea ou la secretaire tape un texte puis modifie
controle d'un textarea par radio [ par nrossero ]
Je souhaite controler le contenu d'un textarea. CaD, j'ai un radio OUI et un NON, quand le NON est cheked, je veux que la value soit figée, et modifia
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
Comparez les prix

HTC Magic
Entre 429€ et 429€
|