begin process at 2012 02 06 02:15:41
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fenêtre & Pop-up

 > FENETRES DÉPLACABLES ET REDIMENSIONNABLE PAR LA SOURIS

FENETRES DÉPLACABLES ET REDIMENSIONNABLE PAR LA SOURIS


 Information sur la source

Note :
9 / 10 - par 3 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fenêtre & Pop-up Classé sous :fenetre multiples, fenetre, dynamiquement Niveau :Débutant Date de création :26/09/2008 Date de mise à jour :07/10/2008 13:41:12 Vu / téléchargé :9 019 / 682

Auteur : pdc_666

Ecrire un message privé
Site perso
Commentaire sur cette source (24)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Voilà une petite source sans prétention, qui permet de créer une fenetre dans une page avec du contenu spécifique en dynamique.

Le contenu peut être du HTML en text (string) ou directement un objet.

Pour plus d'info il suffit d'ouvrir le page html d'exemple et de regarder la fenetre avec l'image.

La version finale marche sous firefox et Internet Explorer.

Le seul bug connu pour le moment c'est, sous firefox, la zone de redimenssionement autour des contours de la fenetre est réduire (je n'arrive pas à changer le curseur de body sous FF, voir ligne 543 de la source).

Dernière chose étant donné que le redimensionnement alourdit pas mal le code, j'ai laissé une version sans dans le zip (déplacement uniquemen).

Voilà, sinon comme d'habitude les commentaire (constructif bien sûr) sont les bienvenues! Soyez indulgeants ce n'est que ma 2ieme vrai sources en javascript.

