JAVASCRIPT an d th e We b ! JAVASCRIPT popular scripting language - - PowerPoint PPT Presentation

javascript
SMART_READER_LITE
LIVE PREVIEW

JAVASCRIPT an d th e We b ! JAVASCRIPT popular scripting language - - PowerPoint PPT Presentation

CS 498RK SPRING 2019 JAVASCRIPT an d th e We b ! JAVASCRIPT popular scripting language on the Web, supported by browsers separate scripting from structure (HTML) and presentation (CSS) client- and server-side programming object-oriented,


slide-1
SLIDE 1

SPRING 2019 CS 498RK

JAVASCRIPT

and the Web!

slide-2
SLIDE 2

popular scripting language on the Web, supported by browsers separate scripting from structure (HTML) and presentation (CSS) client- and server-side programming

  • bject-oriented, imperative, functional

JAVASCRIPT

slide-3
SLIDE 3

HOW TO EMBED JS IN HTML

<script type=“text/javascript" src=“code.js”></script> <script type="text/javascript"> <![CDATA[ Javascript goes here... ]]> </script>

everything inside ignored by parser

Embed external file

Inline in HTML

slide-4
SLIDE 4

Revisiting the Dom

slide-5
SLIDE 5

DOM DOCUMENT OBJECT

root node of HTML document selector properties/methods: document.body document.getElementById() document.getElementsByClassName() document.getElementsByTagName()

www.w3schools.com/jsref/dom_obj_document.asp

slide-6
SLIDE 6

DOM ELEMENT OBJECT

Element metadata: element.tagName element.className element.id element.attributes element.innerHTML

www.w3schools.com/jsref/dom_obj_all.asp

Node metadata: element.nodeName element.nodeType element.nodeValue

slide-7
SLIDE 7

DOM ELEMENT OBJECT

properties for traversing the DOM tree: element.childNodes/element.children element.parentNode/element.parentElement element.previousSibling/element.previousElementSibling element.nextSibling/element.nextElementSibling

www.w3schools.com/jsref/dom_obj_all.asp

slide-8
SLIDE 8

TRAVERSING THE DOM

www.w3schools.com/jsref/dom_obj_all.asp

BODY DIV H3 IMG

“My first photo” var body = document.body; var div = body.children[0]; var h3 = div.children[0]; var textNode = h3.childNodes[0]; var textString = textNode.nodeValue;

slide-9
SLIDE 9

DOM ELEMENT OBJECT

position: element.offsetTop, element.scrollTop, … dimensions: element.clientWidth, element.offsetWidth, … style: element.style

www.w3schools.com/jsref/dom_obj_all.asp

CONTENT

PADDING

BORDER

MARGIN

clientWidth

  • ffsetWidth

(includes scrollbar) relative to

  • ffsetParent
slide-10
SLIDE 10

DOM MANIPULATION

programmatically change the structure and modify element properties element.style.backgroundColor = “red”; element.innerHTML = “<div><h3>Llama!</h3>…</div>” augment DOM structure: element.appendChild(), element.removeChild(), …

www.w3schools.com/jsref/dom_obj_all.asp

slide-11
SLIDE 11

Events

slide-12
SLIDE 12

User: mouse clicks, mouse moves, key presses Browser: page load/unload Network: responses to AJAX request Timer

TYPES OF EVENTS

slide-13
SLIDE 13

setInterval(fn, ms);

TIMER EVENTS

calls function at specified intervals (ms) until clearInterval() or window is closed

setTimeout(fn, ms);

calls function afuer specified amount of time (ms)

slide-14
SLIDE 14

callback functions specify: what happened, where it happened, and how to handle it

EVENT HANDLERS

also known as listeners

slide-15
SLIDE 15

EVENT HANDLERS

<div onclick=“alert(‘Llama!’);”>...</div>

DOM LEVEL 0

element.onclick = function(){alert(‘Llama!’);}

In HTML In Javascript using the DOM

DOM LEVEL 1

slide-16
SLIDE 16

EVENT HANDLERS

var el = document.getElementById(‘myButton'); el.addEventListener( 'click', function(){ alert(‘Llama!');});

DOM LEVEL 2

supports multiple handlers per event

slide-17
SLIDE 17

single-threaded: events processed one at a time

THE BROWSER EVENT LOOP

Event Queue Parse HTML and create DOM Check for events Process event Event? YES NO USER BROWSER NETWORK TIMER

slide-18
SLIDE 18

contains the information about the event

EVENT OBJECT

<div onclick=“mouseClick(event);”>

HTML DOM

element.onclick = mouseClick; function mouseClick(event){…};

DOM (IE)

function mouseClick(){… x = window.event.clientX; …};

slide-19
SLIDE 19

events propagate in two phases capture phase: root to innermost element bubble phase: innermost element to root DOM standard: capture then bubble

EVENT PROCESSING

slide-20
SLIDE 20

element.addEventListener(event, function, useCapture)

EVENT PROCESSING

set capture or bubble phase

CODEPEN

event.stopPropogation()

slide-21
SLIDE 21

Event Example 1

CODEPEN

slide-22
SLIDE 22

function animateIt(elementId, speed) { var elem = document.getElementById(elementId); tick = 0; var timer = setInterval(function() { if (tick <100) { elem.style.left = tick*speed + "px"; tick++; } else {clearInterval(timer);} }, 30); }

Anonymous Functions

slide-23
SLIDE 23

function animateIt(elementId, speed) { var elem = document.getElementById(elementId); tick = 0; var timer = setInterval(function() { if (tick <100) { elem.style.left = tick*speed + "px"; tick++; } else {clearInterval(timer);} }, 30); }

Closures

slide-24
SLIDE 24

Event Example 2

CODEPEN

slide-25
SLIDE 25

function Dragger(id) { this.isMouseDown = false; this.element = document.getElementById(id); var obj = this; this.element.onmousedown = function(event) {

  • bj.mouseDown(event);}

}

Classes and Mouse Events

why obj instead of this?

slide-26
SLIDE 26

Dragger.prototype.mouseDown = function(event) { var obj = this; this.oldMoveHandler = document.body.onmousemove; document.body.onmousemove = function(event) {

  • bj.mouseMove(event);}

this.oldUpHandler = document.body.onmouseup; document.body.onmouseup = function(event) {

  • bj.mouseUp(event);}

this.oldX = event.clientX; this.oldY = event.clientY; this.isMouseDown = true; }

Classes and Mouse Events

why body?

slide-27
SLIDE 27

Troubles with Browsers and Other Quirks

slide-28
SLIDE 28

stable APIs, but different implementations JavaScript libraries duplicate existing event handling and DOM APIs

BROWSERS

slide-29
SLIDE 29

JQUERY

cross-browser use for all DOM manipulation: (e.g., positioning relative to document and not

  • ffsetParent)

jquery.com CODEPEN

slide-30
SLIDE 30

dorey.github.io/JavaScript-Equality-Table/

slide-31
SLIDE 31

developers.google.com/speed/articles/

  • ptimizing-javascript

jonraasch.com/blog/10-javascript- performance-boosting-tips-from-nicholas- zakas

TIPS & TRICKS

slide-32
SLIDE 32

NEXT CLASS: RESPONSIVE DESIGN

courses.engr.illinois.edu/cs498rk1/