1 Introduction to HTML5. 2 Introductions –Lecture is based on the book: –The Essential Guide to HTML5: Using Games to learn HTML5 & JavaScript.

Slides:



Advertisements
Similar presentations
Introduction to Web Design Lecture number:. Todays Aim: Introduction to Web-designing and how its done. Modelling websites in HTML.
Advertisements

Web Pages and Style Sheets Bert Wachsmuth. HTML versus XHTML XHTML is a stricter version of HTML: HTML + stricter rules = XHTML. XHTML Rule violations:
Creating User Interfaces Font example. Server issues. Present video/audio examples. Discuss video and audio value-add. Stakeholders. HTML5 localStorage.
Chapter 6 Photoshop and ImageReady: Part II The Web Warrior Guide to Web Design Technologies.
HTML 5 Previous version: HTML4.01, 1999 Still work in progress, most browsers support some of it.
Programming games More drawing. Text. Radian measure. Faces. Homework: Do your own drawings. Create index.html file. Upload work.
Macromedia Dreamweaver 4 Advanced Level Course. Add Rollovers Rollovers or mouseovers are possibly the most popular effects used in designing Web pages.
Chapter 14 Introduction to HTML
Introduction to HTML5 Jeanine Meyer Purchase College/SUNY.
Programming Games Computer science big ideas. Computer Science jargon. Show virtual dog Homework: [Catch up: dice game, credit card or other form.] Plan.
IT Engineering I Instructor: Rezvan Shiravi
Chapter 4 Dreamweaver: Part II The Web Warrior Guide to Web Design Technologies.
Create Interfaces College exercise. Continue HTML5: HTML5 logo, drawing images. Coin toss. Homework: acquire video & audio.
Tutorial 4: Using CSS for Page Layout. 2 Objectives Session 4.1 Explore CSS layout Compare types of floating layouts Examine code for CSS layouts View.
Programming Games Recap on Google Maps. Creating elements. Dynamic creation of elements (multiple video elements). Geolocation. Classwork/Homework: Catch-up.
Programming games Examples: Audio example. Google Maps api. Classwork: show more complex video. Classwork/Homework: Find place (lat and long) for basic.
SEG3210 DHTML Tutorial. DHTML DHTML is a combination of technologies used to create dynamic and interactive Web sites. –HTML - For creating text and image.
Programming games Recap. Upload work (Filezilla, index.html). Drawing lines. Drawing stars. Homework: Drawing exercises.
Programming Games Basic HTML5 audio example. Catch-up. Work on basic video. Homework: Complete basic video.
Programming Games Show your cannonball. HTML5 video. Miro. Classwork/Homework: Acquire video, convert to multiple formats, and produce simple (just html)
CNIT 133 Interactive Web Pags – JavaScript and AJAX JavaScript Environment.
SEG3210 DHTML Tutorial. DHTML DHTML is a combination of technologies used to create dynamic and interactive Web sites. –HTML - For creating text and image.
Getting Started with Canvas IDIA Spring 2013 Bridget M. Blodgett.
Programming Games Google Map API examples. CSS. Classwork/homework: Catch up. Upload work. Show your [more] complex Google Maps API example. Plan your.
Programming Games Simulated ballistic motion: cannon ball. Classwork: Final day for midterm project and all projects for first part of class. Homework:
Programming Games Show your simple video. More video examples. Audio. Classwork/Homework: Produce more complex video program.
Session: 17. © Aptech Ltd. 2Canvas and JavaScript / Session 17  Describe Canvas in HTML5  Explain the procedure to draw lines  Explain the procedure.
Programming games Reprise: coin toss on canvas. Dice game rules. Global and local variables. Homework: [Catch up. Upload projects, including index.html.]
Homework: New coin toss. [Start dice game.]
Creating Interfaces Defining users. College exercise. HTML5 drawing. Homework: Post or make comment on other postings on reflection on college exercise.
Element. The element Used to dynamically draw graphics using javascript. Capable of drawing paths, circles, rectangles, text, and images.
Programming Games Show project. Refresher on coordinates. Scaling, translation. HTML5 logo. Refresher on animation. Bouncing ball. Homework: Do your own.
Programming games Show your version of Bo the dog. Start cannonball Preview: video, audio work session (cannonball) Homework: Cannonball with ball in a.
Introduction to HTML. What is HTML?  Hyper Text Markup Language  Not a programming language but a markup language  Used for presentation and layout.
Programming Games Reprise: storage, datatypes. Geolocation/Google API example. Work session Homework: [Catch up. Upload work. Post proposal.] Work on your.
Creating User Interfaces Recap HTML/HTML5 JavaScript features Homework: keep working on user observation studies. Review JavaScript.
Programming Games Reprise on drawing on canvas. Jargon (concepts): objects. Demonstrate slingshot. Mouse events. Work on your cannonball. Homework: Finish.
Programming games Show shaking screen, quiz show. Calculations Homework: (Finish basic Javascript Projects) Make proposal. Work on project.
Programming Games [Show Google Maps project.] Demonstrate more examples. Classwork/Homework: Decide on final project. Post proposal to moodle.
Programming games HTML/JavaScript basics Functions, events, forms Classwork: [Show favorite sites.] Coin toss. Homework: GET WEB SPACE. Complete coin toss.
Chapter 2: Variables, Functions, Objects, and Events JavaScript - Introductory.
CHAPTER 15 HTML 5 VIDEO AND AUDIO Intro to HTML5 1.
Programming games Problems. Schedule Various examples. Homework: rps, bo (don't go back to do this), cannonball, Video or Audio should be complete. Now.
Creating Interfaces Show form validation examples, Hangman. HTML5 with Google Maps API. Add in localStorage. Design pitfalls. Homework: Make proposal for.
Programming games Context of what we are doing. Drawing on canvas. Homework: [Complete coin toss examples.] Do your own drawings. Upload files to website.
Programming games Review concepts. Crooked coin toss. Drawing on canvas. Homework: Complete [static] drawings. Upload files to website.
Spiderman ©Marvel Comics Creating Web Pages (part 1)
Creating User Interfaces HTML5 video & audio. Role of video and audio. Homework: Complete your own [small/simple] HTML5 video and audio projects.
Programming Games Show slide show (on your site). Bouncing something. Video element. Bouncing video element. Bouncing video drawn on canvas. Bouncing video.
Phonegap Bridge –Geolocation and Google maps CIS 136 Building Mobile Apps 1.
Web Programming Java Script-Introduction. What is Javascript? JavaScript is a scripting language using for the Web. JavaScript is a programming language.
Programming games Show work on site. Work on slide show. Timed event for bouncing ball. Homework: [Finish slide show and upload to site.] Acquire a short.
The HTML5 logo was introduced by W3C in 2010
Introduction to HTML.
That Gauge is COOL! 
© 2016 Pearson Education, Inc., Hoboken, NJ. All rights reserved.
Web Development & Design Foundations with HTML5 7th Edition
Geolocation using Google maps
Programming Games Computer science big ideas and Computer Science jargon: review of things we have used in examples. Show virtual dog Homework: [Catch.
ISC440: Web Programming II Ch14: HTML5 Canvas
The Canvas.
Geolocation using Google maps
Context of what we are doing.
Programming games Share your plans for your virtual something.
Catchup. Work on project.
Creating User Interfaces
Programming Games Refresher on coordinates. Scaling, translation. HTML5 logo. Refresher on animation. Bouncing ball. Show project. Classwork/Homework:
Geolocation using Google maps
JavaScript – Let’s Draw!
Presentation transcript:

1 Introduction to HTML5

2 Introductions –Lecture is based on the book: –The Essential Guide to HTML5: Using Games to learn HTML5 & JavaScript

3 Background HTML5 is the latest/soon to be version of –HyperText Markup Language (HTML): text with tags for content –JavaScript: scripting/programming language for interactivity, dynamic presentation –Cascading Style Sheets: formatting Many new features, for support of semantic web, dynamic/interactive websites CAUTION: definition not official. Browser support evolving.

4 New features include: Semantic elements: header, footer, section, article, others. canvas for drawing –paths of rectangles, arcs, lines, images –mouse events localStorage (variation of cookies) audio & video elements –including drawing video on canvas

5 This Tutorial Build Drawings –draw rectangles, arcs, lines on canvas Build Coin toss –event handling, draw text and images on canvas Find video clips & convert. –Add video to favorite sites or make it stand-alone. Build Bouncing Video –draw video, create mask, timed event Build geolocation application, including Google Maps API app and localStorage Preview Essential Guide to HTML5

6 HTML template

7 Drawing canvas element Use code to define a so-called context. Methods of this object do the work! Screen geometry: upper left corner is origin. Colors defined by red-green-blue values or a small set of named colors, – es.htm. es.htm stroke versus fill draw Rectangles

8 0,0, default color, 10 by 10, stroke 0,300,green,30 by 30, stroke 500,300, 50 by 50, fill 500,0,default color,20 by 20, fill rgb(200,0,100)

9 Four rectangles var ctx; function init() { ctx = document.getElementById('canvas').getContext('2d'); ctx.lineWidth = 2; ctx.strokeRect(0,0,10,10); ctx.fillRect(500,0,20,20); ctx.strokeStyle = "green"; ctx.fillStyle = "rgb(200,0,100)"; ctx.strokeRect(0,300,30,30); ctx.fillRect(500,300,50,50); } Your browser doesn't support the HTML5 element canvas.

10 Errors JavaScript is scripting language: interpret statements at execution time. –NOT compiled, with error messages Semantic errors (errors of meaning) are more difficult to detect and fix! Syntactic errors are errors of form, analogous to grammatical errors –FireFox Tools/Error Console can help Most common: bad bracketing ctx.fillStyle("rgb(200,0,100)"); fillStyle is attribute,not method

11

12 Comments The drawing is done in the init function which is called when the body element is loaded. The canvas element with id="canvas" does not exist until the body is loaded. Default color is black. Red green blue values each are 0 to 255 (8 bits of intensity). The strokeStyle and the fillStyle are attributes, not methods. GO: experiment with colors (by name) and rgb (note the quotation marks) and location and width and height.

13 More comments Drawings are …paint on the canvas. These rectangles are not objects to be moved or referenced later. Use ctx.clearRect method to erase. Need to do calculations to detect hits. Alternative is dynamic placement of html markup

14 Next drawing Paths created with arcs and line segments Arcs are portions of circles, created using radians in place of degrees. Math.PI is available for use. A complete circle can be drawn from 0 to 2*Math.PI or –Math.PI to Math.PI, etc. Arcs can be stroke or fill.

15 Angles 0 (=2*PI) PI/4 PI/2 PI PI*3/2 true means counter- clockwise!.80*PI.20 * PI

16 arcs ctx.arc (x of center, y of center, radius, starting angle, finishing angle, true for counter-clockwise) No drawing (ink) at the center! This is important when connecting arcs and lines. EXPERIMENT

17 4 distinct paths, each made up of 1 arc. Default, "red" and "brown"

18 Strategy Use variables with some variable values defined in terms of others. Circle face and two eyes. Smile is (partial) arc. Brown eyes and red smile. body element same as before. –You can add the code for this to your rectangles drawing.

19 var ctx; var headx = 100; //center of face x coord. var heady = 200; // center of face y coord. var headrad = 50; //radius of face var smileoffsetx=0; //smile center x is same as face var smileoffsety = 15; //smile center y further down var smilerad=20; // smile radius var eyeoffsety = -10; //eyes up from center var lefteyeoffsetx = -15; //left eye var righteyeoffsetx = -lefteyeoffsetx; //right var eyerad = 8; // eye radius

20 function init() { ctx = document.getElementById('canvas').ge tContext('2d'); ctx.lineWidth = 5; ctx.beginPath(); ctx.arc(headx,heady,headrad,0,2*Math.PI,true); ctx.closePath(); ctx.stroke(); …

21 ctx.strokeStyle = "red"; ctx.beginPath(); ctx.arc(headx+smileoffsetx,heady+smileoffsety, smilerad,.80*Math.PI,.20*Math.PI,true); ctx.stroke(); ctx.fillStyle = "brown"; ctx.beginPath(); ctx.arc(headx+lefteyeoffsetx,heady+eyeoffsety, eyerad, 0,2*Math.PI,true); ctx.fill(); ctx.beginPath(); ctx.arc(headx+righteyeoffsetx,heady+eyeoffset y,eyerad,0,2*Math.PI,true); ctx.fill(); }

22 Comments The fill and stroke calls close the path. Also, can close a path with closePath() Using variables makes code more flexible and easier to see relationships. GO: draw arcs, changing colors, sizes, etc. NOTE: can draw non-circular ovals using transformations: scale. Check out the hangman game in book!

23 Next drawing: star For drawing lines (and arcs), think of moving a pencil versus drawing (preparing to draw) a line segment –nothing is drawn until the stroke or fill Use an array with coordinates for 5 points Use an array to hold names of 3 colors button element

24 opening screen

25 after 1 st press of button

26 after next press

27 after next press

28 show body first Your browser doesn't support the HTML5 element canvas. Make Star

29 variables (in script element) var ctx; var pts=[ //5 points for star: rough drawing [100,35], [60,10], [20,35], [35,100], [85,100] ]; var colors=["red","white","blue"]; //used in succession var c=0;// points to next color

30 variables (in script element) var ctx; var pts=[//5 points for star: rough drawing [100,35], [60,10], [20,35], [35,100], [85,100] ]; var colors=["red","white","blue"]; //used in succession var c=0;// points to next color

31 variables (in script element) var ctx; var pts=[//5 points for star: rough drawing [100,35], [60,10], [20,35], [35,100], [85,100] ]; var colors=["red","white","blue"]; //used in succession var c=0;// points to next color

32 variables (in script element) var ctx; var pts=[//5 points for star: rough drawing [100,35], [60,10], [20,35], [35,100], [85,100] ]; var colors=["red","white","blue"]; //used in succession var c=0;// points to next color

33 variables (in script element) var ctx; var pts=[//5 points for star: rough drawing [100,35], [60,10], [20,35], [35,100], [85,100] ]; var colors=["red","white","blue"]; //used in succession var c=0;// points to next color

34 function init() { ctx = document.getElementById('canvas').getContext('2d'); } function makestar() { ctx.clearRect(0,0,600,400); ctx.fillStyle=colors[c]; c = c +1; // can reduce to one line using colors[c++] c = (c<3)?c:0; ctx.beginPath(); ctx.moveTo(pts[0][0],pts[0][1]); ctx.lineTo(pts[3][0],pts[3][1]); ctx.lineTo(pts[1][0],pts[1][1]); ctx.lineTo(pts[4][0],pts[4][1]); ctx.lineTo(pts[2][0],pts[2][1]); ctx.lineTo(pts[0][0],pts[0][1]); ctx.stroke(); //outline (necessary for white star! ctx.fill(); }

35 Fancier stars Code to draw star more precisely Position each star randomly on canvas. –Add star with each button press Increase number of colors. – or_names.htmhttp:// or_names.htm –improve coding for robustness

36 after many presses

37 Strategy reuse code for makestar, with modification –remove clearRect method –add a call to buildstar that re-creates the pts array add items to colors array –remove 3 from the code! position, size, and rotation of star created using calls to Math.random.

38 variables var ctx; var angle = 2*Math.PI/5; var pts=[ ]; var colors=["red","white","blue","p urple","yellow","teal"]; var c=0;

39 function makestar() { buildstar(); ctx.fillStyle=colors[c++]; c = (c<colors.length)?c:0; ctx.beginPath(); ctx.moveTo(pts[0][0],pts[0][1]); ctx.lineTo(pts[3][0],pts[3][1]); ctx.lineTo(pts[1][0],pts[1][1]); ctx.lineTo(pts[4][0],pts[4][1]); ctx.lineTo(pts[2][0],pts[2][1]); ctx.lineTo(pts[0][0],pts[0][1]); ctx.stroke(); ctx.fill(); }

40 function buildstar() { pts = []; var x=500*Math.random(); //all these arbitrary var y = 300*Math.random(); var r=50*Math.random(); var sangle = Math.random()*angle; for(var i=0;i<5;i++) { var a = i*angle + sangle; var px = x+r*Math.cos(a); var py = y-r*Math.sin(a); pts.push([px,py]); }

41 Comments Lesson of these examples is that drawings are dynamic! –can be done under specific circumstances in a program –using different values Do this if there is time. Consider changing –names of colors –constants –draw something instead of or in addition to the star –?

42 Next: coin flip Draw image from image file of head or tail on canvas where player clicks mouse –event handling: listen for mouse click –draw image made from external file Draw text (with directions) on canvas

43 opening screen

44 after mouse click

45 Strategy Need to locate/identify file address for images –can be in same folder (use relative address) or use full URL Image objects with src attribute font set for context (ctx) event handling done for canvas element NOT context. Sets up call to function that has 1 parameter Does require browser specific code to get mouse coordinates. (Sigh….) –use technique of checking for presence of attribute

46 Strategy, cont. Fonts are from what is available on the client computer. draw outline (strokeRect) to show player where canvas is. Alternative to color names or rgb is hexadecimal. –use PhotoShop or Paint Shop Pro Note that my code makes adjustment to put middle of image where mouse was clicked.

47 variables var ctx; var canvas1; var head = new Image(); var tail = new Image(); head.src = "head.gif"; tail.src = "tail.gif"; var coinwidth = 100; var coinheight = 100;

48 functions function init() { ctx = document.getElementById('canvas').getConte xt('2d'); canvas1 = document.getElementById('canvas'); canvas1.addEventListener('click',flip,fals e); ctx.font = "italic 20px Accent"; ctx.fillStyle = "#dd00ff"; ctx.strokeRect(0,0,600,400); ctx.fillText("Click on canvas to flip a coin.",10,20); }

49 function flip(ev) { var mx; var my; ctx.clearRect(0,0,600,400); if ( ev.layerX || ev.layerX == 0) { // Firefox mx= ev.layerX; my = ev.layerY; } else if (ev.offsetX || ev.offsetX == 0) { // Opera mx = ev.offsetX; my = ev.offsetY; } if (Math.random()>.5) { ctx.drawImage(head,mx-50,my- 50,coinwidth,coinheight); } else { ctx.drawImage(tail,mx-50,my- 50,coinwidth,coinheight);} ctx.strokeRect(0,0,600,400); ctx.fillText("Click on canvas to flip a coin.",10,20); }

50 Comments You need to acquire two images to represent the coin faces. –download to same folder or use exact, complete address You can go into Word, or equivalent, to see available fonts. –more in book AND online. Go!

51 Background on audio & video This is native support (no need for plugins), no dependence on YouTube. Issue: Multiple formats (aka codecs) for each. –Different browsers recognize different formats. –Situation MAY improve: may be standardization. –Good news: the and elements provide way to reference multiple files and let browser choose (though order does seem to be important).

52 Audio & video elements

53 Our goal now Find and download video files. Use Miro Converter to produce other formats. Put audio into one of existing projects. Put video into one of existing projects. Build video bouncing ball. Look at book's rock-paper-scissors for playing specific sounds at specific times. Look at book's quiz for keeping video invisible and playing it only when quiz round complete.

54 Acquire video Make your own. Find on-line. Site lets you specify a URL and choose from the videos to download. –Respect intellectual property!!! –Respect personal privacy (of friends & family, etc.)!!!

55 Produce all formats Produce formats for all browsers: – Download the program. The original file can be in several different formats, including flv (Flash format, used by YouTube). Follow directions: should produce the 3 formats: mp4, theora.ogv, webmvp8.webm

56 Next: Video Put video element in your favorite sites or something else or ??? Test using Firefox, Chrome and Safari. PATIENCE!!

57 Next: Bouncing video Two versions –move around video element –use drawImage to place video on canvas (works in FireFox) Doing this makes it easier to draw mask. Otherwise, difficult to position. "Not quite ready for prime time". Need to put in code to wait until video all downloaded.

58 Strategy Use setInterval to invoke [my] drawscene function –re-position video. –Check against [virtual] walls. Apply angle of incidence equal angle of reflection (easy to do) –use strokeRect to draw box NOTE: the loop attribute did not work, so I set up event handling for video ended event.

59 Function table initCalled by action of onLoad in restart… addEventListener in init drawscene… setInterval in init. This is different in two versions moveandcheckCalled in drawscene

60 Bouncing video rectangle canvas and video distinct elements

61 Video is in motion

62 Style section Positioning and layering (my term). Note: to change z-index by JavaScript, use zIndex. #vid {position:absolute; visibility:hidden; z-index: 0; } #canvas {position:absolute; z- index:10;}

63 var ctx; var cwidth = 900; var cheight = 600; var ballrad = 50; var boxx = 20; var boxy = 30; var boxwidth = 850; var boxheight = 550; var boxboundx = boxwidth+boxx-2*ballrad; var boxboundy = boxheight+boxy-2*ballrad; var inboxboundx = 0; var inboxboundy = 0; var ballx = 50; var bally = 60; var ballvx = 2; var ballvy = 4; var v;

64 function init(){ ctx = document.getElementById('canvas').getConte xt('2d'); v = document.getElementById("vid"); v.addEventListener("ended",restart,false); v.style.left = ballx; v.style.top = bally; v.width = 2*ballrad; v.height = 2*ballrad; v.play(); v.style.visibility = "visible"; setInterval(drawscene,50); }

65 function restart() { v.currentTime=0; v.play(); }

66 function drawscene(){ ctx.lineWidth = ballrad; ctx.clearRect(boxx,boxy,boxwidth,boxheight ); moveandcheck(); v.style.left = ballx; v.style.top = bally; ctx.strokeStyle ="rgb(200,0,50)"; ctx.strokeRect(boxx,boxy,boxwidth,boxheigh t); //box }

67 function moveandcheck() { var nballx = ballx + ballvx; var nbally = bally +ballvy; if (nballx > boxboundx) { ballvx =-ballvx; nballx = boxboundx; } if (nballx < inboxboundx) { nballx = inboxboundx ballvx = -ballvx; } if (nbally > boxboundy) { nbally = boxboundy; ballvy =-ballvy; } if (nbally < inboxboundy) { nbally = inboxboundy; ballvy = -ballvy; } ballx = nballx; bally = nbally; }

68 Your browser does not accept the video tag. This browser doesn't support the HTML5 canvas element.

69 Bouncing video circle Works in Firefox. video used in drawImage. A mask is created: a box with a hole positioned over the video to produce a circular

70 Video is in motion

71 var ctx; var cwidth = 900; var cheight = 600; var ballrad = 50; var boxx = 20; var boxy = 30; var boxwidth = 850; var boxheight = 550; var boxboundx = boxwidth+boxx-2*ballrad; var boxboundy = boxheight+boxy-2*ballrad; var inboxboundx = 0; var inboxboundy = 0; var ballx = 50; var bally = 60; var ballvx = 2; var ballvy = 4; var maskrad; var v;

72 function init(){ ctx = document.getElementById('canvas').getConte xt('2d'); v = document.getElementById("vid"); v.addEventListener("ended",restart,false); // because loop doesn't work on FF v.width = v.videoWidth/3; v.height = v.videoHeight/3; videow = v.width; videoh = v.height; maskrad =.4*Math.min(videow,videoh); v.play(); setInterval(drawscene,50); }

73 function restart() { v.currentTime=0; v.play(); }

74 function drawscene(){ ctx.lineWidth = ballrad; ctx.clearRect(0,0,boxwidth+boxx,boxheight+boxy); ctx.fillStyle="rgb(255,255,255)"; //white moveandcheck(); ctx.drawImage(v,ballx+boxx, bally+boxy, v.width,v.height); ctx.beginPath(); ctx.moveTo(ballx+boxx,bally+boxy); ctx.lineTo(ballx+boxx+v.width,bally+boxy); ctx.lineTo(ballx+boxx+v.width,bally+boxy+v.height); ctx.lineTo(ballx+boxx,bally+boxy+v.height); ctx.lineTo(ballx+boxx,bally+boxy); ctx.arc(ballx+boxx+.5*v.width,bally+boxy+.5*v.height,maskr ad,0, Math.PI*2,true); ctx.fill(); //draw white mask on top of video, letting just circle show ctx.strokeStyle ="rgb(200,0,50)"; ctx.strokeRect(boxx,boxy,boxwidth,boxheight); //box }

75 function moveandcheck() { var nballx = ballx + ballvx; var nbally = bally +ballvy; if (nballx > boxboundx) { ballvx =-ballvx; nballx = boxboundx; } if (nballx < inboxboundx) { nballx = inboxboundx ballvx = -ballvx; } if (nbally > boxboundy) { nbally = boxboundy; ballvy =-ballvy; } if (nbally < inboxboundy) { nbally = inboxboundy; ballvy = -ballvy; } ballx = nballx; bally = nbally; }

76 Your browser does not accept the video tag. This browser doesn't support the HTML5 canvas element.

77 Next: Maps app Use Google Maps API to bring up map at current location. Respond to clicking by placing a marker and calculating distance. Provide way to change to fixed set of locations or the last marker. –need to give permission to Share Location Works in Chrome and Firefox. Does not work in Safari for Windows.

78 Opening screen

79 Brings up ….

80 After click on map

81 After choose CUNY

82 Mapping Google Maps API (and other applications) defines positions using special latitude/longitude data object Access to Google Map is created for a place in the HTML document, using specified map options HTML has a specification for doing geolocation. –navigator.geolocation produces latitude and longitude values

83 How to get positions? Google Maps –get to a map Browser location javascript:void(prompt('',gApplication.getMap().get Center())); OR Click on green beaker and enable the drop latlng marker –right click then normal click

84 Sample program Tries to use the geolocation Gives user option to pick base location User can click on map and find distance from base center. Can change base to last clicked on position. General access to Google Maps features.

85 Basics if (navigator.geolocation) checks if this object exists. Does NOT cause any errors. if (navigator.geolocation) { navigator.geolocation.getCurrentPosit ion (handler,problemhandler); } handler when things go okay. problemhandler when there are errors, including user deciding not to share location.

86 Create/Access Google Maps map = new google.maps.Map(document.getElementB yId("place"), myOptions); brings up Google Maps in the div with id "place" using the parameters in myOptions. NOTE: use of % for width and height did not work when used.

87 style, external script header {font-family:Georgia,"Times New Roman",serif; font-size:20px; display:block; }

88 init() code function init() { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition (handler,problemhandler); } else { if (document.getElementById("place")) { document.getElementById("place").innerHTML = "I'm sorry but geolocation services are not supported by your browser"; document.getElementById("place").style.color = "#FF0000"; } } }

89 function handler(position) { var mylat = position.coords.latitude; var mylong = position.coords.longitude; makemap(mylat,mylong); }

90 error handling function problemhandler(prob) { switch(prob.code) { case 1: document.getElementById("place").innerHTML = "User declined to share the location information."; break; case 2: document.getElementById("place").innerHTML = "Errors in getting base location."; break; case 3: document.getElementById("place").innerHTML = "Timeout in getting base location."; } document.getElementById("header").innerHTM L = "Base location needs to be set!"; }

91 variables var listener; var map; var markersArray =[]; var blatlng; var myOptions; var locations = [ [ , , "Memphis, TN"], [ , ,"Purchase College/SUNY"], [ , ,"IIT"] ];

92 create/access map function makemap(mylat, mylong) { blatlng = new google.maps.LatLng(mylat,mylong); myOptions = { zoom: 14, center: blatlng, mapTypeId: google.maps.MapTypeId.ROADMAP}; map = new google.maps.Map(document.getElementById("p lace"), myOptions); listener = google.maps.event.addListener(map, 'click', function(event) { checkit(event.latLng);}); }

93 response to click on map function checkit(clatlng) { var distance = dist(clatlng,blatlng); distance = Math.floor((distance+.005)*100)/100; var distanceString = String(distance)+" miles"; marker = new google.maps.Marker({ position: clatlng, title: distanceString, map: map }); markersArray.push(marker); document.getElementById("answer").innerHTML = "The distance from base to most recent marker is "+String(distance) +" miles."; }

94 distance function function dist(point1, point2) { //spherical law of cosines //var R = 6371; // km var R = 3959; // miles var lat1 = point1.lat()*Math.PI/180; var lat2 = point2.lat()*Math.PI/180 ; var lon1 = point1.lng()*Math.PI/180; var lon2 = point2.lng()*Math.PI/180; var d = Math.acos(Math.sin(lat1)*Math.sin(lat2) + Math.cos(lat1)*Math.cos(lat2) * Math.cos(lon2-lon1)) * R; return d; }

95 change base using radio buttons function changebase() { for(var i=0;i<locations.length;i++) { if (document.f.loc[i].checked) { makemap(locations[i][0],locations[i][1] ); document.getElementById("header").inner HTML = "Base location is "+locations[i][2]; } return false; }

96 Base location is your current geolocation Change base location: Memphis Purchase College Illinois Institute of Technology

97 Variation Geolocation returns accuracy and, maybe, other information, including altitude. These applications mark the center with a red x and display other information Note: accuracy is given in meters in both cases

98 Critical code Uses custom image for marker var xmarker = "x1.png"; … marker = new google.maps.Marker({ position: blatlng, title: "center", icon: xmarker, map: map });

99 getCurrentPosition 3 rd parameter to getCurrentPosition call positionopts = {enableHighAccuracy: true} ; … navigator.geolocation.getCurrentPosition(handler, problemhandler, positionopts); Add form coutput for output document.coutput.lat.value = mylat; document.coutput.lon.value = mylong; document.coutput.acc.value = position.coords.accuracy; document.coutput.alt.value = position.coords.altitude; document.coutput.altacc.value = position.coords.altitudeAccuracy; document.coutput.heading.value = position.coords.heading; document.coutput.speed.value = position.coords.speed;

100 Next application: persistent storage Normal situation: no changes to client computer beyond downloaded files. cookies invented (with a pleasing name) to be files associated with each browser to be used only by same server site. –convenience: IDs and passwords, preferences, etc. –behavioral marketing! Early HTML supported cookies. localStorage is a new variation. CAUTION: Firefox requires the program to run on a server! Chrome allows running locally.

101 Opening (after permission)

102 New base

103 Objective: add to maps app 3 buttons: store base, retrieve base stored, change base to last marker localStorage used name-value pairs. Do error checking! –check for ability to do localStorage –check if there is a stored time.

104 Strategy Three buttons, invoking store(), retrieve(), and changebasetomarker() Use try { } catch(e) { }. The code in try will NOT trigger an error, but if there is one, will go to catch. Also use typeof(localStorage) to test if this is defined.

105 Store base. Restore last base. Change base location to last marker.

106 function store() { if (typeof(localStorage) == "undefined") { alert("Browser does not recognize HTML local storage."); } else { try { localStorage.setItem("baselat",blatlng.lat ()); localStorage.setItem("baselng",blatlng.lng ()); localStorage.setItem("basename",basename); } catch(e) { alert("Error with use of local storage: "+e);} } return false; }

107 function retrieve() { if (typeof(localStorage) == "undefined") { alert("Browser does not recognize HTML local storage."); } else { try { oldlat= localStorage.getItem("baselat"); oldlng = localStorage.getItem("baselng"); oldname = localStorage.getItem("basename"); if (oldlat==null) { alert("No base stored");} else {makemap(Number(oldlat),Number(oldlng)); basename = oldname; document.getElementById("header").innerHTML = "Base location is "+basename; } } catch(e) { alert("Error with use of local storage: "+e);} } return false; }

108 changes base to marker function changebasetomarker() { if (lastmarker!="undefined") { makemap(lastmarker.lat(),lastma rker.lng()); basename = "marker"; }

109 Comments Error checking good! Many GIS programs with common/similar features Need to determine where information goes –my locations array kept information in my JavaScript

110 Plug for Book introduce application, mainly familiar games. critical requirements HTML5 (CSS, JavaScript) features complete code: comments Many chapters involve sets of applications Introduction to programming NOTE: not encyclopedic on features

111 Applications (HTML5 features) Favorite sites Dice game: drawing arcs & rectangles Bouncing ball: drawing, including gradient, form validation, timed events Cannonball & Slingshot: drawing lines & images, mouse events, rotation & translation, programmer-defined objects Memory polygons & pictures: drawing, mouse events (clicking on card), timing

112 Applications (HTML5 features) Quiz: dynamically created HTML markup, mouse events on elements, video Mazes: mouse events, drawing, localStorage, radio buttons Rock, Paper, Scissors: drawing, audio Hangman: drawing lines and arcs (ovals), dynamic HTML markup Blackjack: key events, drawing images, footer

113 The End