Source

  • ///////////////
  • // COULEURS //
  • ///////////////
  • //FENETRE
  • BCKGROUND = "#FFFFFF"; //Couleur de fond de la fenetre
  • BORDER = "#000000"; //Couleur de la bordure
  • //BANDEAU
  • B_BCKGROUND = "#6f6f6f"; //Couleur du bandeau
  • B_TEXT = "#FFFFFF"; //Couleur du titre
  • //BOUTTON "FERMER" & "REDUIRE"
  • B_B_BCKGROUND = "#FFFFFF"; //Couleur de Fond des bouttons "Fermer" et "Réduire"
  • B_B_BORDER = "#000000"; //Couleur de Bordure des bouttons "Fermer" et "Réduire"
  • B_B_TEXT = "#000000"; //Couleur de Texte des bouttons "Fermer" et "Réduire"
  • //BOUTTON "FERMER" & "REDUIRE" ENFONCES
  • B_BD_BCKGROUND = "#000000"; //Couleur de Fond des bouttons "Fermer" et "Réduire"
  • B_BD_BORDER = "#FFFFFF"; //Couleur de Bordure des bouttons "Fermer" et "Réduire"
  • B_BD_TEXT = "#FFFFFF"; //Couleur de Texte des bouttons "Fermer" et "Réduire"
  • //SCROLLBAR
  • SBDARKSHADOW = "#4f4f4f"; //scrollbarDarkShadowColor
  • SB3DLIGHT = "#4f4f4f"; //scrollbar3dLightColor
  • SBARROW = "#FFFFFF"; //scrollbarArrowColor
  • SBBARBASE = "#4f4f4f"; //scrollbarBaseColor
  • SBBARFACE = "#8f8f8f"; //scrollbarFaceColor
  • SBHIGHTLIGHT = "#FFFFFF"; //scrollbarHighlightColor
  • SBBARSHADOW = "#8f8f8f"; //scrollbarShadowColor
  • SBBARTRACK = "#FFFFFF"; //scrollbarTrackColor
  • //////////////
  • // OPTIONS //
  • //////////////
  • COMPORTEMENT_FERMETURE = "cache"; //Comportement en cas de clique sur le boutton "Fermer" ( 'cache' ou 'supprime' la fenêtre)
  • CONFIRME_FERMETURE = true; //Demande une confirmation ou non lors d'un clique sur le boutton "Fermer"
  • COTES_REDIMENSIONNEMENT = "all"; //Cotés de la fenetre redimenssionables, "classique" = bas et droite, "all" = tous
  • //////////////////
  • // CONSTANTES //
  • //////////////////
  • //Constantes utilisées pour créer un masque qui va nous permettre de savoir dans quelle(s) direction(s) le redimenssionnement doit s'effectué.
  • RES_UP = 1; //Redimenssionement vers le haut
  • RES_DOWN = 2; //Redimenssionement vers le bas
  • RES_RIGHT = 4; //Redimenssionement vers la droite
  • RES_LEFT = 8; //Redimenssionement vers la gauche
  • RES_ZONE = 8; //Zone de redimenssionement autour des borure ( Défaut : + ou - 5px)
  • MIN_HEIGHT = 75; //Hauteur minimal pour une fenetre
  • MIN_WIDTH = 75; //Largeur minimal pour une fenetre
  • ///////////////
  • // GLOBALES //
  • ///////////////
  • //Position du curseur de la souris (Mis à jour par le fonction appelé lors de l'evenement "OnMouseMove" de document)
  • curX = 0;
  • curY = 0;
  • resize_direction = 0; //Direction(s) du redimenssionement
  • in_resize = false;
  • fenetre = null; //La fenetre en cours de déplacement
  • fenetre_resize = null; //La fenetre en cours de redimmenssionnement
  • is_ie = ! (navigator.appName == "Netscape"); //Internet Explorer ou Netscape ?
  • //////////////////
  • // EVENEMENTS //
  • //////////////////
  • //Et on active l'event "mousemove" pour récupérer les coordonnée de la souris au fur et à mesure
  • document.onmousemove = PdcDocumentOnMouseMove;
  • document.onmousedown = PdcDocumentOnMouseDown;
  • document.onmouseup = PdcDocumentOnMouseUp;
  • //Création d'un fenetre
  • function CreerPdcFenetre( titre, largeur, hauteur, posLeft, posTop, contenu ){
  • //On créer un objet "Div" correspondant à notre fenetre
  • var fenetre = document.createElement("div");
  • //Permet d'identifier une fenetre de façon à ne pas éffectuer d'action de redimensionnement sur un élément qui n'est pas une fenetre
  • fenetre.id = "PdcFenetre";
  • //On définit les propriétés de la fenetre
  • //On définit la taille et on garde la taille par défaut
  • fenetre.my_width = ((is_ie ? 4 : 0) + largeur); //+ 4 pour la bordure si IE, 0 si FF
  • fenetre.style.width = fenetre.my_width +"px";
  • fenetre.my_height = ((is_ie ? 24 : 20) + hauteur); //+24 pour la bordure et le bandeau si IE, + 20 si FF
  • fenetre.style.height = fenetre.my_height + "px";
  • //Position
  • fenetre.style.position = "absolute";
  • fenetre.style.left = posLeft + "px";
  • fenetre.style.top = posTop + "px";
  • //Bordure
  • fenetre.style.border = "2px " + BORDER + " solid";
  • //Couleur de fond pour avoir une fenetre non transparente
  • fenetre.style.backgroundColor = BCKGROUND;
  • //On créer notre bandeau
  • bandeau = CreerPdcBandeau( titre, fenetre, largeur);
  • //On ajoute notre bandeau à la fentre
  • fenetre.appendChild( bandeau);
  • //On garde une référence à noter bandeau
  • fenetre.bandeau = bandeau;
  • //On créer une div qui va accueillir notre contenu
  • var div_contenu = document.createElement("div");
  • //On met à la taille demandé
  • div_contenu.style.width = largeur + "px";
  • div_contenu.style.height = hauteur + "px";
  • //Dans le cas ou le contenu est plus grand que la div qui l'accueil, on affiche des scrollbar
  • div_contenu.style.overflow = "auto";
  • //Mise au couleurs personnailisé des scrollbars
  • div_contenu.style.scrollbarDarkShadowColor = SBDARKSHADOW;
  • div_contenu.style.scrollbar3dLightColor = SB3DLIGHT;
  • div_contenu.style.scrollbarArrowColor = SBARROW;
  • div_contenu.style.scrollbarBaseColor = SBBARBASE;
  • div_contenu.style.scrollbarFaceColor = SBBARFACE;
  • div_contenu.style.scrollbarHighlightColor = SBHIGHTLIGHT;
  • div_contenu.style.scrollbarShadowColor = SBBARSHADOW;
  • div_contenu.style.scrollbarTrackColor = SBBARTRACK;
  • //On garde une référence à notre contenu pour la réduction de la fenetre
  • fenetre.contenu = div_contenu;
  • //On garde également une réference dans l'autre sens (référence à la fenetre dans contenu)
  • div_contenu.my_fenetre = fenetre;
  • //Si on a du contenu on l'ajoute à la fenetre
  • if( contenu != null ){
  • //Objet
  • if( typeof( contenu) == "object" ){
  • div_contenu.appendChild( contenu);
  • }
  • //Ou string (par exemple : "<a href"..."> .. </a>"
  • else{
  • tmp = document.createElement("div");
  • tmp.innerHTML = contenu;
  • div_contenu.appendChild( tmp);
  • }
  • }
  • //On ajoute notre div à la fenetre
  • fenetre.appendChild( div_contenu);
  • //Par défaut la fenetre est en dessous lorsque qu'une fenetre est déplacé
  • fenetre.style.zIndex = 1;
  • //Met la fenetre au premier plan au moindre clique dessus.
  • fenetre.onmousedown = pdcFenetreOnClick;
  • //On ajoute notre fenetre à la page
  • document.body.appendChild( fenetre);
  • //et on retourne l'objet fenetre pour une utilisation éventuelle (réaffichage après fermeture par exemple)
  • return fenetre;
  • }
  • //Fonction indépendante pour la création de l'objet bandeau
  • function CreerPdcBandeau( titre, fenetre, largeur){
  • // VOIR A LA FIN DU FICHIER POUR LE CODE HTML DU BANDEAU
  • var bandeau = document.createElement("table")
  • bandeau.style.width = largeur + "px";
  • bandeau.style.height = "20px";
  • bandeau.style.backgroundColor = B_BCKGROUND;
  • bandeau.style.cursor = "move";
  • var bandeau_body = document.createElement("tbody")
  • //Notre unique ligne du tableau...
  • var tr = document.createElement("tr");
  • //On créer une case pour le texte du titre
  • var td_titre = document.createElement("td");
  • td_titre.style.paddingTop = "0px";
  • td_titre.style.paddingBottom = "0px";
  • //On ajoute la gestion des évenements à notre bandeau
  • //Lorsque l'utilisateur appui sur le bouton de la souris
  • td_titre.onmousedown = PdcFenetreOnMouseDown;
  • //Lorsque l'utilisateur relache le bouton de la souris
  • td_titre.onmouseup = PdcFenetreOnMouseUp;
  • //Réduire / Agrandir la fenetre en cas de double clique sur le bandeau
  • td_titre.ondblclick = PdcOnDoubleClickReduire;
  • //On créer la Div qui va accueillir le titre
  • var div = document.createElement("div")
  • div.style.fontSize = "12";
  • div.style.width = (largeur - 36) + "px"; //Largeur de la fenetre moins la taille de nos 2 bouttons ( 12 + 12) moins la taille de la bordure (2 + 2) moins la taille entre nos cellule (4 * 2) = .. 36 bien sûr ! :p
  • div.style.overflow = "hidden"; //Ne pas agrandir la Div si le contenu est plus grand que sa taille
  • div.style.color = B_TEXT;
  • div.style.fontWeight = "bold";
  • div.style.whiteSpace = "nowrap"; //Pas de retour à la ligne
  • //Le texte du titre
  • div.innerHTML += titre;
  • //On créer une 2ième case pour notre tableau celle contenant le "boutton" pour réduire la fenetre
  • var td_reduire = document.createElement("td");
  • td_reduire.style.padding = "0px"
  • td_reduire.style.backgroundColor = B_B_BCKGROUND;
  • td_reduire.style.cursor = "pointer";
  • td_reduire.style.width = "12px";
  • td_reduire.style.height = "12px";
  • td_reduire.style.border = "1px " + B_B_BORDER + " solid";
  • td_reduire.style.fontSize = "10px";
  • td_reduire.style.fontWeight = "bold";
  • td_reduire.style.color = B_B_TEXT;
  • //On utilise les balise <center> car la propriété "text-align" ne fonctionne pas sous FF
  • td_reduire.innerHTML = "<center>-</center>";
  • td_reduire.onmousedown = PdcBouttonOnMouseDown; //Début du clique
  • td_reduire.onmouseup = PdcBouttonOnMouseUpReduire; //Réduction de la fenetre
  • td_reduire.onmouseout = PdcBouttonOnMouseOut; //Si l'utilisateur commence son clique puis sort du "boutton" pour annuler
  • //On créer une 3ième case pour notre tableau celle contenant le "boutton" pour fermer la fenetre
  • var td_fermer = document.createElement("td");
  • td_fermer.style.padding = "0px"
  • td_fermer.style.backgroundColor = B_B_BCKGROUND;
  • td_fermer.style.cursor = "pointer";
  • td_fermer.style.width = "12px";
  • td_fermer.style.height = "12px";
  • td_fermer.style.border = "1px " + B_B_BORDER + " solid";
  • td_fermer.style.fontSize = "10px";
  • td_fermer.style.fontWeight = "bold";
  • td_fermer.style.color = B_B_TEXT;
  • //On utilise les balise <center> car la propriété "text-align" ne fonctionne pas sous FF
  • td_fermer.innerHTML = "<center>X</center>";
  • td_fermer.onmousedown = PdcBouttonOnMouseDown; //Début du clique
  • td_fermer.onmouseup = PdcBouttonOnMouseUpFermer; //Fermeture de la fenetre
  • td_fermer.onmouseout = PdcBouttonOnMouseOut; //Si l'utilisateur commence son clique puis sort du "boutton" pour annuler
  • //On Emboîte tout ça....
  • //On ajoute la div à notre case (TD)
  • td_titre.appendChild( div);
  • //On ajoute la case "titre" à notre ligne
  • tr.appendChild( td_titre);
  • //On ajoute la case "réduire" à notre ligne
  • tr.appendChild( td_reduire);
  • //On ajoute la case "fermer" à notre ligne
  • tr.appendChild( td_fermer);
  • //On ajoute notre ligne au corp du tableau
  • bandeau_body.appendChild( tr);
  • //On ajoute le corp au tableau au tableau
  • bandeau.appendChild( bandeau_body);
  • //On ajoute une référence à la fenetre (l'objet parent) pour les 3 elements du bandeau
  • //Permet d'accèder à la fenetre à partir des 3 "objets" du bandeau ('boutton' + titre)
  • td_titre.my_fenetre = fenetre;
  • td_fermer.my_fenetre = fenetre;
  • td_reduire.my_fenetre = fenetre;
  • bandeau.titre = div;
  • return bandeau;
  • }
  • //Bandeau.OnMouseUp
  • function PdcFenetreOnMouseUp(){
  • //On remet notre fonction par défaut pour gérer le déplacement
  • this.onmousedown = PdcFenetreOnMouseDown;
  • //Effet de transparence
  • if( is_ie )
  • this.my_fenetre.style.filter = "alpha(opacity=100);";
  • else
  • this.my_fenetre.style.opacity = "1";
  • //Plus de déplacement de fenetre en cours
  • fenetre = null;
  • }
  • //Bandeau.OnMouseDown
  • function PdcFenetreOnMouseDown(e){
  • maj_coordonnees( e);
  • //On garde les coordonnée du pointeur par rapport à la fenetre
  • this.my_fenetre.CurLastX = curX - this.my_fenetre.offsetLeft;
  • this.my_fenetre.CurLastY = curY - this.my_fenetre.offsetTop;
  • //On se met au dessus des autres fenetres lors du déplacement
  • pdcSetFenetrePremierPlan( this.my_fenetre);
  • //Effet de transparence
  • if( is_ie )
  • this.my_fenetre.style.filter = "alpha(opacity=80);";
  • else
  • this.my_fenetre.style.opacity = "0.8";
  • //On garde l'objet fenetre (du bandeau) qui correspond à la fenetre pour laquelle on gère le déplacement
  • fenetre = this.my_fenetre;
  • //Annulation de l'evenement pour éviter le surlignement
  • return false;
  • }
  • //Fonction qui met à jour les coordonnées de la souris en fonction du type de navigateur
  • function maj_coordonnees(e){
  • if( is_ie ){
  • curX = event.clientX;
  • curY = event.clientY;
  • }
  • else{
  • curY = e.clientY;
  • curX = e.clientX;
  • }
  • }
  • //Enfoncement des boutton "réduire" et "fermer"
  • function PdcBouttonOnMouseDown(){
  • this.style.border = "1px " + B_BD_BORDER + " inset";
  • this.style.backgroundColor = B_BD_BCKGROUND;
  • this.style.color = B_BD_TEXT;
  • //Annulation de l'evenement pour éviter le surlignement
  • return false;
  • }
  • //Relache la souris sur le boutton "réduire" (On réduit la fenetre)
  • function PdcBouttonOnMouseUpReduire(){
  • this.style.border = "1px " + B_B_BORDER + " solid";
  • this.style.backgroundColor = B_B_BCKGROUND;
  • this.style.color = B_B_TEXT;
  • if( this.my_fenetre.contenu.style.display == "none" ){
  • this.my_fenetre.contenu.style.display = "block"; //On réaffiche le contenu
  • this.my_fenetre.style.height = this.my_fenetre.my_height + "px"; //et on met à jour la taille de la fenetre
  • }
  • else{
  • this.my_fenetre.contenu.style.display = "none"; //On cache le contenu
  • this.my_fenetre.style.height = ( is_ie ? 24 : 20) + "px"; //Taille de la fenetre = taille du bandeau + bordure
  • }
  • }
  • //Double click sur le bandeau (titre) (On réduit la fenetre)
  • function PdcOnDoubleClickReduire(){
  • if( this.my_fenetre.contenu.style.display == "none" ){
  • this.my_fenetre.contenu.style.display = "block"; //On réaffiche le contenu
  • this.my_fenetre.style.height = this.my_fenetre.my_height + "px"; //et on met à jour la taille de la fenetre
  • }
  • else{
  • this.my_fenetre.contenu.style.display = "none"; //On cache le contenu
  • this.my_fenetre.style.height = ( is_ie ? 24 : 20) + "px"; //Taille de la fenetre = taille du bandeau + bordure
  • }
  • //Annulation de l'evenement pour éviter la selection
  • return false;
  • }
  • //Relache la souris sur le boutton "fermer" (On ferme ou cache la fenetre)
  • function PdcBouttonOnMouseUpFermer(){
  • this.style.border = "1px " + B_B_BORDER + " solid";
  • this.style.backgroundColor = B_B_BCKGROUND;
  • this.style.color = B_B_TEXT;
  • //Confirmation avant fermeture?
  • if( CONFIRME_FERMETURE )
  • if( !confirm("Etes-vous sûr de vouloir fermer la fenêtre?") )
  • return;
  • //Lors de la demande de fermeture soit on cache la fenetre
  • if( COMPORTEMENT_FERMETURE == "cache"){
  • this.my_fenetre.style.display = "none";
  • }
  • //Soit on l'enlève définitivement de notre page
  • else{
  • document.body.removeChild( this.my_fenetre);
  • }
  • }
  • //sorti des boutton "réduire" et "fermer" pour la souris
  • function PdcBouttonOnMouseOut(){
  • this.style.border = "1px " + B_B_BORDER + " solid";
  • this.style.backgroundColor = B_B_BCKGROUND;
  • this.style.color = B_B_TEXT;
  • }
  • //Document.OnMouseMove
  • function PdcDocumentOnMouseMove(e){
  • //Déplacement
  • if( fenetre != null ){
  • maj_coordonnees(e);
  • //On bloque le déplacement en dehors de la fenetre du navigateur
  • if( curX - fenetre.CurLastX < 0 || curY -fenetre.CurLastY < 0 )
  • return;
  • //Déplace la fenetre en fonction de la position actuelle du curseur et de la position du curseur par rapport à la fenetre
  • fenetre.style.left = curX -fenetre.CurLastX + "px";
  • fenetre.style.top = curY - fenetre.CurLastY + "px";
  • }
  • //Redimenssionnement
  • else{
  • if( fenetre_resize == null ){
  • //On cherche à savoir si la souris est sur un element de Type "Fenetre" (class = "PdcFenetre")
  • if( is_ie ){
  • if( event.srcElement.id != "PdcFenetre" )
  • return;
  • }
  • else{
  • if( e.target.id != "PdcFenetre")
  • return;
  • }
  • //La fenetre à redimenssioner
  • if( is_ie )
  • fenetre_resize = event.srcElement;
  • else
  • fenetre_resize = e.target;
  • }
  • //On récupère la position de la souris par rapport à la fenetre
  • if( is_ie ){
  • posX = event.clientX - fenetre_resize.offsetLeft;
  • posY = event.clientY - fenetre_resize.offsetTop;
  • eX = event.clientX;
  • eY = event.clientY;
  • }
  • else{
  • posX = e.clientX - fenetre_resize.offsetLeft;
  • posY = e.clientY - fenetre_resize.offsetTop;
  • eX = e.clientX;
  • eY = e.clientY;
  • }
  • //Pas de redimenssionnement en cours, on cherche à savoir dans quelle zone (direction) la souris se trouve
  • if( ! in_resize ){
  • //Aucune direction par défaut
  • resize_direction = 0;
  • //Type de curseur
  • resize_cursor = "";
  • //On cherche à savoir dans quelle(s) direction(s) doit on redimenssioner
  • if ( COTES_REDIMENSIONNEMENT == "all" && Math.abs(posY) < RES_ZONE){
  • resize_direction += RES_UP;
  • resize_cursor += "n";
  • }
  • else if( posY > (fenetre_resize.offsetHeight - RES_ZONE) && posY < (fenetre_resize.offsetHeight + RES_ZONE) ){
  • resize_direction += RES_DOWN;
  • resize_cursor += "s";
  • }
  • if( COTES_REDIMENSIONNEMENT == "all" && Math.abs(posX) < RES_ZONE ){
  • resize_direction += RES_LEFT;
  • resize_cursor += "w";
  • }
  • else if( posX > (fenetre_resize.offsetWidth - RES_ZONE) && posX < (fenetre_resize.offsetWidth + RES_ZONE) ){
  • resize_direction += RES_RIGHT;
  • resize_cursor += "e";
  • }
  • //Si on est sorti de la zone de redimenssionement, on remet le curseur par défaut
  • if( resize_direction == 0 ){
  • fenetre_resize.style.cursor = "default";
  • document.body.style.cursor = "defaut";
  • fenetre_resize = null;
  • return;
  • }
  • //Sinon on met le curseur qui va bien
  • else{
  • fenetre_resize.style.cursor = resize_cursor + "-resize";
  • //HS sous FF !
  • document.body.style.cursor = resize_cursor + "-resize;";
  • }
  • return;
  • }
  • //En cours de redimenssionement
  • else{
  • if( resize_direction & RES_RIGHT ){
  • if( posX >= MIN_WIDTH){
  • //Redimensionne la fenetre
  • fenetre_resize.style.width = posX + "px";
  • //Redimensionne le contenu
  • fenetre_resize.contenu.style.width = (posX - (is_ie ? 4 : 0) ) + "px";
  • //Redimensionne le bandeau
  • fenetre_resize.bandeau.style.width = (posX - (is_ie ? 4 : 0) ) + "px";
  • //Puis la div contenant le titre (taille fixe pour gestion de l'overflow)
  • fenetre_resize.bandeau.titre.style.width = (posX - (is_ie ? 40 : 36) ) + "px";
  • //On garde en "mémoire" la nouvelle taille de la fenetre pour la réduction/agrandissement
  • fenetre_resize.my_width = posX;
  • }
  • }
  • if( resize_direction & RES_LEFT ){
  • new_width = (fenetre_resize.offsetWidth - 4 - posX );
  • if( new_width >= MIN_WIDTH){
  • //Redimensionne le contenu
  • fenetre_resize.contenu.style.width = new_width + "px";
  • //Redimensionne le bandeau
  • fenetre_resize.bandeau.style.width = new_width + "px";
  • //Puis la div contenant le titre (taille fixe pour gestion de l'overflow)
  • fenetre_resize.bandeau.titre.style.width = (new_width - 36 ) + "px";
  • //Déplace + Redimensionne la fenetre
  • fenetre_resize.style.left = eX + "px";
  • fenetre_resize.style.width = new_width + "px";
  • //On garde en "mémoire" la nouvelle taille de la fenetre pour la réduction/agrandissement
  • fenetre_resize.my_width = posX;
  • }
  • //Lorsqu'on à atteint la taillle minimal, on se contente de déplacer la fenetre
  • else{
  • //Déplace la fenetre
  • fenetre_resize.style.left = eX + "px";
  • }
  • }
  • if( resize_direction & RES_UP ){
  • new_height = (fenetre_resize.offsetHeight - 4 - posY );
  • if( new_height >= MIN_HEIGHT){
  • //Redimenssionne le contenu
  • fenetre_resize.contenu.style.height = (new_height - 20 ) + "px";
  • //Redimenssionne et déplace la fenetre
  • fenetre_resize.style.top = eY + "px";
  • fenetre_resize.style.height = new_height + "px";
  • //Si l'utilisateur redimenssione vers le bas et que la fenetre et en mode "réduite" on réaffiche le contenu
  • if( fenetre_resize.contenu.style.display == "none" )
  • fenetre_resize.contenu.style.display = "block";
  • //On garde en "mémoire" la nouvelle taille de la fenetre pour la réduction/agrandissement
  • fenetre_resize.my_height = posY;
  • }
  • //Lorsqu'on à atteint la taillle minimal, on se contente de déplacer la fenetre
  • else{
  • //Déplace la fenetre
  • fenetre_resize.style.top = eY + "px";
  • }
  • }
  • if( resize_direction & RES_DOWN ){
  • if( posY >= MIN_HEIGHT){
  • //Redimenssionne la fenetre
  • fenetre_resize.style.height = posY + "px";
  • //Redimenssionne le contenu
  • fenetre_resize.contenu.style.height = (posY - (is_ie ? 24 : 20) ) + "px";
  • //Si l'utilisateur redimenssione vers le bas et que la fenetre et en mode "réduite" on réaffiche le contenu
  • if( fenetre_resize.contenu.style.display == "none" )
  • fenetre_resize.contenu.style.display = "block";
  • //On garde en "mémoire" la nouvelle taille de la fenetre pour la réduction/agrandissement
  • fenetre_resize.my_height = posY;
  • }
  • }
  • }
  • }
  • //Annulation de l'evenement pour éviter le surlignement
  • return false;
  • }
  • //Souris enfoncée sur Document (Début de redimenssionnement...?)
  • function PdcDocumentOnMouseDown(e){
  • in_resize = true;
  • //On se met au dessus des autres fenetres lors du redimenssionement
  • if( fenetre_resize != null )
  • pdcSetFenetrePremierPlan( fenetre_resize);
  • }
  • //Souris relâchée sur Document (Fin de redimenssionnement)
  • function PdcDocumentOnMouseUp(e){
  • in_resize = false;
  • }
  • //Met la fenetre au premier plan lorsqu'on clique dessus
  • function pdcFenetreOnClick(){
  • pdcSetFenetrePremierPlan( this);
  • }
  • //Permet de mettre une fenetre en premier plan par rapport au autres.
  • function pdcSetFenetrePremierPlan( fenetre ){
  • //Pour IE on travail sur : document.body.children
  • //Pour FF on travail sur : document.body.childNodes
  • //my_child = ( is_ie ? document.body.children : document.body.childNodes );
  • my_child = document.body.childNodes;
  • //On met tout les objet de type "Fenetre" en zIndex=1 (par défaut) et celle démandé en zIndex=2
  • for( var i=0; i < my_child.length; i++){
  • if( my_child[i].id == "PdcFenetre" )
  • my_child[i].style.zIndex = 1;
  • }
  • fenetre.style.zIndex = 2;
  • }
  • /*
  • CODE HTML + STYLE POUR LE BANDEAU
  • <table style="width: 100px; background-Color: #6f6f6f; cursor: move;">
  • <tr>
  • <td style="padding-top: 0px; padding-bottom: 0px;">
  • <div align="left" style="font-size: 12; width: 50px; overflow: hidden; color: #FFFFFF; font-weight:bold; white-space:nowrap;">Mon super titre</div>
  • </td>
  • <td style="padding:0px; background-Color: #FFFFFF; cursor: pointer; width:12px; height:12px; border:1px #000000 solid; font-size:10; text-align= center; font-weight:bold;"><center>-</center></td>
  • <td style="padding:0px; background-Color: #FFFFFF; cursor: pointer; width:12px; height:12px; border:1px #000000 solid; font-size:10; text-align= center; font-weight:bold;"><center>X</center></td>
  • </tr>
  • </table>
  • */
