JavaScript & HTML5 - Brave New World

117
JavaScript & HTML5 Brave New World

Transcript of JavaScript & HTML5 - Brave New World

Page 1: JavaScript & HTML5 - Brave New World

JavaScript & HTML5Brave New World

Page 2: JavaScript & HTML5 - Brave New World
Page 3: JavaScript & HTML5 - Brave New World

“O wonder!

How many goodly creatures are there here! How beauteous mankind is! O brave new world! That has such people in't!”

- Shakespeare’s The Tempest

Page 4: JavaScript & HTML5 - Brave New World
Page 5: JavaScript & HTML5 - Brave New World
Page 6: JavaScript & HTML5 - Brave New World
Page 7: JavaScript & HTML5 - Brave New World
Page 8: JavaScript & HTML5 - Brave New World
Page 9: JavaScript & HTML5 - Brave New World
Page 10: JavaScript & HTML5 - Brave New World
Page 11: JavaScript & HTML5 - Brave New World

JavaScript

Page 12: JavaScript & HTML5 - Brave New World
Page 13: JavaScript & HTML5 - Brave New World
Page 14: JavaScript & HTML5 - Brave New World
Page 15: JavaScript & HTML5 - Brave New World
Page 16: JavaScript & HTML5 - Brave New World
Page 17: JavaScript & HTML5 - Brave New World
Page 21: JavaScript & HTML5 - Brave New World
Page 22: JavaScript & HTML5 - Brave New World
Page 23: JavaScript & HTML5 - Brave New World
Page 24: JavaScript & HTML5 - Brave New World
Page 25: JavaScript & HTML5 - Brave New World
Page 26: JavaScript & HTML5 - Brave New World
Page 27: JavaScript & HTML5 - Brave New World

// Variable declarationvar firstName = "Forrest";

// Function declarationfunction party () { return "Stupid is as stupid does";}

Page 28: JavaScript & HTML5 - Brave New World

// If statementif (badGrades) { return "Mom sleeps with teacher";}

// Switch statementvar age = 10, lifeState;switch (age) { case 10: lifeState = "Young"; break; case 60: lifeState = "Old"; break; }

Page 29: JavaScript & HTML5 - Brave New World

// Shorthand assignmentfunction (boxOfChocolates) { var life = boxOfChocolates || "Snickers bar";}

// Ternary operators(looking)? "I gotta find Bubba!" : "It's ok";

Page 30: JavaScript & HTML5 - Brave New World
Page 31: JavaScript & HTML5 - Brave New World

“Coercion is the practice of forcing another party to behave in an involuntary manner”

- Wikipedia

Page 32: JavaScript & HTML5 - Brave New World

// Assignmentvar happy = true;

// Equalityif (7 == "7") { // true}

// Identityif (7 === "7") { // false}

Page 33: JavaScript & HTML5 - Brave New World

// Assignmentvar happy = true;

// Equalityif (7 == "7") { // true}

// Identityif (7 === "7") { // false}

Type coercio

n

Page 34: JavaScript & HTML5 - Brave New World

// Type coercionvar sum = "5" + 6 + 7; // 567

Page 35: JavaScript & HTML5 - Brave New World

// Prevent type coercionvar sum = parseInt("5", 10) + 6 + 7; // 18

Page 36: JavaScript & HTML5 - Brave New World
Page 37: JavaScript & HTML5 - Brave New World

// Various "false" valuesvar nullVal = null;var undefinedVal = undefined;var zeroVal = 0;var falseVal = false;var emptyString = "";

// All would equal false in an if-clauseif (emptyString) { // Would never go in here}

Page 38: JavaScript & HTML5 - Brave New World
Page 39: JavaScript & HTML5 - Brave New World

// Self-invoking functions(function () { var investment = "Lieutenant Dan got me invested in some kind of fruit company.";})();

Page 40: JavaScript & HTML5 - Brave New World
Page 41: JavaScript & HTML5 - Brave New World

// Scope - global or local

// Globalvar quote = "I had run for 3 years, 2 months, 14 days, and 16 hours."

function () { // Local var pantherParty = "I'm sorry I had to fight in the middle of your Black Panther party."; // Global question = "And so, you just ran?";}

Page 42: JavaScript & HTML5 - Brave New World

// Globalfunction meetingJFK () { var JFKQuestion = "Congratulations, how do you feel?"; // Local function forrestReply () { return "I gotta pee."; } return forrestReply();}

meetingJFK(); // I gotta peeforrestReply(); // Error: not accessible

Page 43: JavaScript & HTML5 - Brave New World
Page 44: JavaScript & HTML5 - Brave New World

// Controlling scopefunction whoAmI () { return this.nodeName;}

whoAmI(); // undefinedwhoAmI.call(document, "Hello"); // #documentwhoAmI.apply(document.body, ["Hello", "Greetings?"]); // BODY

Page 45: JavaScript & HTML5 - Brave New World
Page 46: JavaScript & HTML5 - Brave New World

// Using argumentsfunction friends (friend1, friend2) { return friend1 + " & " + friend2;}

// Lieutenant Dan & Bubbafriends("Lieutenant Dan", "Bubba");

// Lieutenant Dan & undefinedfriends("Lieutenant Dan");

Page 47: JavaScript & HTML5 - Brave New World

// Using the arguments collectionfunction friends () { var allFriends = []; for (var i=0, il=arguments.length; i<il; i++) { allFriends.push(arguments[i]); }; return allFriends.join(" & ");}

// Lieutenant Dan & Bubbafriends("Lieutenant Dan", "Bubba");

// Lieutenant Danfriends("Lieutenant Dan");

Page 48: JavaScript & HTML5 - Brave New World
Page 49: JavaScript & HTML5 - Brave New World

// Extending core JavaScript objectsif (typeof Array.prototype.push === "undefined") { Array.prototype.push = function () { for (var i=0, il=arguments.length; i<il; i++) { this[this.length] = arguments[i]; }; return this; }}

var locations = ["Vietnam"];locations.push("China", "White House");// locations = ["Vietnam", "China", "White House"];

Page 50: JavaScript & HTML5 - Brave New World
Page 51: JavaScript & HTML5 - Brave New World

// closuresfunction happens (what) { return function (verb) { return what + " " + verb; }}

var action = happens("Shit");

action("happens"); // Shit happens

Page 52: JavaScript & HTML5 - Brave New World
Page 53: JavaScript & HTML5 - Brave New World

// closuresfunction happens (what) { return function (verb) { return what + " " + verb; }}

var action = happens("Shit");

// Breaking it downvar action = function (verb) { return "Shit" + " " + verb;};

Page 54: JavaScript & HTML5 - Brave New World

// closuresfunction happens (what) { return function (verb) { return what + " " + verb; }}

var action = happens("Shit");

// Breaking it downvar action = function (verb) { return "Shit" + " " + verb;};

Page 55: JavaScript & HTML5 - Brave New World

var link;for (var i=0; i<3; i++) { link = document.createElement("a"); link.innerHTML = "Link " + i; link.onclick = function () { alert("I am link " + i); }; document.body.appendChild(link);};

Page 56: JavaScript & HTML5 - Brave New World

var link;for (var i=0; i<3; i++) { link = document.createElement("a"); link.innerHTML = "Link " + i; link.onclick = function (index) { return function () { alert("I am link " + index); }; }(i); document.body.appendChild(link);};

Page 57: JavaScript & HTML5 - Brave New World

What is HTML5?

Page 58: JavaScript & HTML5 - Brave New World
Page 59: JavaScript & HTML5 - Brave New World
Page 60: JavaScript & HTML5 - Brave New World
Page 61: JavaScript & HTML5 - Brave New World

Video

Page 62: JavaScript & HTML5 - Brave New World

<video src="swedish-flag.ogv"></video>

Page 63: JavaScript & HTML5 - Brave New World

<video src="swedish-flag.ogv" controls width="320" height="240">

</video>

Page 64: JavaScript & HTML5 - Brave New World

<video controls><source src="swedish-flag.mp4"><source src="swedish-flag.ogv"><p>Sorry, your web browser doesn't support the video element.

</p></video>

Page 65: JavaScript & HTML5 - Brave New World
Page 66: JavaScript & HTML5 - Brave New World

<video controls> <source src="http://robertnyman.com/video/swedish-flag.mp4"> <source src="http://robertnyman.com/video/swedish-flag.ogv"> <object width="425" height="340" type="application/x-shockwave-flash" data="http://pics.robertnyman.com/ria/ShizVidz-2010012201.swf"> <param name="movie" value="http://pics.robertnyman.com/ria/ShizVidz-2010012201.swf"> <param name="allowFullScreen" value="true"> <param name="flashVars" value="s=ZT0xJmk9MzE5NjcyNDUwJms9UUVOdUomYT01MjU0ODc5X21uWFdIJnU9cm9iZXJ0bnltYW4="> </object> <p>Sorry, your web browser doesn't support, well, anything...</p></video>

Page 67: JavaScript & HTML5 - Brave New World

var video = document.getElementById("my-video");

// Play/pause button if (video.paused || video.ended) { video.play(); } else { video.pause(); }

Page 68: JavaScript & HTML5 - Brave New World

// Methods video.canPlayType(); video.load(); video.pause(); video.play();

Page 69: JavaScript & HTML5 - Brave New World

// Properties video.paused; video.muted; video.autobuffer; video.autoplay; video.buffered; (Unimplemented) video.bufferedBytes; (Unimplemented) video.bufferingRate; (Unimplemented) video.bufferingThrottled; (Unimplemented) video.controls; video.currentSrc; video.currentTime; video.defaultPlaybackRate; video.duration; video.ended; video.error; video.muted; video.networkState; video.paused; video.playbackRate; video.readyState; video.seeking; video.src; video.totalBytes; video.volume;

Page 70: JavaScript & HTML5 - Brave New World

// Events video.abort; video.canplay; video.canplaythrough; video.canshowcurrentframe; video.dataunavailable; video.durationchange; video.emptied; video.empty; video.ended; video.error; video.loadedfirstframe; video.loadedmetadata; video.loadstart; video.pause; video.play; video.progress; (lengthComputable, loaded, total) video.ratechange; video.seeked; video.seeking; video.suspend; video.timeupdate; video.volumechange;

Page 73: JavaScript & HTML5 - Brave New World
Page 74: JavaScript & HTML5 - Brave New World
Page 75: JavaScript & HTML5 - Brave New World

// Checking codec support if (video.canPlayType('video/ogg; codecs="theora, vorbis"')) { video.play(); } else { alert("Evil browser with only licensed codec support!"); }

Page 76: JavaScript & HTML5 - Brave New World

Canvas

Page 77: JavaScript & HTML5 - Brave New World

<canvas id="my-canvas" width="200" height="200"> I am canvas</canvas>

Page 78: JavaScript & HTML5 - Brave New World

var canvas = document.getElementById("my-canvas"), context = canvas.getContext("2d");

Page 79: JavaScript & HTML5 - Brave New World

var canvas = document.getElementById("my-canvas"), context = canvas.getContext("2d");

context.fillStyle = "#ffffa2";context.fillRect(0, 0, 100, 100);

Page 80: JavaScript & HTML5 - Brave New World
Page 81: JavaScript & HTML5 - Brave New World

var canvas = document.getElementById("my-canvas"), context = canvas.getContext("2d");

context.fillStyle = "#ffffa2";

// Adding shadows and tiltcontext.shadowOffsetX = 10;context.shadowOffsetY = 10;context.shadowBlur = 100;context.shadowColor = "#000000";context.rotate(0.05);

context.fillRect(10, 10, 100, 100);

Page 82: JavaScript & HTML5 - Brave New World
Page 83: JavaScript & HTML5 - Brave New World

var canvas = document.getElementById("my-canvas"), context = canvas.getContext("2d");

// Adding shadows and tiltcontext.shadowOffsetX = 10;context.shadowOffsetY = 10;context.shadowBlur = 100;context.shadowColor = "#000000";context.rotate(0.05);

// Adding a little gradientvar gradient = context.createRadialGradient(90, 63, 10, 90, 63, 50);gradient.addColorStop(0, "#ff0000");gradient.addColorStop(1, "#000000");context.fillStyle = gradient;

context.fillRect(10, 10, 100, 100);

Page 84: JavaScript & HTML5 - Brave New World
Page 85: JavaScript & HTML5 - Brave New World

HTML5 Canvas for Internet Explorer

-

explorercanvas

Page 86: JavaScript & HTML5 - Brave New World

Geolocation

Page 87: JavaScript & HTML5 - Brave New World

if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function (position) { alert(position.coords.latitude + ", " + position.coords.longitude); }); }

