JavaScript v Seznamu

ondrej.zara@firma.seznam.cz

Obsah

  1. O JavaScriptu
  2. Co je obtížné
  3. JAK
  4. Co s JAKem není obtížné
  5. Widgety

O JavaScriptu

JS v prohlížeči

Hlavní použití JS v prohlížeči

Co je obtížné

DOM

Prototypová dědičnost

Prototypová dědičnost – ukázka

var Clovek = function() {}; /* funkce je datový typ */ Clovek.prototype.mzda = 1; /* kde se vzala vlastnost prototype? */ Clovek.prototype.pracuj = function() { this.penize += this.mzda; }; var Programator = function() {}; Programator.prototype = new Clovek(); /* přepsání vlastnosti prototype */ Programator.prototype.mzda = 2; var ondra = new Programator(); ondra.pracuj();

Klíčové slovo this

var jakSeJmenujes = function() { alert(this.jmeno); } var jmeno = "Lojza"; jakSeJmenujes(); var objekt = { jmeno: "Pepa" } jakSeJmenujes.call(objekt); var Clovek = function(jmeno) { this.jmeno = jmeno; } Clovek.prototype.jakSeJmenujes = jakSeJmenujes; var jarda = new Clovek("Jarda"); jarda.jakSeJmenujes();

Scope chain / closures

Úloha: po kliknutí na každou z položek číslovaného seznamu vypsat její pořadí

var items = ul.getElementsByTagName("li"); for (var i=0; i<items.length; i++) { var item = items[i]; var poKliknuti = function() { alert(i); } item.addEventListener("click", poKliknuti, false); }

JAK

Komponenty JAKu

Co s JAKem není obtížné

JAK a DOM

/* specifikace značky, atributů a stylů */ var input = JAK.mel("input", {type:"text", value:"ahoj"}, {color:"red"}); /* CSS 1 selektor */ var odstavce = JAK.query("#id .class p"); /* souřadnice vůči levému hornímu rohu stránky */ var pos = JAK.DOM.getBoxPosition(odstavce[0]); JAK.DOM.append([rodic1, prvek1, prvek2], [rodic2, prvek3, …]);

JAK a události

var Odkaz = function(a) { this.id = JAK.Events.addListener(a, "click", this, "_click"); }; Odkaz.prototype._click = function(e, elm) { JAK.Events.cancelDef(e); alert(elm.href); JAK.Events.removeListener(this.id); }; new Odkaz(JAK.gel("id"));

JAK a třídy

var Class = JAK.ClassMaker.makeClass({ NAME: "Test class", VERSION: "1.0" }); Class.prototype.method = function(a) {}; var Interface = JAK.ClassMaker.makeInterface({ NAME: "Test interface" }); Interface.prototype.otherMethod = function() {}; var SubClass = JAK.ClassMaker.makeSingleton({ NAME: "Test subclass", EXTEND: Class, IMPLEMENT: [Interface] }); SubClass.prototype.method = function(a, b) { this.$super(a); } SubClass.getInstance().method();

JAK a vlastní události

var Sender = JAK.ClassMaker.makeClass({ NAME: "Sender", IMPLEMENT: JAK.ISignals }); Sender.prototype.send = function() { this.makeEvent("porad-se-neco-deje"); }; var Receiver = JAK.ClassMaker.makeClass({ NAME: "Receiver", IMPLEMENT: JAK.ISignals }); Receiver.prototype.$constructor = function(sender) { this.addListener("porad-se-neco-deje", "_receive", sender); }; Receiver.prototype._receive = function(e) { alert(e.type); }

JAK a AJAX

var r = new JAK.Request(JAK.Request.XML); /* možno také TEXT, JSONP, BINARY */ var odpoved = function(xmlDoc, status) { alert("HTTP/" + status); alert(xmlDoc.documentElement.nodeName); } r.setCallback(odpoved); var data = { "a": "b", "c": ["něco", "něco jiného"] }; r.send("/zpracuj.php", data);

Co všechno zvládá JAK.Request

JAK a animace

var div = JAK.mel("div"); var i = new JAK.CSSInterpolator(div, 500); i.addProperty("opacity", 1, 0); i.addProperty("width", 500, 0, "px"); i.addColorProperty("backgroundColor", "#f00", "#000"); i.start();

JAK a periodické opakování

var Metronom = function() {} Metronom.prototype.tick = function() {} var m = new Metronom(); var t = JAK.Timekeeper.getInstance(); t.addListener(m, "tick", 5); /* jednou za 100ms */ /* nějaká činnost … */ t.removeListener(m);

Widgety

Konec

Prostor pro otázky