///////////////
// COULEURS //
///////////////

//FENETRE
BCKGROUND		=	"#FFFFFF";	//Couleur de fond de la fenetre
BORDER			=	"#000000";	//Couleur de la bordure

//BANDEAU
B_BCKGROUND		=	"#6f6f6f";	//Couleur du bandeau
B_TEXT			=	"#FFFFFF";	//Couleur du titre

//BOUTTON "FERMER" & "REDUIRE"
B_B_BCKGROUND	= 	"#FFFFFF";	//Couleur de Fond des bouttons "Fermer" et "Réduire"
B_B_BORDER		= 	"#000000";	//Couleur de Bordure des bouttons "Fermer" et "Réduire"
B_B_TEXT		= 	"#000000";	//Couleur de Texte des bouttons "Fermer" et "Réduire"

//BOUTTON "FERMER" & "REDUIRE" ENFONCES
B_BD_BCKGROUND	= 	"#000000";	//Couleur de Fond des bouttons "Fermer" et "Réduire"
B_BD_BORDER		= 	"#FFFFFF";	//Couleur de Bordure des bouttons "Fermer" et "Réduire"
B_BD_TEXT		= 	"#FFFFFF";	//Couleur de Texte des bouttons "Fermer" et "Réduire"

//SCROLLBAR
SBDARKSHADOW	=	"#4f4f4f";	//scrollbarDarkShadowColor
SB3DLIGHT 		=	"#4f4f4f";	//scrollbar3dLightColor
SBARROW   		=	"#FFFFFF";	//scrollbarArrowColor
SBBARBASE		=	"#4f4f4f";	//scrollbarBaseColor
SBBARFACE		=	"#8f8f8f";	//scrollbarFaceColor
SBHIGHTLIGHT	=	"#FFFFFF";	//scrollbarHighlightColor
SBBARSHADOW		=	"#8f8f8f";	//scrollbarShadowColor
SBBARTRACK		=	"#FFFFFF";	//scrollbarTrackColor
	
