begin process at 2008 08 30 00:36:00
1 233 969 membres
8 nouveaux aujourd'hui
14 294 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DONNER EN INTERACTIF DE NOUVELLES DIMENSIONS AUX ELÉMENTS [ DINDE ]


Information sur la source

Catégorie :Effets Classé sous : dimensions, éléments, width, height, souris Niveau : Débutant Date de création : 01/09/2007 Date de mise à jour : 04/09/2007 05:32:38 Vu / téléchargé: 3 885 / 340

Note :
Aucune note

Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note


Description

comme dit dans le titre, permet de fixer avec
la souris les tailles d'éléments dans une page
( div, span, images, select... )

Conclusion

il faudrait "affiner" l'application des nouvelles
tailles, ça va un peu trop vite parfois.
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

03 septembre 2007 05:47:50 :
quelques explications pour utiliser.
04 septembre 2007 05:32:38 :
suite aux remarques de Ralecul : ne pas détruire les fonctions éventuelles qui existeraient sur les éléments gérés.
  • signaler à un administrateur
    Commentaire de ralecul le 01/09/2007 19:25:07

    Salut,

    Ton problème pour les span n'en est pas un : il s'agit encore d'un bug (fonctionnalités? :-) de IE...
    La balise span est utilisée pour créer des propriétes css à un endroit précis, un passage en rouge dans un paragraphe par exemple.
    Le dimensionnement d'un span n'a donc aucun sens, mais IE ne respecte rien comme toujours et applique tout de même ton style...
    [Je sais que tu es un pro IE donc c'est pour celà que j'y vais avec des pincettes...]

    Sinon pour ce qui est du code je l'ai remanié à ma sauce OO (avec différence private/public) :

    Pour tester il suffit de remplacer :

    var f1=new DINDE(document.getElementById('d1')); // exemples d'utilisation
    var f2=new DINDE(document.getElementById('s1'));
    var f3=new DINDE(document.getElementById('i1'));
    var f4=new DINDE(document.getElementById('l1'));

    par :

    var f1 = new Resizable("d1");
    var f2 = new Resizable("s1");
    var f3 = new Resizable("i1");
    var f4 = new Resizable("l1");

    puis de rajouter ma version de ta classe dans le fichier JS :
    (les commentaires sont en option dans ma version, m'enfin ya pas 2000 lignes non plus !)

    function Resizable(id)
    {
    var _moving = false;
    var _elt    = document.getElementById(id);
    var _x      = 0;
    var _y      = 0;
    var _width  = 0;
    var _height = 0;
    var _pos;

    attachEvent();

    function attachEvent()
    {
    if (window.attachEvent)
    {
    _elt.onmousedown = press;
    _elt.onmousemove = resize;
    _elt.onmouseup   = release;
    _elt.onmouseout  = release;
    }
    else
    {
    _elt.addEventListener("mousedown", press,   false);
    _elt.addEventListener("mousemove", resize,  false);
    _elt.addEventListener("mouseup",   release, false);
    _elt.addEventListener("mouseout",  release, false);
    }
    }

    function press(e)
    {
    _width  = _elt.style.width  ? parseInt(_elt.style.width)  : _elt.offsetWidth;
    _height = _elt.style.height ? parseInt(_elt.style.height) : _elt.offsetHeight;
    _moving = true;
    _pos = getPos(e);

    return false;
    }

    function release(e)
    {
    _moving = false;
    }

    function resize(e)
    {
    if (!e)
    e = window.event;

    if (_moving)
    {
    pos = getPos(e);
    _elt.style.width  = Math.round(_width  + pos.x - _pos.x)+'px';
    _elt.style.height = Math.round(_height + pos.y - _pos.y)+'px';
    }

    return false;
    }

    function getPos(e)
    {
    var x, y;

    if (!e)
    e = window.event;

    if (e.pageX)
    {
    x = e.pageX;
    y = e.pageY;
    }
    else if (e.clientX) //IE
    {
    x = e.clientX;
    y = e.clientY;
    }

    if (e.preventDefault)
    e.preventDefault();

    return new Point(x, y);
    }

    function Point(x, y)
    {
    this.x = x;
    this.y = y;
    }
    }

    @+ Ralecul

  • signaler à un administrateur
    Commentaire de bultez le 02/09/2007 11:32:49


    merci Ralecul et pour l'explication sur le span
    et pour ta version qui est bien plus qu'intéressante.


    personnellement, je préfère néamoins

    _ ne pas obliger à mettre un ID
    appel(document.getElementById('d1')) à la place de appel('d1')
    déjà j'utilise plutôt les name [ vers php oblige ]
    donc appel(document.formulaire.elément) par exemple.

    _ utiliser directement
    ???.onmousedown=function(...) { ... } pour tous
    plutôt que
    ???.onmousedown = fonction; pour IE et
    ???.addEventListener("evenement",  fonction, false); pour les autres.

    mais chacun ses goûts... et les vaches seront bien gardées.

    Cordialement.             @+

  • signaler à un administrateur
    Commentaire de bultez le 02/09/2007 11:47:14


    >>Je sais que tu es un pro IE...
    très très loin d'être un pro ! ( surtout de IE )

    IE a des lacunes. Les autres navigateurs aussi.

    Ce qui me gène c'est la critique sytématique d'IE,
    généralemenbt totalement injustifiée.

    ############################################################
    ## ET je réagirais de la même manière pour un
    ## éreintement débile/puéril... envers FF !
    ############################################################

    il est de bon ton, politiquement correct... de chercher à
    casser tout ce qui vient de MicroSoft. c'est ridicule et
    je ne suis pas politiquement correct.

    Cordialement.    @+

  • signaler à un administrateur
    Commentaire de ralecul le 02/09/2007 23:05:19

    J'ai fait ce code un peu vite, du coup ya quelques erreurs...
    Dans la fonction resize(e) :

    if (!e)
    e = window.event;
    ->ces deux lignes sont inutiles !

    Sinon pour ce qui est la gestion des evenements il y a une grosse différence entre :
    1. ???.onmousedown=function(...) { ... }
    2. ???.addEventListener("evenement",  fonction, false);
    La méthode 1 est DOM-0 alors que la 2 est DOM-2.

    En DOM-2 on peut (entre autre) mettre deux fonctions sur un même evenement :

    objet.addEventListener("mousedown",  function1, false);
    objet.addEventListener("mousedown",  function2, false);

    Alors qu'en DOM-0 seule la dernière fonction est appliquée (écrasement)

    On peut donc améliorer la fonction attachEvent() de ma classe en remplacant :

    if (window.attachEvent)
    {
    _elt.onmousedown = press;
    _elt.onmousemove = resize;
    _elt.onmouseup   = release;
    _elt.onmouseout  = release;
    }

    par :

    if (_elt.attachEvent)
    {
    _elt.attachEvent("onmousedown", press);
    _elt.attachEvent("onmousemove", resize);
    _elt.attachEvent("onmouseup",   release);
    _elt.attachEvent("onmouseout",  release);
    }

    Pour l'appel : (document.getElementById('d1')) à la place de appel('d1')
    Je suis tout à fait d'accord, c'est juste que si j'avais posté la source à ta place j'aurais ajouté la fonction $().
    Ainsi l'appel au constructeur serait un peu moins "moche"... -> f1 = new Resizable($("d1"));

    @+ Ralecul

    PS : au fait, ma version ne comporte pas le bug du redimensionnement trop rapide.
    Et juste pour info ya pas mal d'erreurs dans ta page html (check W3C validator).
    Sinon je comprend pas comment on peut utiliser des css et en même temps des balises font et center, c'est d'un autre temps tout ça !

  • signaler à un administrateur
    Commentaire de bultez le 03/09/2007 05:07:39

    >>En DOM-2 on peut mettre deux fonctions sur un même evenement
    avec ce que tu appelles DOM-1 aussi.
    >>j'aurais ajouté la fonction $()
    normalement j'use aussi d'un racourci , mais ici le but n'était
    pas celui là. ça aurait "compliqué" inutilement. à mon avis.
    >>comment on peut utiliser des css et en même temps des
    >>balises font et center, c'est d'un autre temps tout ça
    je suis d'un autre temps, je ne m'intéresse guère à
    ce genre de subtilité, aucun inconvénient, alors...

  • signaler à un administrateur
    Commentaire de ralecul le 03/09/2007 12:40:27

    >>En DOM-2 on peut mettre deux fonctions sur un même evenement
    avec ce que tu appelles DOM-1 aussi.

    -> Un peu court comme réponse, non ?

    Je te conseille de jetter un coup d'oeil à cet article sur la gestion des evenements :
    http://css.alsacreations.com/Tutoriels-JavaScript/La-gestion-des-evenements-en-JavaScript

    Et si tu fais un essai :

    objet.onmousedown = function1;
    objet.onmousedown = function2;

    Tu verras que seule function2 est éxécutée !

    Bien sur on peut faire :
    objet.onmousedown = function(e) { function1(e); function2(e); }
    Mais ce cas de figure n'est possible que si tu "controles" les deux scripts.
    Si tu utilises sur la même page un script de correction de :hover de IE6 et ton script de redimensionnement il peut y avoir un problème.
    En effet, si tu appliques ces deux scripts sur le même élément alors (en DOM-0) seul le dernier appliqué sera pris en compte.
    J'espère avoir été plus clair sur la différence entre le DOM level 0 et DOM level 2.


    Pour ce qui est des balises font, je vais te proposer une solution (plus constructif comme remarque) :

    <h1>
    <span class="big">D</span>onner en
    <span class="big">I</span>nteractif de
    <span class="big">N</span>ouvelles
    <span class="big">D</span>imensions aux
    <span class="big">E</span>lements
    </h1>

    Reste plus qu'à faire un joli css avec ça !

    @+ Ralecul

  • signaler à un administrateur
    Commentaire de bultez le 04/09/2007 05:04:28

    je viens de percuter...
    tu tentais de me dire :
    si, sur les évènements des éléments gérés par ce script,
    des function existent déjà, celui-ci va les écraser.
    et... tu as raison.
    que pour traiter ça "normalement", il faudrait utiliser
    attachEvent et/ou  addEventListener
    et oui.
    je vais d'ailleurs faire des modifs dans ce sens
    dès que possible.
    @+

  • signaler à un administrateur
    Commentaire de ralecul le 05/09/2007 18:39:06

    Salut,

    Il reste encore deux petits "bug" :

    ->Le test avec la variable IE est une mauvaise idée.

    Il vaut mieux faire :

    if (quoi.addEventListener)
    //code pour les navigateurs respectant w3c
    else if (quoi.attachEvent)
    //code pour IE

    Ainsi si IE se décide un jour à implémenter les méthodes DOM-2 et plus ses méthodes propriétaires le script fonctionnera encore sous IE.

    (à appliquer également pour les autres trucs propriétaires event, + position souris, pour les solutions voir le code de ma version)

    ->Bug du dimensionnement un peu rapide :

    Il faut récupérer width et height lors du click (appel à la fonction Appui)
    Et ensuite dans la fonction Taille il faut remplacer :

    element.style.width= parseInt(element.style.width) +hor-x; // nouvelle largeur
    element.style.height=parseInt(element.style.height)+ver-y

    par

    element.style.width  = parseInt(width)  + hor - x; // nouvelle largeur
    element.style.height = parseInt(height) + ver - y

    avec width et height des variables menbres de DINDE mises à jour lors de l'appel à Appui (là encore, solution dans le code de ma version).

    Ralecul

  • signaler à un administrateur
    Commentaire de el_teedee le 18/09/2007 09:32:33

    Salut,

    et si tu utilises l'excellent Prototype, tu fais :

    Event.observe(element, eventName, handler[, useCapture = false])

    @see : http://www.prototypejs.org/api/event/observe

    Ce qui est beaucoup plus portable et moins contraignant que de faire le test soi meme
    :)

  • signaler à un administrateur
    Commentaire de bultez le 18/09/2007 09:51:56

    certes... mais dans ce cas pourquoi pas
    un "générateur d'applications" quelconque ?
    ( je ne vais pas en citer, ils sont légions )
    ce sera encore beaucoup plus simple.
    @+

  • signaler à un administrateur
    Commentaire de bultez le 18/09/2007 10:21:08

    j'ajouterais pour comparer des choses comparables,
    qu'avec DINDE on utilise : new DINDE(élément)
    je dirais que c'est bien moins lourd et plus simple que
    Event.observe(element, eventName, handler[, useCapture = false])
    @+

Ajouter un commentaire

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS