1. La méthode measure
Elle permet de récupérer une valeur de propriété css calculée exprimée en pixels et nous la renvoie en nombre, ce qui est bien pratique pour faire des calculs : plus besoin de supprimer px, de tester le isNaN et de faire un parse ; prototype s'occupe de tout
| Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<div id="superparent" class="parent">
<div id="parent" class="parent">
<div id="unElement" style="border-style:solid;border-color:black;border-width:1px 2px 3px 0;padding:2px 4px 1px 0;margin:0 5px 0 5px;width:100px;height:80px;">
</div>
</div>
</div>
<script type="text/javascript">
// Avant :
alert($("unElement").getStyle("border-bottom-width")); // --> 3px
// Avec prototype 1.7
alert($("unElement").measure("border-bottom")); // --> 3
</script> |
La méthode measure est sympathique, mais l'utilité de récupérer la largeur de la bordure de gauche est assez limitée... le besoin le plus évident de mesurer ainsi des propriétés à lieu quand on cherche à calculer l'espace occupé par un élément. Mais dans ce cas, on se voit mal écrire :
| Code : | Sélectionner tout |
1 2 3 4 |
var elem = $("unElement");
var widthTotaleOccupee = elem.measure("margin-left") + elem.measure("border-left") + elem.measure("padding-left") + elem.measure("width") + elem.measure("padding-right") + elem.measure("border-right") + elem.measure("margin-left");
alert(widthTotaleOccupee); |
margin-box-width nous donnera donc marges + bordures + padding + width;
| Code : | Sélectionner tout |
1 2 3 4 |
var elem = $("unElement");
var widthTotaleOccupee = elem.measure("margin-box-width");
alert(widthTotaleOccupee); |
- border-box-width et border-box-height qui donneront la taille de la boite jusqu'aux bordures (sans les marges donc)
- et vous l'aviez deviné,padding-box-width et padding-box-height la taille de la boite avec le padding(sans les marges, ni les bordures).
Voilà qui va simplifier et rendre plus lisible pas mal de code.
A noter que dans le cas de marges négatives, 0 est renvoyé. On sent bien ici que l'idée est de calculer l'espace occupé par un élément.
Comme tout cela ne suffisait pas, un nouvel objet a fait son apparition pour englober toutes ces notions :
2. Element.Layout.
Plutot que de mesurer à chaque fois, on peut demander le layout d'un élément, puis piocher au fur et à mesure de nos besoins dans ces propriétés:
| Code : | Sélectionner tout |
1 2 3 4 |
var elem = $("unElement");
var elemLayout = elem.getLayout();
alert(elemLayout.get("margin-box-width")); |
Il existe également une méthode getCSS sur Element.Layout qui permettrai de récupérer le layout en une chaîne css. Je mets au conditionnel car je n'ai pas réussi à la faire fonctionner
3. Gestion des événements
La gestion des événements a été encore simplifiée. Il existe maintenant une classe Event.Handler qui permet de créer des Handlers sur des événements ex:
| Code : | Sélectionner tout |
1 2 3 4 5 |
var elem = $("unElement");
var handler = elem.on("click", function(e) {
alert(element.element().identify() + " a été cliqué");
}) |
| Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 |
var elem = $("unElement");
var clickObserver = function(e) {
alert(e.element().identify() + " a été cliqué");
}
elem.observe("click", clickObserver);
// .. plein de code trop bien
elem.stopObserving("click", clickObserver); |
| Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 |
var elem = $("unElement");
var clickHandler = elem.on("click", function(e) {
alert(e.element().identify() + " a été cliqué");
});
// .. plein de code trop bien
clickHandler.stop();
// ... encore plus dément
clickHandler.start(); |
, en tout cas c'est sur que c'est une RC... | Code : | Sélectionner tout |
1 2 3 4 5 |
var elem = $("unElement");
var clickHandler = elem.on("click", ".parent", function(e, element) {
alert(e.element().identify() + " a été cliqué, " + element.identify() + " est passé en parametre aussi !");
}); |
| Code : | Sélectionner tout |
1 2 3 |
var handler = new Event.Handler(elem, "click", function() {alert(e.element().identify() + " a été clické")});
handler.start(); |
Vous avez lu gratuitement 1 955 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.