//////////////
// OPTIONS //
//////////////

COMPORTEMENT_FERMETURE = "cache"; //Comportement en cas de clique sur le boutton "Fermer" ( 'cache' ou 'supprime' la fenêtre)
CONFIRME_FERMETURE = true; //Demande une confirmation ou non lors d'un clique sur le boutton "Fermer"

COTES_REDIMENSIONNEMENT = "all"; //Cotés de la fenetre redimenssionables, "classique" = bas et droite, "all" = tous

//////////////////
// CONSTANTES //
//////////////////

//Constantes utilisées pour créer un masque  qui va nous permettre de savoir dans quelle(s) direction(s) le redimenssionnement doit s'effectué.
RES_UP 		= 1;	//Redimenssionement vers le haut
RES_DOWN 	= 2;	//Redimenssionement vers le bas
RES_RIGHT	= 4;	//Redimenssionement vers la droite
RES_LEFT	= 8;	//Redimenssionement vers la gauche

RES_ZONE	= 8;	//Zone de redimenssionement autour des borure ( Défaut : + ou - 5px)

MIN_HEIGHT 	= 75;	//Hauteur minimal pour une fenetre
MIN_WIDTH 	= 75;	//Largeur minimal pour une fenetre

///////////////
// GLOBALES //
///////////////

//Position du curseur de la souris (Mis à jour par le fonction appelé lors de l'evenement "OnMouseMove" de document)
curX = 0;
curY = 0;

resize_direction = 0; //Direction(s) du redimenssionement
in_resize = false;

fenetre = null;	//La fenetre en cours de déplacement
fenetre_resize = null;	//La fenetre en cours de redimmenssionnement

is_ie = ! (navigator.appName == "Netscape"); //Internet Explorer ou Netscape ?


//////////////////
// EVENEMENTS //
//////////////////

//Et on active l'event "mousemove" pour récupérer les coordonnée de la souris au fur et à mesure
document.onmousemove = PdcDocumentOnMouseMove;
document.onmousedown = PdcDocumentOnMouseDown;
document.onmouseup = PdcDocumentOnMouseUp;
 
//Création d'un fenetre
function CreerPdcFenetre( titre, largeur, hauteur, posLeft, posTop, contenu ){
		
	//On créer un objet "Div" correspondant à notre fenetre
	var fenetre = document.createElement("div");   
	
	//Permet d'identifier une fenetre de façon à ne pas éffectuer d'action de redimensionnement sur un élément qui n'est pas une fenetre
	
	fenetre.id = "PdcFenetre";
	
	//On définit les propriétés de la fenetre
	
	//On définit la taille et on garde la taille par défaut
	fenetre.my_width = ((is_ie ? 4 : 0) + largeur); //+ 4 pour la bordure si IE, 0 si FF
	fenetre.style.width = fenetre.my_width +"px"; 
	
	fenetre.my_height = ((is_ie ? 24 : 20) + hauteur); //+24 pour la bordure et le bandeau si IE, + 20 si FF
	fenetre.style.height = fenetre.my_height + "px"; 
	
	//Position
	fenetre.style.position = "absolute";
	fenetre.style.left = posLeft + "px";
	fenetre.style.top = posTop + "px";
	
	//Bordure
	fenetre.style.border = "2px " + BORDER + " solid";
		
	//Couleur de fond pour avoir une fenetre non transparente
	fenetre.style.backgroundColor = BCKGROUND;
	
	//On créer notre bandeau
	bandeau = CreerPdcBandeau( titre, fenetre, largeur);
	
	//On ajoute notre bandeau à la fentre
	fenetre.appendChild( bandeau);
	
	//On garde une référence à noter bandeau
	fenetre.bandeau = bandeau;
		
		
	//On créer une div qui va accueillir notre contenu
	var div_contenu = document.createElement("div"); 
	
	//On met à la taille demandé
	div_contenu.style.width = largeur + "px";
	div_contenu.style.height = hauteur + "px";
	
	//Dans le cas ou le contenu est plus grand que la div qui l'accueil, on affiche des scrollbar
	div_contenu.style.overflow = "auto";
		
	//Mise au couleurs personnailisé des scrollbars
	div_contenu.style.scrollbarDarkShadowColor	=	SBDARKSHADOW;
	div_contenu.style.scrollbar3dLightColor		=	SB3DLIGHT;
	div_contenu.style.scrollbarArrowColor		=	SBARROW;
	div_contenu.style.scrollbarBaseColor		=	SBBARBASE;
	div_contenu.style.scrollbarFaceColor		=	SBBARFACE;
	div_contenu.style.scrollbarHighlightColor	=	SBHIGHTLIGHT;
	div_contenu.style.scrollbarShadowColor		=	SBBARSHADOW;
	div_contenu.style.scrollbarTrackColor		=	SBBARTRACK;
	
	
	
	//On garde une référence à notre contenu pour la réduction de la fenetre
	fenetre.contenu = div_contenu; 
	
	//On garde également une réference dans l'autre sens (référence à la fenetre dans contenu)
	div_contenu.my_fenetre = fenetre;
		
	//Si on a du contenu on l'ajoute à la fenetre
	if(	contenu != null ){
	
		//Objet
		if( typeof( contenu) == "object" ){
			div_contenu.appendChild( contenu);
			
		}
		//Ou string (par exemple : "<a href"..."> .. </a>"
		else{
		
			tmp = document.createElement("div");
			tmp.innerHTML = contenu;
			div_contenu.appendChild( tmp);			
		}
		
	}

	//On ajoute notre div à la fenetre
	fenetre.appendChild( div_contenu);
			
	//Par défaut la fenetre est en dessous lorsque qu'une fenetre est déplacé
	fenetre.style.zIndex = 1;

	//Met la fenetre au premier plan au moindre clique dessus.
	fenetre.onmousedown = pdcFenetreOnClick;
	
	//On ajoute notre fenetre à la page
	document.body.appendChild( fenetre);
		
	//et on retourne l'objet fenetre pour une utilisation éventuelle (réaffichage après fermeture par exemple)
	return fenetre;
}

