19. New JavaScript Apis in HTML5 - Web Front-End

43
New JavaScript APIs in HTML5 Canvas, SVG, Workers Doncho Minkov Telerik Software Academy academy.telerik.com Technical Trainer http://www.minkov.it http://html5course.telerik.com

description

What a programmer must know about the new JavaScript APIs in HTML5? Telerik Software Academy: http://html5course.telerik.com The website and all video materials are in Bulgarian Table of contents: New JavaScript APIs New Selectors Canvas JavaScript API Web Workers Drag and Drop HTML5 Storage HTML DOM Extensions Event Listeners

Transcript of 19. New JavaScript Apis in HTML5 - Web Front-End

Page 1: 19.  New JavaScript Apis in HTML5 - Web Front-End

New JavaScript APIs in HTML5Canvas, SVG, Workers

Doncho Minkov

Telerik Software Academyacademy.telerik.com

Technical Trainerhttp://www.minkov.it

http://html5course.telerik.com

Page 2: 19.  New JavaScript Apis in HTML5 - Web Front-End

Table of Contents New JavaScript APIs New Selectors Canvas JavaScript API Web Workers Drag and Drop HTML5 Storage HTML DOM Extensions Event Listeners

2

Page 3: 19.  New JavaScript Apis in HTML5 - Web Front-End

New JavaScript APIsWhat a programmer must know?

Page 4: 19.  New JavaScript Apis in HTML5 - Web Front-End

New JavaScript APIs

New selectors Threading (Web Workers) UI APIs

Canvas Drag and Drop Local and Session Storage

Extension to HTML Document

4

Page 5: 19.  New JavaScript Apis in HTML5 - Web Front-End

New Selectors

Page 6: 19.  New JavaScript Apis in HTML5 - Web Front-End

New Selectors In HTML5 we can select elements by ClassName

Moreover there’s now possibility to fetch elements that match provided CSS syntax

var elements = document.getElementsByClassName('entry');

var elements = document.querySelectorAll("ul li:nth-child(odd)");

var first_td = document.querySelector("table.test > tr > td");

6

Page 7: 19.  New JavaScript Apis in HTML5 - Web Front-End

New Selectors (2) Selecting the first div met

Selecting the first item with class SomeClass

Selecting the first item with id someID

Selecting all the divs in the current container

var elements = document.querySelector("div");

var elements = document.querySelectorAll("div");

var elements = document.querySelector(".SomeClass");

var elements = document.querySelector("#someID");

7

Page 8: 19.  New JavaScript Apis in HTML5 - Web Front-End

Canvas JavaScript

APIHow to

Manipulate Canvas

Dynamically?

Page 9: 19.  New JavaScript Apis in HTML5 - Web Front-End

Canvas Canvas

Dynamic, Scriptable rendering of 2D images

Uses JavaScript to draw Resolution-dependent bitmap Can draw text as well<canvas id="ExampleCanvas" width="200" height="200"> This text is displayed if your browser does not support HTML5 Canvas. </canvas>

var example = document.getElementById('ExampleCanvas'); var context = example.getContext('2d'); context.fillStyle = "rgb(255,0,0)"; context.fillRect(30, 30, 50, 50);

9

Page 10: 19.  New JavaScript Apis in HTML5 - Web Front-End

Canvas Properties and Methods

fillStyle Sets the drawing color Default fillStyle is solid black

But you can set it to whatever you like

fillRect(x, y, width, height) Draws a rectangle Filled with the current fillStyle

10

Page 11: 19.  New JavaScript Apis in HTML5 - Web Front-End

Canvas Properties and Methods (2)

strokeStyle Sets the stroke color

strokeRect(x, y, width, height) Draws an rectangle with the

current strokeStyle strokeRect doesn’t fill in the

middle It just draws the edges

clearRect(x, y, width, height) clears the pixels in the specified rectangle

11

Page 12: 19.  New JavaScript Apis in HTML5 - Web Front-End

Canvas Paths What is a Path?

Something that is about to be drawn It is not drawn yet

context.beginPath();context.moveTo(0, 40);context.lineTo(240, 40);context.moveTo(260, 40);context.lineTo(500, 40);context.moveTo(495, 35);context.lineTo(500, 40);context.lineTo(495, 45);

12

Page 13: 19.  New JavaScript Apis in HTML5 - Web Front-End

CanvasLive Demo

Page 14: 19.  New JavaScript Apis in HTML5 - Web Front-End