Page 88: JavaScript & HTML5 - Brave New World
Page 89: JavaScript & HTML5 - Brave New World
Page 90: JavaScript & HTML5 - Brave New World

Web Storage

Page 91: JavaScript & HTML5 - Brave New World
Page 92: JavaScript & HTML5 - Brave New World
Page 93: JavaScript & HTML5 - Brave New World

// sessionStorage sessionStorage["name"] = "Robert"; alert(sessionStorage["name"]); // Robert

Page 94: JavaScript & HTML5 - Brave New World

// localStorage localStorage.setItem("origin", "Sweden"); alert(localStorage.origin); // Sweden

Page 95: JavaScript & HTML5 - Brave New World

// Using JSON var info = { "language" : "Bulgarian", "location" : "Veliko Tarnovo" }; // Save as string localStorage.setItem("info", JSON.stringify(info)); // Load as JSON object alert(JSON.parse(localStorage.info));

Page 96: JavaScript & HTML5 - Brave New World

postMessage

Page 97: JavaScript & HTML5 - Brave New World

// Use postMessage on a window to send a message var iframeWin = document.getElementById("da-iframe").contentWindow; iframeWin.postMessage("Love you!", "http://robertnyman.com");

Page 98: JavaScript & HTML5 - Brave New World

// Handle message function displayMessage (evt) { var message; if (evt.origin !== "http://robertnyman.com") { message = "You are not worthy"; } else { message = "I got " + evt.data + " from " + evt.origin; } document.getElementById("received-message").innerHTML = message; }