//Fonction indépendante pour la création de l'objet bandeau
function CreerPdcBandeau( titre, fenetre, largeur){

	// VOIR A LA FIN DU FICHIER POUR LE CODE HTML DU BANDEAU
			
	var bandeau = document.createElement("table")
	
	bandeau.style.width = largeur + "px";
	bandeau.style.height = "20px";
	bandeau.style.backgroundColor = B_BCKGROUND;
	bandeau.style.cursor = "move";
	
	
	var bandeau_body = document.createElement("tbody")
		
	//Notre unique ligne du tableau...	
	var tr = document.createElement("tr");
	
	//On créer une case pour le texte du titre
	var td_titre = document.createElement("td");	
	td_titre.style.paddingTop = "0px";
	td_titre.style.paddingBottom = "0px";
	
	//On ajoute la gestion des évenements à notre bandeau
	
	//Lorsque l'utilisateur appui sur le bouton de la souris
	td_titre.onmousedown = PdcFenetreOnMouseDown;	
	
	//Lorsque l'utilisateur relache le bouton de la souris
	td_titre.onmouseup = PdcFenetreOnMouseUp;
	
	//Réduire / Agrandir la fenetre en cas de double clique sur le bandeau
	td_titre.ondblclick  = PdcOnDoubleClickReduire; 
	
	//On créer la Div qui va accueillir le titre
	var div = document.createElement("div")
	
	div.style.fontSize = "12";
	div.style.width = (largeur - 36) + "px"; //Largeur de la fenetre moins la taille de nos 2 bouttons ( 12 + 12) moins la taille de la bordure (2 + 2) moins la taille entre nos cellule (4 * 2) = .. 36 bien sûr ! :p
	div.style.overflow = "hidden"; //Ne pas agrandir la Div si le contenu est plus grand que sa taille
	div.style.color = B_TEXT;
	div.style.fontWeight = "bold";
	div.style.whiteSpace = "nowrap"; //Pas de retour à la ligne
		
	
	//Le texte du titre
	div.innerHTML += titre;
	
		
	
	//On créer une 2ième case pour notre tableau celle contenant le "boutton" pour réduire la fenetre
	var td_reduire = document.createElement("td");	
	
	td_reduire.style.padding = "0px"	
	td_reduire.style.backgroundColor = B_B_BCKGROUND;
	td_reduire.style.cursor = "pointer";
	td_reduire.style.width = "12px";
	td_reduire.style.height = "12px";
	td_reduire.style.border = "1px " + B_B_BORDER + " solid";
	td_reduire.style.fontSize = "10px";	
	td_reduire.style.fontWeight = "bold";
	td_reduire.style.color = B_B_TEXT;
	
	//On utilise les balise <center> car la propriété "text-align" ne fonctionne pas sous FF
	td_reduire.innerHTML = "<center>-</center>";
		
	td_reduire.onmousedown = PdcBouttonOnMouseDown; //Début du clique
	td_reduire.onmouseup = PdcBouttonOnMouseUpReduire; //Réduction de la fenetre
	td_reduire.onmouseout = PdcBouttonOnMouseOut; //Si l'utilisateur commence son clique puis sort du "boutton" pour annuler
		
		
	
	//On créer une 3ième case pour notre tableau celle contenant le "boutton" pour fermer la fenetre
	var td_fermer = document.createElement("td");	
	
	td_fermer.style.padding = "0px"	
	td_fermer.style.backgroundColor = B_B_BCKGROUND;
	td_fermer.style.cursor = "pointer";
	td_fermer.style.width = "12px";
	td_fermer.style.height = "12px";
	td_fermer.style.border = "1px " + B_B_BORDER + " solid";
	td_fermer.style.fontSize = "10px";	
	td_fermer.style.fontWeight = "bold";
	td_fermer.style.color = B_B_TEXT;
	
	//On utilise les balise <center> car la propriété "text-align" ne fonctionne pas sous FF
	td_fermer.innerHTML = "<center>X</center>";
	
	td_fermer.onmousedown = PdcBouttonOnMouseDown; //Début du clique
	td_fermer.onmouseup = PdcBouttonOnMouseUpFermer; //Fermeture de la fenetre
	td_fermer.onmouseout = PdcBouttonOnMouseOut; //Si l'utilisateur commence son clique puis sort du "boutton" pour annuler
		
	//On Emboîte tout ça....
		
	//On ajoute la div à notre case (TD)
	td_titre.appendChild( div);	
	//On ajoute la case "titre" à notre ligne
	tr.appendChild( td_titre);
	//On ajoute la case "réduire" à notre ligne
	tr.appendChild( td_reduire);
	//On ajoute la case "fermer" à notre ligne
	tr.appendChild( td_fermer);	
	//On ajoute notre ligne au corp du tableau	
	bandeau_body.appendChild( tr);	
	//On ajoute le corp au tableau au tableau
	bandeau.appendChild( bandeau_body);
	
	
	//On ajoute une référence à la fenetre (l'objet parent) pour les 3 elements du bandeau
	
	//Permet d'accèder à la fenetre à partir des 3 "objets" du bandeau ('boutton' + titre)
	td_titre.my_fenetre = fenetre;
	td_fermer.my_fenetre = fenetre;
	td_reduire.my_fenetre = fenetre;	

	bandeau.titre = div;
	
	return bandeau;
		
		
}

//Bandeau.OnMouseUp
function PdcFenetreOnMouseUp(){	
		
	//On remet notre fonction par défaut pour gérer le déplacement
	this.onmousedown = PdcFenetreOnMouseDown;	
		
	//Effet de transparence
	if( is_ie )
		this.my_fenetre.style.filter = "alpha(opacity=100);";	
	else
		this.my_fenetre.style.opacity = "1";
	
	//Plus de déplacement de fenetre en cours
	fenetre = null;
}

//Bandeau.OnMouseDown
function PdcFenetreOnMouseDown(e){
		
	maj_coordonnees( e);
	
	//On garde les coordonnée du pointeur par rapport à la fenetre
	this.my_fenetre.CurLastX = curX - this.my_fenetre.offsetLeft;
	this.my_fenetre.CurLastY = curY - this.my_fenetre.offsetTop;
		

	//On se met au dessus des autres fenetres lors du déplacement
	pdcSetFenetrePremierPlan( this.my_fenetre);
			
	//Effet de transparence
	if( is_ie )
		this.my_fenetre.style.filter = "alpha(opacity=80);";	
	else
		this.my_fenetre.style.opacity = "0.8";
	
	//On garde l'objet fenetre (du bandeau) qui correspond à la fenetre pour laquelle on gère le déplacement
	fenetre = this.my_fenetre;
	
	//Annulation de l'evenement pour éviter le surlignement
	return false;
}


//Fonction qui met à jour les coordonnées de la souris en fonction du type de navigateur
function maj_coordonnees(e){
	
	if( is_ie ){
		curX = event.clientX;
		curY = event.clientY;
	}
	else{
		curY = e.clientY;
		curX = e.clientX;
	}
}


