HTML上課筆記 === 9/18 === ## HTML > Hyper Text Markdown Language ```htmlmixed= <!DOCTYPE html> <html> <head> <title>Page Title</title> <style> header { background-color: #666; padding: 30px; text-align: center; font-size: 35px; color: white; } </style> </head> <body> <h1>This is a Heading</h1> <p>This is a paragraph.</p> </body> </html> ``` ### 標籤說明 * \<!DOCTYPE html\> > 明確指出這是html5 * \<head\> > 設定相關 * \<title\> > 標籤文字 * \<body\> >內容 * \<h1 ... 5\> > 標題 * \<p\> > 段落 ## CSS ```htmlmixed= <style> body { font-family: Arial, Helvetica, sans-serif; } /* Style the header */ header { background-color: #666; padding: 30px; text-align: center; font-size: 35px; color: white; } </style> ``` ### CSS 簡單說明 * \<style\> > 可以放 css * background-color > 可以來更改顏色 > #000000[color=#000000] > #ff8800 [color=#ff8800] ## HTML 圖片 ```htmlmixed= <img src="html5.gif" alt="HTML5 Icon" style="width:128px;height:128px;"> ``` * \<img\> * 插入圖片 * src * 圖片的來源 * style * 也可以用 css 的做法來更改圖片大小 * width 寬 * height 長 ## HTML 超連結 ```htmlmixed= <a href="https://www.w3schools.com/">Visit W3Schools!</a> ``` * 把要超連結的文字用 \<a\> \</a\> 把它夾住 * \<a\> * 可以在網頁上面放超連結 * href * 要連結網頁的網址 ```htmlmixed= <a href="default.asp"> <img src="smiley.gif" alt="HTML tutorial" style="width:42px;height:42px;border:0;"> </a> ``` * 也可以直接用圖片來連結 * 在 \<a\> 裡面放 \<img\> ```htmlmixed= <a href="https://www.w3schools.com/" target="_blank">Visit W3Schools!</a> ``` * target 參數可以用來設定按下連結之後網頁要如何開起 * _blank 在新分頁中開起 * _self 在原本的分頁中開起 ## Javascript ```htmlmixed= <!DOCTYPE html> <html> <head> <script> function f1() { document.getElementById("x").innerHTML = '<img src="http://1.bp.blogspot.com/-xdHGOG59LCI/UjawN7V-deI/AAAAAAAABb8/v3dHRriJkjo/s1600/EUCL%E4%B8%8A%E5%8F%B0%E9%A0%98%E7%8D%8E01.jpg" width="100%">' } function f2() { document.getElementById("x").innerHTML = '<img src="http://4.bp.blogspot.com/-UKB9Pburh8I/Ujawb7t3wGI/AAAAAAAABcE/2h3OMM1sb-0/s1600/Frocius+Android%E4%B8%8A%E5%8F%B0%E9%A0%98%E7%8D%8E01.jpg" width="100%">' } </script> </head> <body> <div id="x"> <img src="http://1.bp.blogspot.com/-xdHGOG59LCI/UjawN7V-deI/AAAAAAAABb8/v3dHRriJkjo/s1600/EUCL%E4%B8%8A%E5%8F%B0%E9%A0%98%E7%8D%8E01.jpg" width="100%"> </div> <a href="javascript:f1();">上一張</a> <a href="javascript:f2();">下一張</a> </body> </html> ``` * 用 \<script\> 把 javascipt 包起來 ### js 解釋 * function 簡介 * function function_名稱(function_參數){} * 可把寫好的 function 放在 \<head\> 中 * 在 href 中,可以用 javascript:function() 的方法來指定執行 function * id funcion 運作方法 ```htmlmixed= <script> function f1(){ <!--document.getElementById() 可以去找html中的id--> <!--把找到的 div 中的 html 的 img 改成 flower.jpg--> document.getElementById("x").innerHTML = '<img src="flower.jpg" width="100%">' } function f2(){ document.getElementById("x").innerHTML = '<img src="car.jpg" width="100%">' } </script> <div id="x"> <!--把 div 給一個 id "x"--> <p>Message</p> </div> ``` 9/25 Day 2 === 0925 * div * 可以另外隔出一個獨立的區域 * 指定id可以方便選取指定的區域 ``` javascript= <style> function myFunction()(){ document.getElementById("demo").style.color = "red" } </style> <body> <div> <p id="demo">this is a text</p> <button type="button" onclick="myFunction()">Try it</button> </div> </body> ``` ``` javascript= <html> <body> <h2>JavaScript Arrays</h2> <p id="demo"></p> <script> var cars = ["Saab", "Volvo", "BMW"]; document.getElementById("demo").innerHTML = cars; </script> </body> </html> ``` ## Homework * 使用 if else 來使 code 更合理 https://jsfiddle.net/pnf0zh81/ ## 繼上次上課的內容 * div > 可以用來特別隔出一個區域 > 來特別指定一個 id * 單引號 & 雙引號 >都可以使用 * 下面的程式是可以把一行字的顏色改成紅色 * 利用 style.color = "red" 來更改 ```javascript= <style> function myFunction()(){ document.getElementById("demo").style.color = "red" } </style> <body> <div> <p id="demo">this is a text</p> <button type="button" onclick="myFunction()">Try it</button> </div> </body> ``` ## 更總明的寫法 * 如果遇到了好多張圖 * 可以不用寫很多的 function * 解決辨法: * 1. 利用 function 傳參數 -> 網址 的方法 * 2. 利用 陣列 傳 index 的方法 * 把網址們,一起存放在一個陣列裡面 * 利用 index 的方法來當參數來取值傳給 javascript ```htmlmixed= <!DOCTYPE html> <html> <head> <script> i = 0; x = [ "http://1.bp.blogspot.com/-xdHGOG59LCI/UjawN7V-deI/AAAAAAAABb8/v3dHRriJkjo/s1600/EUCL%E4%B8%8A%E5%8F%B0%E9%A0%98%E7%8D%8E01.jpg", "http://4.bp.blogspot.com/-UKB9Pburh8I/Ujawb7t3wGI/AAAAAAAABcE/2h3OMM1sb-0/s1600/Frocius+Android%E4%B8%8A%E5%8F%B0%E9%A0%98%E7%8D%8E01.jpg", "http://4.bp.blogspot.com/-p-YNGTeHwM0/UjawjF1fwoI/AAAAAAAABcM/YrenoO-Mcg8/s1600/devabchb%E4%B8%8A%E5%8F%B0%E9%A0%98%E7%8D%8E01.jpg", "http://2.bp.blogspot.com/-xPreUlrSYv8/UjayQmzNzPI/AAAAAAAABcY/AxJVYPKmVxI/s1600/A+Team%E5%B1%95%E7%A4%BA%E6%94%A4%E4%BD%8D01.jpg" ] function f(y) { i = i + y; document.getElementById("demo").innerHTML = "<img src='" + x[i] + "' width='100%'>" } </script> </head> <body> <div id="demo"> <img src='http://1.bp.blogspot.com/-xdHGOG59LCI/UjawN7V-deI/AAAAAAAABb8/v3dHRriJkjo/s1600/EUCL%E4%B8%8A%E5%8F%B0%E9%A0%98%E7%8D%8E01.jpg' width='100%'> </div> <a href="javascript:f(-1);">上一張</a> <a href="javascript:f(1);">下一張</a> </body> </html> ``` JavaScript 的陣列 === * var cars = ["aa", "bb", "cc"] 宣告一個陣列存著三個字串 ```htmlmixed= <!DOCTYPE html> <html> <body> <h2>JavaScript Arrays</h2> <p id="demo"></p> <script> var cars = ["Saab", "Volvo", "BMW"]; document.getElementById("demo").innerHTML = cars; <!--這樣會印出 Saab, Volvo, BMW--> document.getElementById("demo").innerHTML = cars[0]; <!--這樣會印出 Saab--> </script> </body> </html> ``` ## 全域變數 和 區域變數 * 上上面例子中的 i * 要宣告在 function 外面 * 因為要讓這個變數一直記著之前的值,而不會一直被初使化歸零 * 全域變數 -> 大家都 call 的到這個變數的值 * 區域變數 -> 只有在 function 內才可以 call 到變數的值 ## 如何 debug * 看錯誤訊息 10/9 === ## 連續播放 * 可以輪流播放圖片 * 使用 setInterval() * 用 mod 的方法就可以不用條件判斷了 ```htmlmixed= <!DOCTYPE html> <html> <head> <script> i = 0; var x = ["http://1.bp.blogspot.com/-xdHGOG59LCI/UjawN7V-deI/AAAAAAAABb8/v3dHRriJkjo/s1600/EUCL%E4%B8%8A%E5%8F%B0%E9%A0%98%E7%8D%8E01.jpg", "http://4.bp.blogspot.com/-UKB9Pburh8I/Ujawb7t3wGI/AAAAAAAABcE/2h3OMM1sb-0/s1600/Frocius+Android%E4%B8%8A%E5%8F%B0%E9%A0%98%E7%8D%8E01.jpg", "http://4.bp.blogspot.com/-p-YNGTeHwM0/UjawjF1fwoI/AAAAAAAABcM/YrenoO-Mcg8/s1600/devabchb%E4%B8%8A%E5%8F%B0%E9%A0%98%E7%8D%8E01.jpg", "http://2.bp.blogspot.com/-xPreUlrSYv8/UjayQmzNzPI/AAAAAAAABcY/AxJVYPKmVxI/s1600/A+Team%E5%B1%95%E7%A4%BA%E6%94%A4%E4%BD%8D01.jpg" ] function f(y) { if (i + y < x.length && i + y >= 0) { i = i + y; document.getElementById("demo").innerHTML = "<img src='" + x[i] + "' width='100%'>" } else { alert("這裡沒有圖片囉!"); } } function autoplay(){ setInterval(function(){ i++; i = (i + x.length) % x.length; document.getElementById("demo").innerHTML = "<img src='" + x[i] + "' width='100%'>" }, 3000) } </script> </head> <body> <div id="demo"> <img src='http://1.bp.blogspot.com/-xdHGOG59LCI/UjawN7V-deI/AAAAAAAABb8/v3dHRriJkjo/s1600/EUCL%E4%B8%8A%E5%8F%B0%E9%A0%98%E7%8D%8E01.jpg' width='100%'> </div> <a href="javascript:f(-1);">上一張</a> <a href="javascript:f(1);">下一張</a> <a href="javascript:autoplay()">自動播放</a> </body> </html> ``` ## 停止連續播放 * 可以停止輪流播放圖片 * 使用 clearInterval() * 把 setInterval() 的回傳值放進 clearInterval() 就可以停下來了 ```htmlmixed= <!DOCTYPE html> <html> <head> <script> i = 0; var x = ["http://1.bp.blogspot.com/-xdHGOG59LCI/UjawN7V-deI/AAAAAAAABb8/v3dHRriJkjo/s1600/EUCL%E4%B8%8A%E5%8F%B0%E9%A0%98%E7%8D%8E01.jpg", "http://4.bp.blogspot.com/-UKB9Pburh8I/Ujawb7t3wGI/AAAAAAAABcE/2h3OMM1sb-0/s1600/Frocius+Android%E4%B8%8A%E5%8F%B0%E9%A0%98%E7%8D%8E01.jpg", "http://4.bp.blogspot.com/-p-YNGTeHwM0/UjawjF1fwoI/AAAAAAAABcM/YrenoO-Mcg8/s1600/devabchb%E4%B8%8A%E5%8F%B0%E9%A0%98%E7%8D%8E01.jpg", "http://2.bp.blogspot.com/-xPreUlrSYv8/UjayQmzNzPI/AAAAAAAABcY/AxJVYPKmVxI/s1600/A+Team%E5%B1%95%E7%A4%BA%E6%94%A4%E4%BD%8D01.jpg" ] function f(y) { if (i + y < x.length && i + y >= 0) { i = i + y; document.getElementById("demo").innerHTML = "<img src='" + x[i] + "' width='100%'>" } else { alert("這裡沒有圖片囉!"); } } var play; function autoplay(){ play = setInterval(function(){ i++; i = (i + x.length) % x.length; document.getElementById("demo").innerHTML = "<img src='" + x[i] + "' width='100%'>" }, 3000) } function stopplay(){ clearInterval(play); } </script> </head> <body> <div id="demo"> <img src='http://1.bp.blogspot.com/-xdHGOG59LCI/UjawN7V-deI/AAAAAAAABb8/v3dHRriJkjo/s1600/EUCL%E4%B8%8A%E5%8F%B0%E9%A0%98%E7%8D%8E01.jpg' width='100%'> </div> <a href="javascript:f(-1);">上一張</a> <a href="javascript:f(1);">下一張</a> <a href="javascript:autoplay()">自動播放</a> <a href="javascript:stopplay()">停止播放</a> </body> </html> ``` setTimeout() 也可以達到與 setInterval() 類似的效果,唯一的差別是 setTimeout() 只會執行一次,setInterval() 則會週期性地不斷執行。 10/16 === ## 路徑 * 可以直接貼上圖片的網址 * 用絕對路徑的方法存取圖片 * 可以建立獨立的資料夾儲存圖片 ## 響應式網頁設計 Responsive Web Design * 跟據網頁的大小自己去調整 * 寫一種版本 多種裝置使用 ## Material Design * 由 google 提出 * https://materializecss.com/ ## Grid * 可以自定義 RWD 的 Grid * s12 ->「小」網頁的時候會占 12 格 * m6 -> 「中」網頁的時候會店 6 格 ```htmlmixed= <div class="row"> <div class="col s1">1</div> <div class="col s1">2</div> <div class="col s12 m6">3</div> </div> ``` ## Card ```htmlmixed= <div class="row"> <div class="col s12 m4"> <div class="card"> <div class="card-image"> <img src="img/dog1.jpg"> <span class="card-title">Card Title</span> </div> <div class="card-content"> <p>I am a very simple card. I am good at containing small bits of information. I am convenient because I require little markup to use effectively.</p> </div> <div class="card-action"> <a href="#">This is a link</a> </div> </div> </div> </div> ``` * 結果 ![](https://i.imgur.com/RiAC9xc.png) ## Color * 可以隨著網站風格不同 * 把網站換成不同顏色 ```htmlmixed= <nav> <div class="nav-wrapper blue darken-1"> <!-- 在後面后上顏色的名稱 --> <a href="#!" class="brand-logo center">Logo</a> <ul class="left hide-on-med-and-down"> <li><a href="sass.html">Sass</a></li> <li><a href="badges.html">Components</a></li> <li class="active"><a href="collapsible.html">JavaScript</a></li> </ul> </div> </nav> ``` ![](https://i.imgur.com/0ts2RWi.png) ## 使用 javascript 來一口氣放三張圖片 ```htmlmixed= <script> for (var i = 0; i < 3; i++) { document.getElementById("demo").innerHTML += '<div class="col s12 m3"> <div class="card"> <div class="card-image"> <img src="img/dog1.jpg"> <span class="card-title">Card Title</span> </div> <div class="card-content"> <p>I am a very simple card. I am good at containing small bits of information. I am convenient because I require little markup to use effectively.</p> </div> <div class="card-action"> <a href="#">This is a link</a> </div> </div> </div>' } </script> <script type="text/javascript" src="js/materialize.min.js"></script> ``` ![](https://i.imgur.com/PvoSdQh.png) * 稍微修改一下可以放三種不同的圖片 * 使用 array 去存 三個圖片的位置 ```htmlmixed= <script> var imgs = ["dog1", "dog2", "dog3"] for (var i = 0; i < 3; i++) { document.getElementById("demo").innerHTML += '<div class="col s12 m3"> <div class="card"> <div class="card-image"> <img src="img/' + imgs[i] + '.jpg"> <span class="card-title">Card Title</span> </div> <div class="card-content"> <p>I am a very simple card. I am good at containing small bits of information. I am convenient because I require little markup to use effectively.</p> </div> <div class="card-action"> <a href="#">This is a link</a> </div> </div> </div>' } </script> ``` ![](https://i.imgur.com/bZ4mX4V.png) Day 6 10/30 === ## tabletop.js * 使用 google 計算表來帢做 * 設成公開到網路上面 ![](https://i.imgur.com/ji2Xpeg.png) * 複製網址到 code 中 ## callback * 因為我們要呼叫的程式不知道什麼時候會跟 google 要到資料 * 所以有一個方法叫做 callback * 這樣就可以一直等到 google 有回應後再回傳給程式端 * windows.enentlistener ## 取得 tabletop 中的資料 * tabletop 把 google 試算表中的資料看成是一堆的陣列 * 並且回傳名稱為 data * 像剛剛的例子中 ![](https://i.imgur.com/ji2Xpeg.png) * data[0] 就是指第一行的資料 * data[0].name => 「張三」 * data[1].order => 「2」 ```htmlmixed= <head> <script type='text/javascript'> function init() { Tabletop.init( { key: publicSpreadsheetUrl, callback: showInfo, simpleSheet: true } ) } function showInfo(data, tabletop) { // alert('Successfully processed!') console.log(data); var str = ""; for (var i=0; i<data.length; i++) { // 於Google Spreadsheet建立的範例資料A欄命名為name、B欄命名為telephone、c欄命名為lunchbox、d欄命名為order str += data[i].name + "(" + data[i].telephone + ")" + " 訂 " + data[i].lunchbox + " : " + data[i].order + "個 <br />"; } document.getElementById("demo").innerHTML = str; } window.addEventListener('DOMContentLoaded', init) </script> <head> ``` ## 使用 google 表單來填寫資料 * google 表單可以把一些欄位的回答匯出到 google 試算表中 * 也就是說我可以用之前的方法來存到別人表單中填寫的問題 * 記得要先把表單跟試算表做連結 ![](https://i.imgur.com/xrmAcui.png) * 現在我們有一個表單中的資料 ![](https://i.imgur.com/kmHsVgZ.png) * 我們可以在試算表中看到別人的回應了 ![](https://i.imgur.com/ec2WFDy.png) Day 7 11/20 === ## 痞客幫 API * 我們可以從網路上面找到已經有其他人寫好的 API 可以直接去使用它 * 下面是 痞客邦 API 的 Manual * https://developer.pixnet.pro/#!/doc/pixnetApi/mainpageBlogCategories ## json * 我們去 call 這個網址後 * 會得到一坨 json 格式的資料 * https://emma.pixnet.cc/mainpage/blog/categories/hot/23?page=1&per_page=10&api_version=2&format=json * 再去 online json parser 整理一下可以看到這個 ![](https://i.imgur.com/KvIWwd7.png) ## httpRequest * http Request 是一個可以透過網址來進行操作的一個方法 * 一共有四種操作 * GET POST ... * 我們可以利用 httpRequest 來把剛剛的 API 中的 json 檔存取進來 * 再利用 javascript 中讀 json 檔的方法把我們想要的檔案拿出來 * myArr[i]./<json/> ```javascript= <div id="id01"></div> <script> var xmlhttp = new XMLHttpRequest(); var url = "myTutorials.txt"; xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { var myArr = JSON.parse(this.responseText); myFunction(myArr); } }; xmlhttp.open("GET", url, true); xmlhttp.send(); function myFunction(arr) { var out = ""; var i; for(i = 0; i < arr.length; i++) { // 存取 json 的地方 out += '<a href="' + arr[i].url + '">' + arr[i].display + '</a><br>'; } document.getElementById("id01").innerHTML = out; } </script> ``` ## Call Api * 下面是 call 痞客幫出來的結果 ```javascript= <!DOCTYPE html> <html> <head> <script> var xmlhttp = new XMLHttpRequest(); var url = "https://emma.pixnet.cc/mainpage/blog/categories/hot/23?page=1&per_page=10&api_version=2&format=json"; xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { var myArr = JSON.parse(xmlhttp.responseText); myFunction(myArr); } } xmlhttp.open("GET", url, true); xmlhttp.send(); function myFunction(arr) { var data = arr.articles; var out = ""; var i; for (i = 0; i < data.length; i++) { if ( data[i].title != "" ) out += '<p><a href="' + data[i].link + '" target="_blank">' + data[i].title + '</a></p>'; out += '<p> </p>'; if ( data[i].tags.length != 0 ) { out += '<p>Tags: '; for (j = 0; j < data[i].tags.length; j++) { out += data[i].tags[j].tag + ', '; } out += '</p>'; } out += '<br /><br /><br />'; } document.getElementById("pixnet-stuff").innerHTML = out; } </script> </head> <body> <div id="pixnet-stuff"> </div> </body> </html> ``` ![](https://i.imgur.com/dZ5aI9Q.png) ## call 熱門文章 Api * Api 網址 * https://emma.pixnet.cc/mainpage/blog/categories/hot/28?page=1&per_page=10&api_version=2&format=json ```javascript= <!DOCTYPE html> <html> <head> <script> var xmlhttp = new XMLHttpRequest(); var url = "https://emma.pixnet.cc/mainpage/blog/categories/hot/28?page=1&per_page=10&api_version=2&format=json"; xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { var myArr = JSON.parse(xmlhttp.responseText); myFunction(myArr); } } xmlhttp.open("GET", url, true); xmlhttp.send(); function myFunction(arr) { var data = arr.articles; var out = ""; var i; for (i = 0; i < data.length; i++) { if ( data[i].thumb != "" ) out += '<img src="' + data[i].thumb + '" />'; if ( data[i].title != "" ) out += '<p><a href="' + data[i].link + '" target="_blank">' + data[i].title + '</a></p>'; if ( data[i].address != undefined ) out += '<p><a href="https://www.google.com.tw/maps?daddr=' + data[i].address + '" target="_blank">' + data[i].address + '</a></p>'; out += '<p> </p>'; out += '<br /><br /><br />'; } document.getElementById("pixnet-stuff").innerHTML = out; } </script> </head> <body> <div id="pixnet-stuff"> </div> </body> </html> ``` Day 8 11/27 === - simple map ```javascript= <!DOCTYPE html> <html> <head> <meta charset='utf-8' /> <title>Display a map</title> <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' /> <script src='https://api.tiles.mapbox.com/mapbox-gl-js/v1.5.0/mapbox-gl.js'></script> <link href='https://api.tiles.mapbox.com/mapbox-gl-js/v1.5.0/mapbox-gl.css' rel='stylesheet' /> <style> body { margin: 0; padding: 0; } #map { position: absolute; top: 0; bottom: 0; width: 100%; }; </style> </head> <body> <div id='map'></div> <script> mapboxgl.accessToken = 'pk.eyJ1IjoiY2hlbnl1eWkiLCJhIjoiY2l1ZWoxemx6MDAweTJ5cHI3NHNnajR2NiJ9.cNpWK-0HoYbcumuQ8yvbjQ'; var map = new mapboxgl.Map({ container: 'map', // container id style: 'mapbox://styles/mapbox/streets-v11', // stylesheet location center: [-74.50, 40], // starting position [lng, lat] zoom: 9 // starting zoom }); </script> </body> </html> ``` - marker ```javascript= <!DOCTYPE html> <html> <head> <meta charset='utf-8' /> <title>Create a draggable Marker</title> <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' /> <script src='https://api.tiles.mapbox.com/mapbox-gl-js/v1.5.0/mapbox-gl.js'></script> <link href='https://api.tiles.mapbox.com/mapbox-gl-js/v1.5.0/mapbox-gl.css' rel='stylesheet' /> <style> body { margin: 0; padding: 0; } #map { position: absolute; top: 0; bottom: 0; width: 100%; }; </style> </head> <body> <style> .coordinates { background: rgba(0,0,0,0.5); color: red; position: absolute; bottom: 40px; left: 10px; padding:5px 10px; margin: 0; font-size: 11px; line-height: 18px; border-radius: 3px; display: none; } </style> <div id='map'></div> <pre id='coordinates' class='coordinates'></pre> <script> mapboxgl.accessToken = 'pk.eyJ1IjoiY2hlbnl1eWkiLCJhIjoiY2l1ZWoxemx6MDAweTJ5cHI3NHNnajR2NiJ9.cNpWK-0HoYbcumuQ8yvbjQ'; var coordinates = document.getElementById('coordinates'); var map = new mapboxgl.Map({ container: 'map', style: 'mapbox://styles/mapbox/streets-v11', center: [120.675326, 24.123552], zoom: 15 }); var marker = new mapboxgl.Marker({ draggable: true }) .setLngLat([120.6741373,24.121052]) .addTo(map); function onDragEnd() { var lngLat = marker.getLngLat(); coordinates.style.display = 'block'; coordinates.innerHTML = 'Longitude: ' + lngLat.lng + '<br />Latitude: ' + lngLat.lat; } marker.on('dragend', onDragEnd); </script> </body> </html> ``` Day 9 12/4 === ## Google Map API * Google Map 導航功能網址 * 如果要做導航功能的話只需要知道起點及終點座就可以囉 * API 如下面的例子 * http://maps.google.com.tw/maps?saddr=起點經緯度座標或地址&daddr=終點經緯度座標或地址 * 加了一點點的網頁 ```htmlmixed= <head> <body> <a href="http://maps.google.com.tw/maps?saddr=24.121308,120.677175&amp;daddr=24.118733,120.672583" target="_blank"><span style="color: blue;">導航!</span></a> </body> </head> ``` * 再加了一點點的前端傳參數(傳終點座標) ```htmlmixed= <head> <body> <a href="http://maps.google.com.tw/maps?saddr=24.121308,120.677175&amp;daddr=24.118733,120.672583" target="_blank"><span style="color: blue;">導航!</span></a> <div id="demo"> </div> <script type="text/javascript"> function GetUrlVar(VarName) { name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); var regexS = "[\\?&]" + VarName + "=([^&#]*)"; var regex = new RegExp(regexS); var results = regex.exec(window.location.href); if (results == null) return ""; else return results[1]; } var a = "24.121308,120.677175" var b = decodeURIComponent(GetUrlVar('xxx')) var s = '<a href="http://maps.google.com.tw/maps?saddr=' + a + '&amp;daddr=' + b + '" target="_blank"><span style="color: blue;">導航!</span></a>' document.getElementById("demo").innerHTML = s </script> </body> </head> ``` ## 起點位置改用手機定位位置 * 我們平常常說的 GPS 其實不太正確 * 正常手機上日使用的是「基地台定位」 * 在 html 上取得位置的方法 ```htmlmixed= function getLocation() { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(showPosition); } else { x.innerHTML = "Geolocation is not supported by this browser."; } } ``` # Final Project > Time: 12/25 ~ - 主題、內容完整 - 版面漂亮 - CSS - 技術面要盡量涵蓋之前教的所有東西