Web WorkersMultithreading in JavaScript

Page 15: 19.  New JavaScript Apis in HTML5 - Web Front-End

What are Web Workers?

API for running scripts in the background Independently of any user interface

scripts Workers are expected to be long-lived Have a high start-up performance

cost and a high per-instance memory cost

Might be partially replaced by Window.setTimeout() function

15

Page 16: 19.  New JavaScript Apis in HTML5 - Web Front-End

Workers are separate JavaScript processes running in separate threads Workers execute concurrently Workers don’t block the UI Workers allow you to extract up to

the last drop of juice from a multicore CPU

Workers can be dedicated (single tab) or shared among tabs/windows

Workers will be persistent too (coming soon) They’ll keep running after the

browser has quit

What are Web Workers? (2)

16

Page 17: 19.  New JavaScript Apis in HTML5 - Web Front-End

If we call function by setTimeout, the execution of script and UI are suspended When we call function in worker, it

doesn’t affect UI and execution flow in any way

To create Worker, we put JavaScript in separate file and create new Worker instance:

We can communicate with worker using postMessage function and onmessage listener

var worker = new Worker(‘extra_work.js');

What are Web Workers? (3)

17

Page 18: 19.  New JavaScript Apis in HTML5 - Web Front-End

Messages are send to all threads in our application:

main.js:var worker = new Worker(‘extra_work.js');

worker.onmessage = function (event) { alert(event.data); };

extra_work.js://do some work; when done post message.

// some_data could be string, array, object etc.postMessage(some_data);

What are Web Workers? (4)

18

Page 19: 19.  New JavaScript Apis in HTML5 - Web Front-End

Web WorkersLive Demo

Page 20: 19.  New JavaScript Apis in HTML5 - Web Front-End

Drag and DropDrag and Drop

Page 21: 19.  New JavaScript Apis in HTML5 - Web Front-End

Drag and Drop To make an element draggable

Give the element a draggable attribute

Set an event listener for dragstart that stores the data

being dragged

The event handler typically needs to check that the selection being dragged is not a text

Store data into the DataTransfer object

Set the allowed effects

Copy, move, link, or some combination

21

Page 22: 19.  New JavaScript Apis in HTML5 - Web Front-End

Simple Drag and Drop.html

Draggable Example<h1>Some things to drag</h1> <ul ondragstart="dragStart(event)"> <li draggable="true">Pesho</li> <li draggable="true">Gosho</li> <li draggable="true">Penka</li> <li draggable="true">Mariika</li> </ul><script> var safePlace = 'text/safaPlace'; function dragStart(event) { event.dataTransfer.setData(safePlace, event.target.dataset.value); event.dataTransfer.effectAllowed = 'move'; }</script>

22

Page 23: 19.  New JavaScript Apis in HTML5 - Web Front-End

Drop Event To accept a drop

The drop target has to listen to the ondrop event

Two more events should be hooked too The dragenter event

To report whether the drop target is to accept

The dragover event To specify what is to be shown to

the user23

Page 24: 19.  New JavaScript Apis in HTML5 - Web Front-End

Drag And DropLive Demo

Page 25: 19.  New JavaScript Apis in HTML5 - Web Front-End

HTML5 Storage

Local and Session

Page 26: 19.  New JavaScript Apis in HTML5 - Web Front-End

Local Storage Local Storage

Store data locally Similar to cookies, but can store

much larger amount of data Same Origin Restrictions localStorage.setItem(key, value) localStorage.getItem(key)

Local and Session Storages can only store strings!

26

Page 27: 19.  New JavaScript Apis in HTML5 - Web Front-End

Local Storage Example

function saveState(text){ localStorage["text"] = text;}function restoreState(){ return localStorage["text"];}

Local Storage

function saveState(text){ localStorage.setValue("text", text);}function restoreState(){ return localStorage.getValue("text");}

Same as

27

Page 28: 19.  New JavaScript Apis in HTML5 - Web Front-End

Session Storage Session Storage

Similar to Local Storage

Lasts as long as browser is open

Opening page in new window or tab starts new sessions

Great for sensitive data (e.g. banking sessions)

28

Page 29: 19.  New JavaScript Apis in HTML5 - Web Front-End

Session Storage Example

function incrementLoads() { if (!sessionStorage.loadCounter) { sessionStorage["loadCounter"] = 0; } var currentCount = parseInt(sessionStorage["loadCounter"]); currentCount++; sessionStorage["loadCounter"] = currentCount; document.getElementById("countDiv").innerHTML = currentCount;}

Session Storage

29

Page 30: 19.  New JavaScript Apis in HTML5 - Web Front-End

HTML5 StoragesLive Demo

Page 31: 19.  New JavaScript Apis in HTML5 - Web Front-End

HTML DOM Extensions

31

Page 32: 19.  New JavaScript Apis in HTML5 - Web Front-End

HTML DOM Extensions HTML DOM Extensions:

getElementsByClassName() innerHTML hasFocus getSelection()

32

Page 33: 19.  New JavaScript Apis in HTML5 - Web Front-End

HTML DOM Extensions

Live Demo

Page 34: 19.  New JavaScript Apis in HTML5 - Web Front-End

Event ListenersHow to Listen for

Something to Happen?

Page 35: 19.  New JavaScript Apis in HTML5 - Web Front-End

Event Listeners Event Listener is an event that tracks for something to happen i.e. a key to be pressed, a mouse

click, etc. Available in JavaScript

addEventListener() registers a single event listener on a single target

The event target may be A single node in a document

The document itself

A window 35

Page 36: 19.  New JavaScript Apis in HTML5 - Web Front-End

Registering Event Listener Example

Adding a click event listener to a div elementdocument.GetElementById("someElement"). addEventListener("click", function (e) { alert("element clicked"); }, false);

36

Page 37: 19.  New JavaScript Apis in HTML5 - Web Front-End

Event ListenersLive Demo

Page 38: 19.  New JavaScript Apis in HTML5 - Web Front-End

форум програмиране, форум уеб дизайнкурсове и уроци по програмиране, уеб дизайн – безплатно

програмиране за деца – безплатни курсове и уроцибезплатен SEO курс - оптимизация за търсачки

уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop

уроци по програмиране и уеб дизайн за ученициASP.NET MVC курс – HTML, SQL, C#, .NET, ASP.NET MVC

безплатен курс "Разработка на софтуер в cloud среда"

BG Coder - онлайн състезателна система - online judge

курсове и уроци по програмиране, книги – безплатно от Наков

безплатен курс "Качествен програмен код"

алго академия – състезателно програмиране, състезания

ASP.NET курс - уеб програмиране, бази данни, C#, .NET, ASP.NETкурсове и уроци по програмиране – Телерик академия

курс мобилни приложения с iPhone, Android, WP7, PhoneGap

free C# book, безплатна книга C#, книга Java, книга C#Дончо Минков - сайт за програмиранеНиколай Костов - блог за програмиранеC# курс, програмиране, безплатно

?

? ? ??

?? ?

?

?

?

??

?

?

? ?

Questions?

?

New JavaScript APIs in HTML5

http://academy.telerik.com

Page 39: 19.  New JavaScript Apis in HTML5 - Web Front-End

Exercises

1. Write wrapper function as follows: $(ID) to return either a single

element, whose ID is the one passed or null

$$(selector) to return an array of elements or empty array with results;

Use mapping to existing DOM methods

e.g. getElementByClassName, querySelectorAll

39

Page 40: 19.  New JavaScript Apis in HTML5 - Web Front-End

Exercises (2)

2. Write an event delegate function member of the Event global object e.g. Event.delegate("selector", "eventName", handlerName) using the previously written functions to match selectors.

Map the global listeners to the document or body element;

Use w3c style events.$("#id").delegate(".clickable", "click", function(){ alert("Clicked!");});

40

Page 41: 19.  New JavaScript Apis in HTML5 - Web Front-End

Exercises (3)

3. Write a client-side based web application that consists of a trash bucket and lots of trash items in the browser window. Implement functionality:

To drag the trash items

To open the bucket when a trash item is being dragged over it and close it when there is no trash dragged

To put the trash item in the bucket, i.e. make it disappear from the browser window

41

Page 42: 19.  New JavaScript Apis in HTML5 - Web Front-End

Exercises (4)

Clean the Trash example

With Drag

42

Page 43: 19.  New JavaScript Apis in HTML5 - Web Front-End

Free Trainings @ Telerik Academy

"Web Design with HTML 5, CSS 3 and JavaScript" course @ Telerik Academy html5course.telerik.com

Telerik Software Academy academy.telerik.com

Telerik Academy @ Facebook facebook.com/TelerikAcademy

Telerik Software Academy Forums forums.academy.telerik.com