//Enfoncement des boutton "réduire" et "fermer"
function PdcBouttonOnMouseDown(){
				
	this.style.border = "1px " + B_BD_BORDER + " inset";	
	
	this.style.backgroundColor = B_BD_BCKGROUND;
	this.style.color = B_BD_TEXT;
	
	//Annulation de l'evenement pour éviter le surlignement
	return false;
}

//Relache la souris sur le boutton "réduire" (On réduit la fenetre)
function PdcBouttonOnMouseUpReduire(){
	
	
	this.style.border = "1px " + B_B_BORDER + " solid";	
	
	this.style.backgroundColor = B_B_BCKGROUND;
	this.style.color = B_B_TEXT;
	
	if( this.my_fenetre.contenu.style.display == "none" ){
		this.my_fenetre.contenu.style.display = "block"; //On réaffiche le contenu						
		this.my_fenetre.style.height = this.my_fenetre.my_height + "px"; //et on met à jour la taille de la fenetre				
	}
	else{
		this.my_fenetre.contenu.style.display = "none";	//On cache le contenu
		this.my_fenetre.style.height = ( is_ie ? 24 : 20) + "px"; //Taille de la fenetre = taille du bandeau + bordure
	}
	
}

//Double click sur le bandeau (titre) (On réduit la fenetre)
function PdcOnDoubleClickReduire(){
			
	if( this.my_fenetre.contenu.style.display == "none" ){
		this.my_fenetre.contenu.style.display = "block"; //On réaffiche le contenu						
		this.my_fenetre.style.height = this.my_fenetre.my_height + "px"; //et on met à jour la taille de la fenetre				
	}
	else{
		this.my_fenetre.contenu.style.display = "none";	//On cache le contenu
		this.my_fenetre.style.height = ( is_ie ? 24 : 20) + "px"; //Taille de la fenetre = taille du bandeau + bordure
	}
	
	//Annulation de l'evenement pour éviter la selection
	return false;
}

//Relache la souris sur le boutton "fermer" (On ferme ou cache la fenetre)
function PdcBouttonOnMouseUpFermer(){
	
	this.style.border = "1px " + B_B_BORDER + " solid";	
	
	this.style.backgroundColor = B_B_BCKGROUND;
	this.style.color = B_B_TEXT;
	
	//Confirmation avant fermeture?
	if( CONFIRME_FERMETURE )
		if( !confirm("Etes-vous sûr de vouloir fermer la fenêtre?") )
			return;
	
	
	//Lors de la demande de fermeture soit on cache la fenetre
	if( COMPORTEMENT_FERMETURE == "cache"){
		this.my_fenetre.style.display = "none";
	}
	//Soit on l'enlève définitivement de notre page
	else{
		document.body.removeChild( this.my_fenetre);
	}
}

//sorti des boutton "réduire" et "fermer" pour la souris
function PdcBouttonOnMouseOut(){
		
	this.style.border = "1px " + B_B_BORDER + " solid";	
	
	this.style.backgroundColor = B_B_BCKGROUND;
	this.style.color = B_B_TEXT;	
}

//Document.OnMouseMove
function PdcDocumentOnMouseMove(e){
				
	//Déplacement
	if( fenetre != null ){
	
		maj_coordonnees(e);
		
		//On bloque le déplacement en dehors de la fenetre du navigateur
		if( curX - fenetre.CurLastX < 0 || curY -fenetre.CurLastY < 0 )
			return;
			
		//Déplace la fenetre en fonction de la position actuelle du curseur et de la position du curseur par rapport à la fenetre
		fenetre.style.left = curX -fenetre.CurLastX + "px";
		fenetre.style.top = curY - fenetre.CurLastY + "px";	
	}
	//Redimenssionnement
	else{
		
		
		if( fenetre_resize == null ){
		
			//On cherche à savoir si la souris est sur un element de Type "Fenetre" (class = "PdcFenetre")			
			if( is_ie ){
				if( event.srcElement.id != "PdcFenetre" )				
					return;									
			}
			else{
				
				if( e.target.id != "PdcFenetre")
					return;						
			}
						
			//La fenetre à redimenssioner
			if( is_ie )
				fenetre_resize = event.srcElement;
			else
				fenetre_resize = e.target;			
		}
				
		//On récupère la position de la souris par rapport à la fenetre
		if( is_ie ){						
			posX = event.clientX - fenetre_resize.offsetLeft;			
			posY = event.clientY - fenetre_resize.offsetTop;
			eX = event.clientX;
			eY = event.clientY;
		}
		else{			
			posX = e.clientX - fenetre_resize.offsetLeft;			
			posY = e.clientY - fenetre_resize.offsetTop;
			eX = e.clientX;
			eY = e.clientY;
		}
		
		//Pas de redimenssionnement en cours, on cherche à savoir dans quelle zone (direction) la souris se trouve
		if( ! in_resize ){
			
			//Aucune direction par défaut
			resize_direction = 0;
			
			//Type de curseur
			resize_cursor = "";
			
			//On cherche à savoir dans quelle(s) direction(s) doit on redimenssioner	
			if ( COTES_REDIMENSIONNEMENT == "all" && Math.abs(posY) < RES_ZONE){
				resize_direction += RES_UP;
				resize_cursor += "n";
			}
			else if( posY > (fenetre_resize.offsetHeight - RES_ZONE) && posY < (fenetre_resize.offsetHeight + RES_ZONE) ){
				resize_direction += RES_DOWN;
				resize_cursor += "s";
			}
			
			if( COTES_REDIMENSIONNEMENT == "all" && Math.abs(posX) < RES_ZONE ){
				resize_direction += RES_LEFT;
				resize_cursor += "w";
			}
			else if( posX > (fenetre_resize.offsetWidth - RES_ZONE) && posX < (fenetre_resize.offsetWidth + RES_ZONE) ){
				resize_direction += RES_RIGHT;
				resize_cursor += "e";			
			}
				
					

			//Si on est sorti de la zone de redimenssionement, on remet le curseur par défaut
			if( resize_direction == 0 ){
				
				fenetre_resize.style.cursor = "default";		
				document.body.style.cursor = "defaut";			
				fenetre_resize = null;
				
				return;
			}
			//Sinon on met le curseur qui va bien
			else{
				
								
				fenetre_resize.style.cursor = resize_cursor + "-resize";					
				//HS sous FF !
				document.body.style.cursor = resize_cursor + "-resize;";				
			}
			
			return;		
		}		
		//En cours de redimenssionement
		else{
		
		
 
						
			if( resize_direction & RES_RIGHT ){
				
				if( posX >= MIN_WIDTH){
					
					//Redimensionne la fenetre
					fenetre_resize.style.width = posX + "px";
					//Redimensionne le contenu
					fenetre_resize.contenu.style.width = (posX - (is_ie ? 4 : 0) ) + "px";					
					//Redimensionne le bandeau
					fenetre_resize.bandeau.style.width = (posX - (is_ie ? 4 : 0) ) + "px";										
					//Puis la div contenant le titre (taille fixe pour gestion de l'overflow)
					fenetre_resize.bandeau.titre.style.width = (posX - (is_ie ? 40 : 36) ) + "px";										
					
					//On garde en "mémoire" la nouvelle taille de la fenetre pour la réduction/agrandissement
					fenetre_resize.my_width = posX;
				}
			}
			
			if( resize_direction & RES_LEFT ){
				
				new_width = (fenetre_resize.offsetWidth - 4 - posX );
				
				if( new_width >= MIN_WIDTH){
					
					//Redimensionne le contenu
					fenetre_resize.contenu.style.width = new_width + "px";					
					//Redimensionne le bandeau
					fenetre_resize.bandeau.style.width = new_width + "px";										
					//Puis la div contenant le titre (taille fixe pour gestion de l'overflow)
					fenetre_resize.bandeau.titre.style.width = (new_width - 36 ) + "px";	
					
					//Déplace + Redimensionne la fenetre
					fenetre_resize.style.left = eX + "px";				
					fenetre_resize.style.width =  new_width + "px";
					
					//On garde en "mémoire" la nouvelle taille de la fenetre pour la réduction/agrandissement
					fenetre_resize.my_width = posX;
										
				}
				//Lorsqu'on à atteint la taillle minimal, on se contente de déplacer la fenetre
				else{
				
					//Déplace la fenetre
					fenetre_resize.style.left = eX + "px";				
				}
			}		
			
			if( resize_direction & RES_UP ){
				
				new_height = (fenetre_resize.offsetHeight - 4 - posY );
				
				if( new_height >= MIN_HEIGHT){
					
					//Redimenssionne le contenu
					fenetre_resize.contenu.style.height = (new_height - 20 ) + "px";
					
					//Redimenssionne et déplace la fenetre
					fenetre_resize.style.top = eY + "px";
					fenetre_resize.style.height =  new_height + "px";	

					//Si l'utilisateur redimenssione vers le bas et que la fenetre et en mode "réduite" on réaffiche le contenu
					if( fenetre_resize.contenu.style.display == "none" )
						fenetre_resize.contenu.style.display = "block"; 					
						
					//On garde en "mémoire" la nouvelle taille de la fenetre pour la réduction/agrandissement
					fenetre_resize.my_height = posY;
					
				}
				//Lorsqu'on à atteint la taillle minimal, on se contente de déplacer la fenetre
				else{
				
					//Déplace la fenetre
					fenetre_resize.style.top = eY + "px";				
				}
				
				
			}
			
			if( resize_direction & RES_DOWN ){			
				
				if( posY >= MIN_HEIGHT){	
					//Redimenssionne la fenetre
					fenetre_resize.style.height = posY + "px";					
					//Redimenssionne le contenu
					fenetre_resize.contenu.style.height = (posY - (is_ie ? 24 : 20) ) + "px";	

					//Si l'utilisateur redimenssione vers le bas et que la fenetre et en mode "réduite" on réaffiche le contenu
					if( fenetre_resize.contenu.style.display == "none" )
						fenetre_resize.contenu.style.display = "block"; 					
						
					//On garde en "mémoire" la nouvelle taille de la fenetre pour la réduction/agrandissement
					fenetre_resize.my_height = posY;
				}
				
			}			
		}			
	}
	
	//Annulation de l'evenement pour éviter le surlignement
	return false;
}