// Using onmessage to receive message if (window.addEventListener) { // For standards-compliant web browsers window.addEventListener("message", displayMessage, false); } else { window.attachEvent("onmessage", displayMessage); }

Page 99: JavaScript & HTML5 - Brave New World

Web Workers

Page 100: JavaScript & HTML5 - Brave New World

var worker = new Worker("worker.js");

Page 101: JavaScript & HTML5 - Brave New World

// Main page code var worker = new Worker("worker.js"); // postMessage worker.postMessage(5);

// Receive message back from Worker worker.onmessage = function (evt) { document.getElementById("worker-results").innerHTML = evt.data; };

// Error handling worker.onerror = function (evt) { document.getElementById("worker-results").innerHTML = "An error occurred"; };

Page 102: JavaScript & HTML5 - Brave New World

// Web Worker code onmessage = function (evt) { for (var i=evt.data, il=1000001; i<il; i++) { postMessage(i); }; };

Page 103: JavaScript & HTML5 - Brave New World

Offline Web Applications

Page 104: JavaScript & HTML5 - Brave New World

if (window.addEventListener) { /* Works well in Firefox and Opera with the Work Offline option in the File menu. Pulling the ethernet cable doesn't seem to trigger it */ window.addEventListener("online", isOnline, false); window.addEventListener("offline", isOffline, false);}else { /* Works in IE with the Work Offline option in the File menu and pulling the ethernet cable */ document.body.ononline = isOnline; document.body.onoffline = isOffline;}

Page 105: JavaScript & HTML5 - Brave New World

// Poll the navigator.onLine propertysetInterval(function () { console.log(navigator.onLine);}, 1000);

Page 106: JavaScript & HTML5 - Brave New World

<!DOCTYPE html><html manifest="offline.manifest"><head>...

Page 107: JavaScript & HTML5 - Brave New World

CACHE MANIFEST

# VERSION 10

CACHE:offline.htmlbase.css

FALLBACK:online.css offline.css

NETWORK:/live-updates

Page 108: JavaScript & HTML5 - Brave New World

HistoryDrag & drop

contentEditable

File API

Page 109: JavaScript & HTML5 - Brave New World
Page 110: JavaScript & HTML5 - Brave New World
Page 111: JavaScript & HTML5 - Brave New World
Page 112: JavaScript & HTML5 - Brave New World
Page 113: JavaScript & HTML5 - Brave New World
Page 114: JavaScript & HTML5 - Brave New World
Page 115: JavaScript & HTML5 - Brave New World
Page 116: JavaScript & HTML5 - Brave New World

Robert Nymanhttp://robertnyman.com/speaking/http://robertnyman.com/html5/

Twitter: @robertnyman

Pictures:

Volcano: http://www.boston.com/bigpicture/2010/04/more_from_eyjafjallajokull.htmlLaptop smurf: http://www.schleich-s.de/cms_schleich/cms_bilder/detail/40263.jpgComputer smurf: http://www.schleich-s.com/en/wishlist/index.html?PHPSESSID=cwjpavodSwedish flag: http://www.olssonfoto.se/JAlbum/SGP%202008%20Ullevi/slides/Svenska%20flaggan.htmlEuro Coin: http://accidentaldong.blogspot.com/2009/10/euro-uh-oh.htmlSmurfette in car: http://www.schleich-s.com/cms_schleich/cms_bilder/detail/40265.jpgBaby smurf one: http://images.esellerpro.com/13/I/106/33/baby%20A.jpgBaby smurf two: http://www.arbgames.com.au/images/T/Smurf%20Baby%20With%20Teddy.jpgMost popular language: http://odetocode.com/Blogs/scott/archive/2009/03/18/signs-that-your-javascript-skills-need-updating.aspxSunrise: http://www.manywallpapers.com/space-wallpapers/earth/sunrise-from-space.htmlAstronaut: http://martianchronicles.wordpress.com/2009/01/23/carnival-of-space-87/Netscape 2: http://blog.explorelearning.com/2005/12/index.htmlInternet Explorer 3: http://www.guidebookgallery.org/screenshots/browserGandalf: http://web.mit.edu/kayla/Public/Backgrounds/LOTR%20Gandalf%204.JPGNow: http://www.geekologie.com/2007/07/15-week/Axe: http://bestgamewallpapers.com/a3-the-age-of-sovereign/axeTime: http://www.mindhacks.com/blog/seeing/index.htmlMoney: http://www.mediabistro.com/unbeige/ideas/Happy Ape: http://thesituationist.wordpress.com/2007/06/14/High speed train: http://www.freefoto.com/preview/23-22-1?ffid=23-22-1Sunspider results: http://blogs.msdn.com/ie/archive/2010/03/18/the-new-javascript-engine-in-internet-explorer-9.aspxForrest Gump: http://wallpaper-s.org/36__Forrest_Gump,_1994,_Tom_Hanks,_Robin_Wright_Penn.htmHillary Clinton & Soldier: http://confederateyankee.mu.nu/archives/154032.phpDog (Cat): http://www.cartoonstock.com/directory/f/false_identity.aspPlay with yourself: http://www.justwhatshesaid.com/?p=965Tiger Woods: http://blogs.bigadda.com/pal4868546/2010/01/Dirty water: http://www.freefoto.com/preview/13-08-52?ffid=13-08-52Extensible table: http://www.amishshowroom.com/index.php?main_page=index&cPath=40_64

Overloading: http://theshadowhive.blogspot.com/2010/04/mutating-chaos-gene.htmlClosure movie: http://www.monstersandcritics.com/dvd/news/article_1332892.php/Golden_Globe_winner_Gillian_Anderson_stars_in_ClosureSteve Ballmer: http://www.businessinsider.com/microsoft-completely-rebooted-its-mobile-strategy-yesterday-heres-what-you-missed-2010-2What is HTML5: http://www.thedvshow.com/mini-guide-html-5-for-video-producers/Semantics: http://www.cs.cmu.edu/~tom7/csnotes/fall02/semantics.gifAPIs: http://lonewolflibrarian.wordpress.com/2009/09/01/library-apis-09-01-09/Progressive enhancement: http://www.flickr.com/photos/cole007/4187641210/Video: http://www.roirevolution.com/blog/2009/05/make_sure_your_excluded_placements_are_actually_be.htmlWaiting in line: http://www.roirevolution.com/blog/2009/05/make_sure_your_excluded_placements_are_actually_be.htmlCanvas: http://www.brianbatson.com/ablankcanvas/giftlist.htmlGeolocation: http://www.datadial.net/blog/index.php/2008/09/22/the-definitive-guide-to-website-geo-location/Storage fail: http://failblog.org/2009/02/09/storage-box-fail/Cookie monster: http://open.salon.com/blog/shiral/2009/03/25/the_coveted_shiral_interview_with_kermit_and_cookie_monsterBoy giving the finger: http://www.deangoodman.com/ThingsThatSuck.htmlPostman (Costner): http://nationallampoon.com/articles/the-list-top-20-movies-about-the-end-of-the-worldWeb Workers: http://miscellanea.wellingtongrey.net/2007/06/03/this-modern-life/Dude offline: http://blogs.phoenixnewtimes.com/uponsun/2008/06/you_asked_for_it_dude_offline.phpCute dog: http://www.emmitsburg.net/humor/daily_additions/2007/mar/30.htmFirefox: http://www.flickr.com/photos/tedion/3966234643/Google Chrome: http://www.flickr.com/photos/tedion/3966233919/Safari: http://www.rapidshareindex.com/Apple-Safari-v4-0-3-Portable_284132.htmlOpera: http://www.geek.com/wp-content/uploads/2009/11/Opera_512x512.pngBill Gates: http://punditkitchen.com/2009/04/14/political-pictures-bill-gates-failure-windows/Winning IE: http://cybernetnews.com/april-browser-stats-safari-triples-its-windows-market-share/Internet Explorer 9: http://www.redmondpie.com/internet-explorer-9-to-be-announced-at-pdc-9140118/Mila & Macaulay: http://uk.eonline.com/uberblog/b61889_mila_macaulay_home_alone.htmlHearts: http://www.funonthenet.in/content/view/395/31/

Page 117: JavaScript & HTML5 - Brave New World