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

CS498RK SPRING 2020 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 2020 CS498RK

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"> Javascript goes here... </script>

Embed external file Inline in HTML

slide-4
SLIDE 4

Revisiting the Dom

slide-5
SLIDE 5

THE document OBJECT

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

slide-6
SLIDE 6

THE HTMLElement OBJECT

From Element element.attributes element.className element.id element.innerHTML element.tagName From Node element.nodeName element.nodeType element.textContent

HTMLElement Element Node

slide-7
SLIDE 7

properties for traversing the DOM tree

THE HTMLElement OBJECT

element.children element.parentElement element.previousElementSibling element.nextElementSibling element.childNodes element.parentNode element.previousSibling element.nextSibling

VS.

A Node can be anything in the DOM (Text, Comments, etc.), while Elements are the nodes that represent HTML elements

slide-8
SLIDE 8

TRAVERSING THE DOM

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

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

CONTENT

PADDING

BORDER

MARGIN

clientWidth

  • ffsetWidth

(includes scrollbar) relative to

  • ffsetParent

THE HTMLElement OBJECT

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(), …

slide-11
SLIDE 11

Events

slide-12
SLIDE 12

User mouse clicks/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 after specified amount of time (ms)

slide-14
SLIDE 14

make use of 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){…};

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); var 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); var 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 compatibility use for all DOM manipulation: (e.g., positioning relative to document and not offsetParent)

jquery.com CodePen

slide-30
SLIDE 30

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

slide-31
SLIDE 31

NEXT CLASS: ADVANCED JS/CSS

https://uiuc-web-programming.gitlab.io/sp20/