//Souris enfoncée sur Document (Début de redimenssionnement...?)
function PdcDocumentOnMouseDown(e){	
	in_resize = true;
	//On se met au dessus des autres fenetres lors du redimenssionement
	if( fenetre_resize != null )
		pdcSetFenetrePremierPlan( fenetre_resize);
	
}


//Souris relâchée sur Document (Fin de redimenssionnement)
function PdcDocumentOnMouseUp(e){
	in_resize = false;		
}

//Met la fenetre au premier plan lorsqu'on clique dessus
function pdcFenetreOnClick(){
	pdcSetFenetrePremierPlan( this);
}

//Permet de mettre une fenetre en premier plan par rapport au autres.
function pdcSetFenetrePremierPlan( fenetre ){
			
	//Pour IE on travail sur : document.body.children
	//Pour FF on travail sur : document.body.childNodes
	//my_child = ( is_ie ? document.body.children : document.body.childNodes );
	
	
	my_child = document.body.childNodes;
	
	//On met tout les objet de type "Fenetre" en zIndex=1 (par défaut) et celle démandé en zIndex=2	
	for( var i=0; i < my_child.length; i++){
		if( my_child[i].id == "PdcFenetre" )
			my_child[i].style.zIndex = 1;
	}
		
	fenetre.style.zIndex = 2;
}

/*

CODE HTML + STYLE POUR LE BANDEAU

<table style="width: 100px; background-Color: #6f6f6f; cursor: move;">	
<tr>


	<td style="padding-top: 0px; padding-bottom: 0px;">
		<div align="left" style="font-size: 12; width: 50px; overflow: hidden; color: #FFFFFF; font-weight:bold; white-space:nowrap;">Mon super titre</div>
	</td>
	
	<td style="padding:0px; background-Color: #FFFFFF; cursor: pointer; width:12px; height:12px; border:1px #000000 solid; font-size:10; text-align= center; font-weight:bold;"><center>-</center></td>

	<td style="padding:0px; background-Color: #FFFFFF; cursor: pointer; width:12px; height:12px; border:1px #000000 solid; font-size:10; text-align= center; font-weight:bold;"><center>X</center></td>
			
</tr>
</table>


*/

 Conclusion

Voilà la version finale de ce petit projet Javascript. Les fenetres sont déplaçables et redimenssionnables comme prévu.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

30 septembre 2008 18:08:44 :
Suppression de l'utilisation d'un timer pour le déplacement. Compatibilité FireFox. Ajout des bouttons "Fermer" et "Réduire" au bandeau de la fenetre. Correction de la taille si la taille du contenu est supérieur à la taille de création de la fenetre (overflow=hidden). Suppression de l'effet de surlignement lors du déplacement. Ajout d'option pour la gestion de la fermeture. FONCTIONNALITES A VENIR : Redimensionnement des fenetres par la souris.
30 septembre 2008 18:12:13 :
Suppression de l'utilisation d'un timer. Compatibilité avec FireFox. Suppression de l'effet de surlignement lors du déplacement. Ajout des 2 bouttons "Fermer" et "Réduire" au bandeau. Gestion de dépassement de taille, si la taille du contenu est supérieure à la taille de création de la fenetre (overflow=hidden). Ajout de 2 options pour la gestion du boutton "Fermer". FONCTIONNALITES A VENIR : Gestion du redimmensionnement de la fenetre par la souris.
07 octobre 2008 13:33:47 :
Effet de transparence lors du déplacment. Ajout de scroll bar pour un contenu supérieur à la taille de la fenetre. Style des scrollbar armonisé avec le bandeau de la fenetre (uniquement sous IE). Double click sur le bandeau pour réduire/agrandir la fenetre. Mise au premier plan de la fenetre au moindre clique. Redimensionnement des fenetre par la souris.
07 octobre 2008 13:41:12 :
Mise à jour du titre de la source (ajout de "redimenssionnable").

 Sources du même auteur

Source avec Zip Source avec une capture ENCORE UN DÉMINEUR

 Sources de la même categorie

Source avec Zip Source avec une capture POSMOUSE - AFFICHAGE DES COORDONNÉES DE LA SOURIS, TAILLE DE... par phidelum
SFR WIDGET ET JQUERY par hhoareau
Source avec Zip JOLIE ALERTE AVEC "ALERT()" par heycraft
Source avec Zip Source avec une capture FENETRE D'ACTUALITE par kazma
Source avec Zip Source avec une capture CLASS POP-IN AVEC EFFET SOUS JQUERY DE "CONNEXION" STYLE CS ... par Nementon

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture FENETRE D'ACTUALITE par kazma
Source avec Zip Source avec une capture WINDOWS , POUR FAIRE DE JOLIE FENETRE )) par Kimjoa
Source avec Zip Source avec une capture MENU PROMOTIONNEL par David78390
Source avec Zip Source avec une capture FENETRE MULTIPLE par kazma
Source avec Zip Source avec une capture FENETRE QUI SE DEPLACE par Ricky_MacElroy

Commentaires et avis

Commentaire de XtremDuke le 26/09/2008 18:02:31

Salut,

Ton script ne fonctionne pas sous firefox et le déplacement semble saccader.
Tu devrais aussi stopper la propagation de tes évènements afin de ne pas avoir l'effet de sélection lorsqu'on passe une fenetre au dessus d'un texte.

Commentaire de pdc_666 le 26/09/2008 19:25:00

Salut XtremDuke si tu regarde dans la description j'ai bien spécifié que la source n'est pas encore compatible mais c'est prévu ! J'ai pas encore eu le temps.

Pour la saccade je pense qu'il suffit de réduire l'intervale des appel à la fonction PdcFenetreMove() (actuellement 20 ms).

Et dernièrement pour la selection de texte j'ai desespérement essayé de le faire sans succèes. Il faut retourné False lors d'un appel à une fonction event c'est bien ça? Mais lequel?

Commentaire de kazma le 26/09/2008 19:45:16 administrateur CS

bonjour

ayant mois meme fait une source du meme type je trouve la source tecnique pour un resutat mitige.

bon debogage

Commentaire de pdc_666 le 27/09/2008 00:28:09

Bonjour kazma,

en fait ma source n'est pas fini encore c'est pour ça que le résultat n'est pas encore térrible. Le but étant plus de faire une petite librairie qu'une simple source à tire d'exemple.

J'ai posté ma source sans qu'elle soit fini pour avoir de l'aide car je n'ai pas une grosse expérience du javascript.

En tout cas bravo pour ta source ça marche nikel.

Commentaire de petifa le 27/09/2008 11:49:27

il y a des bibliothèques pour ça, prototype par exemple, et c'est compatible firefox...

Commentaire de djmmix le 27/09/2008 13:46:32

PETIFA: le but de sa source comme d'autre c'est d'évité d'utiliser les SDK deja tout fait ....

sinon t'apprend rien

et personnelement je suis pas ppour les SDK deja trop lourde pour les utilisation qu'on en fait  et perso vaut mieux développer une fonction classe personel qui sera pour un projet precis que d'avoir un SDK lourd pour le peu de fonction appeler.

Commentaire de petifa le 27/09/2008 18:06:52

oui certe je dis pas le contraire, moi aussi ça nm'arrive de réinventer la roue mais bon je faisais remarquer

Commentaire de XtremDuke le 28/09/2008 11:06:34

DJIMMIX > je suis tout à fait d'accord avec tes remarques, cependant rien ne t'empêche d'aller jetter un coup d'½il sur ces frameworks afin de comprendre certains fonctionnements.

Cependant, utiliser un timer pour le déplacement est complètement inutile. Voilà en gros le fonctionnement classique d'un drag'n drop :

1 - "mousedown" sur la fenetre à déplacer :
* Ajout de l'événement "mousemove" à l'objet "document"
* Ajout de l'événement "mouseup" à l'objet "document"
* Récupération des coordonnées du pointeurs

2 - "mousemove" de l'objet "document" :
* Déplacement de la fenêtre (en fonction des coordonnées du pointeur)
* Annulation de l'évènement "mouvemove" (éviter l'effet de surlignement)

3 - "mouseup" sur l'objet "document" :
* Suppression des évènements "mousemove" et "mouseup" de l'objet "document"

Il peut y avoir quelques variantes mais voilà en gros le principe.
Je te conseilles aussi de jeter un ½il sur le gestionnaire d'événement de javascript.

A+

Commentaire de bbcluny le 29/09/2008 09:54:11

Source interressante

Commentaire de pdc_666 le 30/09/2008 18:14:50

J'ai oublié de préciser lors de la mise à jour : Merci XtremDuke pour tes conseils ! :)

Commentaire de pdc_666 le 30/09/2008 18:17:37

Encore une chose que je n'ai pas précisé, j'ai également le dépassement de la taille dans le titre.

Si le titre est trop long pour la taille de la fenetre, il est coupé (même principe que pour le contenu overflow=hidden).

Si j'ai le temps je ferai peu etre mon "perfectionniste" en rajoutant "..." a la fin du titre dans ce cas. Mais je sens que ça va être beaucoup de code pour pas grand chose... à suivre.

Commentaire de kazma le 30/09/2008 21:23:48 administrateur CS

l'amélioration est tres perceptible le deplacement des fenetres est devenu fluide donc je ne dirait qu'une chose félicitation.

Commentaire de djmmix le 07/10/2008 17:25:11

je vien de tester chapeau, nikel sous IE7 et FF3 bravo :)

Commentaire de Nicolas___ le 18/10/2008 17:05:28

Salut pdc_666 ,
dis est ce que ta source est libre de droit ?
Peut on l'utiliser pour faire un site web ?

Sinon superbe , je ne savais pas qu'on savait faire ca en js ... mais j'y connais pas grand chose en même temps ^^

Ciao
Nico

Commentaire de Nicolas___ le 19/10/2008 16:18:13

ta source m'a donné envie de connaitre plus sur le js et c'est dommage que les 3/4 des idées de cette source soit sur un tuto sur le site du zero ...

Commentaire de pdc_666 le 20/10/2008 09:01:46

Salut nicolas,

la source est libre tu peu en faire ce qu'il te plais ! Mais si ma source est réalisable à 3/4 grace à un tuto c'est domage pour toi, si tu veux mieux connaitre le JS, de ne pas essayé de réaliser la même chose toi meme. :)

Commentaire de boboss74 le 04/05/2009 17:40:06 9/10

Enfin un script correct dans le domaine ! Code très propre et vraiment bien commenté.

Merci beaucoup :)

Commentaire de pdc_666 le 04/05/2009 17:52:01

Salut boboss74,

merci pour ton commentaire et heureux de voir que mon code sert encore ;) ...

Commentaire de bibi5757 le 22/05/2009 02:49:09 8/10

Salut PDC_666,
du même avis que BOBOSS74, plus des constantes très utiles.
je vais m'inspirer de cette source pour créer une boite à outil "BBCode" pour le site d'une asso.
C'est exactement ce dont j'avais besoin.
Merci beaucoup et que cette source soit encore utile à beaucoup de monde.

Une toute petite chose, la mise en couleurs personnalisée des scrollbars ne fonctionnent pas sous FF 3.0.10, mais je ne me suis pas encore penché sur la question, et quelques fautes d'orthographe dans les commentaires ^^

Commentaire de pdc_666 le 22/05/2009 09:19:39

bibi5757, Merci et désolé pour les fautes d'orthographe... C'est pas trop mon fort...

Sinon pour les Scrollbars sous FireFox il me semble que c'est Firefox lui même qui ne le gère pas. Je peu me tromper, mais je ne crois pas que ce soit possible.

Commentaire de bibi5757 le 23/05/2009 16:45:20

Dans mon cas, au final, je n'utilise pas les scrollbars donc je n'ai pas plus d'info. Merci encore, j'avance bien grace à toi. J'ai même créé une case à cocher pour afficher ou non la fenêtre:

<script>
function affiche_boite_a_outils(){
if (document.activite.visibilite_boite_a_outils.checked)
{
document.getElementById("PdcFenetre").style.visibility="visible";
}
else
{
document.getElementById("PdcFenetre").style.visibility="hidden";
}
}
</script>


Code HTML:

<input type="checkbox" name="visibilite_boite_a_outils" checked="checked" onclick="javascript:affiche_boite_a_outils();" />Boite à outil

Commentaire de metaldark00 le 15/08/2009 18:41:26

ya t'il un moyen d'ouvrir l'une de ces fenêtres en appelant la la fonction avec un simple lien

Commentaire de Fenri le 22/08/2009 12:18:11 10/10

Salut,

Ton code est vraiment tres bien et utile ! Bravo a toi ! (J'ai adapté un theme Vista sur les fenetres) Le rendu est tres joli ;) ! Ce ci étant dit, j'ai quand meme un petit soucis ... (qui a dailleur deja était posé ^^') J'aurais besoin de ton aide precieuse pour trouver le moyen de creer une fenetre en apuiyant sur un bouton ou un lien. Merci d'avance et encore une fois bravo !

Commentaire de pdc_666 le 24/08/2009 08:28:04

Bonjour MetalDark & Fenri,

je en vois pas trop en quoi ouvrir une fenêtre via un simple liens ou bouton est un problème.

Il suffit de créer une fonction qui créer une fenêtre et de l'appelé sur le "onclick" d'un bouton ou dans un simple lien :

<script>
function showGoogle(){
CreerPdcFenetre( "305", 500, 200, 350, 150, "<a href=\"http:www.google.fr\"> google</a>");
}
</script>



<input type="button" onclick="showGoogle();" value="Google !">

<!-- OU -->

<a href="javascript:showGoogle();">Google !</a>



Voilà c'est aussi simple que ça... Après si vous voulez charger les fenêtres a la création de la page et (juste) les afficher après, va falloir modifier un peu le code pour que les "fenêtre" soit créées avec "display: none" puis créer une fonction qui va les ré-afficher.

Voilà j'espère que j'ai répondu à vos questions et merci pour la note Fenri (au passage je serai curieux de voir ce que ça donne avec un style Vista sur les fenêtres...).

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

tester qu'une fenetre est ouverte ou fermer [ par steph ] salut,comment savoir si une fenetre est ouverte ou fermer ?j'ai ecrit un petit script pour cela, le probléme c'est que si teste que la fenetre est ouv Switcher d'1 win à l'autre en conservant les var.. [ par Ced. ] 'luje souhaite switcher d'une fenetre, a l'autre (que je viens d'ouvrir a l'aide d'un window.open...), tout en conservant une variable qui me lie entr Rafraichir la fenetre "parent" [ par aurélien ] Bonjour à tous, J'ai une page en html/php a partir de laquelle, en cliquant sur un bouton, j'ouvre un popup, et j'aimerais que lorsque je ferme ce pop Comment vérifier la taille de ma fenetre... [ par Papouillebe ] Voila mon probleme vientdu fait que je ne peux pas récupérer la largeur et la hauteur de la fenetre ('window' ou 'document' si qlq 'un ou qlq'une a un Comment cacher l'url dans une fenetre de propriétés ? [ par =ShAkUrAs= ] Je souhaite mettre des liens pour télécharger des fichiers à partir de mon site, seulement ces liens sont de la forme ftp://login:motdepasse@serveur/f propriétés d'une fenetre [ par peguman ] est-il possible de supprimer les boutons réduire, restaurer et supprimer d'une fenetre lors de son affichage? Window.focus !... [ par AgentSmith ] 1er problême :Je n'arrive pas à cree la fonction qui me permet de garder une fenetre au premier plan.En revenat sur la fenetre parent la fenetre pop-u Faire apparaitre une fenetre type Alert [ par jcharles ] Voici mon code actuel&lt;SCRIPT language=Javascript&gt;alert ('coucou les amis')&lt;/SCRIPT&gt;&lt;%response.redirect("default.asp")%&gt;le probleme c rafraichir une fenetre d'appelle d'un pop up [ par Arnaud ] Bonjour,J'ai une page en html/php a partir de laquelle, en cliquant sur un bouton, j'ouvre un popup, et j'aimerais que lorsque je ferme ce popup, la p fenermer une fenetre [ par SoniqExnihilo ] Soniq ExnihiloY as t'il un moyen de fermer une fenetre qui ne soit pas une fenetre fille ? je m'expliqueje cherche a faire une page qui se charge, qui


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,030 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales