發表文章

目前顯示的是 10月, 2019的文章

JS趴趴往上走-HTMLElement.dataset

<ul> <li data-num="1" data-item="one" class="number">數字1</li> <li data-num="2" data-item="two" class="number">數字2</li> <li data-num="3" data-item="three" class="number">數字3</li> </ul> 在有些網頁裡會看到 data-* 的屬性,但這是什麼呢?又能幹嘛 HTMLElement.dataset 其實 data-* 是一種可以自定義的屬性,可以幫助工程師在HTML上自創屬性來綁定和驗證資料 data-* 有幾個規則 dash後面的 * 屬性名稱不能使用大寫字母,e.g.data-Num或者data-Size...等 * 不能包含分號 * 絕對不能以 xml 起頭,無論是否用於 xml data-* 的應用 當你想取出 data-* 的值,JS上你可以使用 dateset 物件取值 var num=document.querySelectorAll('.number'); //取多個data-* console.log(num[0].dataset);//{item:"0",num:"1"} //取一個data-*,在後面填寫data-*的屬性 console.log(num[0].dataset.num); //1 另外範例:把JS上的陣列渲染到HTML上 See the Pen JS-data-*應用 by yanennn ( @yennnnn ) on CodePen . 另外也可以使用 data-* 取得特定元素的CSS ul li[data-item="one"]{ color:red; } ul li[data-item="two"]{ co

JS趴趴往上走-localStorage

圖片
Web Storage Web Storage是一種能在HTML5中能讓網頁資料儲存於本地端的技術,使用key / value pair的方式 給值或取值,其作用和cookie很像,相起cookie只有4KB的儲存空間,Web Storage擁有5MB空間,但是只有高版本的瀏覽器才能支持,只能儲存字串 Web Storage分為兩種: 1.localStorage 2.sessionStorage 其主要差異儲存在localStorage的資料可以一直保存,即使關閉視窗或者分頁,資料依然不會消失;反之sessionStorage則是只要關閉瀏覽器或者分頁資料就會消失 localStorage的使用 存儲Storage: 新增/更新資料 //'mylocal'為key,hi為你要儲存的value localStorage.setItem('mylocal', 'hi'); 產生的結果就像下面那張圖 讀取Storage: 讀取存放在localStorahe的資料 //取得存放在mylocal鍵值的value localStorage.getItem("mylocal") 刪除Storage: 刪除資料 //刪除存放於key(mylocal)和value localStorage.removeItem('mylocal'); 全部刪除: //localStorage內的key/vlaue全部清空 localStorage.clear(); 將JSON存儲到localStorage裏 上面有提到儲存在Web Storage內的值只能是字串,當你使用其他型別存資料,使用getItem取資料你會發現都會變成字串(String) var test=124; var test2='hiiii'; var test3=true; var test4=[5,6,7,'hoo']; var test5={a:124,b:'yoooo'} localStorage.setItem('mylocal', test); localStorage.setItem('my

JS趴趴往上走-Event Object

Event Object 還記得當我們要監聽事件時,會使用 addEventListener() 也就是我們的事件處理器(Event Handler),這時候事件被觸發,瀏覽器就會為創造一個物件,就是我們稱為的的事件物件(Event Object),裏面包含了所有與這個事件有關的屬性,並已參數形式傳給事件處理器,像是 e.preventDefault() 或者 e.stopPropagation() 也屬於事件物件 當使用者點擊時觸發事件( e 為參數,可以自行定義名稱) //html <button class="btn">點擊按鈕</button> //JS btn=document.querySelector('.btn'); btn.addEventListener('click',function(e){ console.log(e); },false); 點擊 button 後產生的結果,會發現 e 所代表的就是我們觸發的事件物件(Event Object) 接下來來介紹一些事件物件: target:了解目前所在元素位置 target 再打開可以發現它也有事件物件可以使用,例如此範例的 e.target.Nodename :了解目前的節點名稱(請點進去看console.log喔) See the Pen e.target by yanennn ( @yennnnn ) on CodePen . 了解 screen、page、client箇中差異 screen :使用者整個顯示器的位置 page :當前網頁的相對位置 client :當前網頁中區域的位置 首先給個範例: See the Pen screen、page、client箇中差異 by yanennn ( @yennnnn ) on CodePen . 使用滑鼠移動看看, sceen 的數字都比其他兩個大一些,也就是說它也把不屬於網頁的地方也計算了進去,而 page 和 client 從左上角開始X,Y就為0表示它們只計算網頁位置;接下來試著滾動卷軸,就能看出 page 的Y數字變大了,也就是說它會計算此網頁的大小,而 page 只會計算你當前網頁的大

JS地下城-2F時鐘

新手JS-地下城:2F-時鐘 紀錄一下這次使用的 Canvas See the Pen 2F-Clock by yanennn ( @yennnnn ) on CodePen . 不知道Canvas如何使用的人可以參考 六角學院-使用Canvas製作遊戲 並搭配 MDN 會加深很大的印象 前置作業: 首先在html使用 canvas 標籤,像是再瀏覽器產生一個固定大小的繪圖畫布,當瀏覽器抓到 canvas 了,再來就是要告知它要使用何種方式渲染環境,在這邊我們是使用平面繪圖,所以 getContext 就要輸入2d。 接著輸入你畫布的尺寸,在這邊是要全部瀏覽器都是畫布,所以使用 widow.innerWidth 、 window.innerHeight var mycanvas=document.querySelector('#canvas'); var ctx = mycanvas.getContext("2d"); var ww=window.innerWidth; var wh=window.innerHeight; mycanvas.width=ww; mycanvas.height=wh; 這邊要提醒,繪製一個圖形我們需要以下步驟: 1.ctx.save();儲存 2.ctx.beginPath();開始繪圖 3.ctx.restore();復原上一階段 當開始繪畫後,首先我們要先儲存當前狀態,畫完後使用 ctx.restore() 還原狀態,才不會導致之後的圖會因為剛剛的動作導致重複或者飄移,再來每當要畫一個地方就要使用 beginPath 產生一個新路徑,告訴JS說我要開始畫圖了,那有一個 ctx.closePath() 關閉路徑,這個方法會在現在所在點到起始點間畫一條直線以閉合圖形,如果圖形已經閉合或是只含一個點,這個方法不會有任何效果。 在這邊介紹幾個常見功能 1.填色: fillStyle實心顏色、SrokeStyle空心顏色,有使用填色後面要記得使用 fill() 、 stroke() 表示結束 2.lineWidth(線寬): lineWidth=2 表示你要使用的線寬是2 3.moveTo(x,y):移動到哪個座標

JS趴趴往上走-Events

圖片
Events 在之前我們曾經介紹過如何監聽事件,接著我們來說可以使用EventTarget.addEventListener()我們可以使用的type有哪些 下面介紹會以自行學過而新增,若想知道更多可到 MDN 或者 W3C 查看哦~ clcik事件 on-處理器: onclick 當使用者點擊時觸發事件 //html <button class="btn">點擊按鈕</button> //JS btn=document.querySelector('.btn'); btn.addEventListener('click',function(){ alert("我被點擊了"); },false); change事件 on-處理器: onchange 當使用者對目標元素做更改時而觸發事件 See the Pen JS-Change練習 by yanennn ( @yennnnn ) on CodePen . blur事件 on-處理器: onblur 當使用者離開 input 時沒寫入任何值觸發事件提醒 See the Pen JS-blur事件練習 by yanennn ( @yennnnn ) on CodePen . mousemove事件 on-處理器: onmousemove 當使用者把滑鼠移到目標時觸發事件 See the Pen JS-mousemove練習 by yanennn ( @yennnnn ) on CodePen . 以上,還有其他event Wibibi

JS趴趴往上走-Event.preventDefault()

Event.preventDefault() 上次提到了Event.stopPropagation(),它是能阻止事件傳遞, Event.preventDefault() 則是能取消「默認事件」 Event.preventDefault() :可以取消該元素的預設行為,但不會影響事件的傳遞 我們使用 a 來舉例子 <a href="https://tw.yahoo.com/">連結到yahoo!</a> 上面範例以正常來說,點擊後會跳轉到yahoo頁面 這時若當你不想要 a 再去連結網頁時,就可加入Event.preventDefault()使它取消默認事件 See the Pen e.preventDefault() by yanennn ( @yennnnn ) on CodePen . 尤其是我們在某些時候,會使用 a 觸發事件,即使我們使用 href="#" ,也是會觸發它的默認事件,這時就可以使用Event.preventDefault()取消預設行為 而且不止 a 連結,也有其他元素也是會有預設事件,例如:表單的 submit ..等 雖說可以取消行為, 但是不會影響事件傳遞 ,假如說以上面範例來說,你在 div 也有綁定事件,當你點擊 a 也是會被觸發哦 See the Pen e.preventDefault()還是會傳遞事件 by yanennn ( @yennnnn ) on CodePen .

JS趴趴往上走-DOM傳遞機制

圖片
Event Bubbling & Event Capturing 要了解捕獲與冒泡機制之前首先我們要知道事件是怎麼處理的 大家還記得DOM是一層一層下來的 <html> <head> <title>網頁標題</title> </head> <body> <h1>Header</h1> <a href="#">快速連結</a> </body> </html> 對應的的圖片: 而他們重疊的樣子就是 所以當你點擊目標( target )時,在這邊我們假設點擊了 <a> 連結,其實除了 <a> 被點擊之外,包含它的 <body> 其實也被點擊了哦, <html> 、 document 也被點擊了,會一層一層往上找 所以我們可以知道點擊了一個 <a> ,有包覆它的元素也會跟著被點擊,可以說是整個網頁都被點擊了! 那麼除了目標之外,有包覆著他的都會被點擊,那它們是誰先傳遞續訊息呢? DOM在傳遞訊息順序有兩種方法: 事件冒泡 Event Bubbling 事件捕獲 Event Capturing Event Bubbling 事件冒泡是指,當您點擊目標元素後,會一層一層往上傳遞,直到最上面的根結點,就是我們的 document 以下面範例來說: <html> <head> <title>網頁標題</title> </head> <body> <ul> <li></li> <li></li> <li><a href="#"></a></li> </ul> </body> </html> 當我們點擊

JS趴趴往上走-addEventListener()

EventTarget.addEventListener() 能將指定的事件監聽到 EventTarget物件上 簡單來說就是當使用者觸發HTML的元素,可使用監聽去觸發不同事件 //綁定被觸發的變數.監聽('觸發事件',執行內容,捕獲/冒泡傳遞機制); test.addEventListener(type,listener,useCapture); 例如:點擊 button ,回傳hello 首先設置一個 button <button id="btn">點我</button> 點擊 button 使用 EventTarget.addEventListener() 監聽,回傳Hello var btn=document.getElementById('btn'); btn.addEventListener('click',function(){ console.log('Hello'); },false); on-event處理器 除了使用 addEventListener() 觸發事件,也可以使用 on-event 處理器觸發事件 通常是根據它的屬性事件(on+屬性名)來對應所觸發的事件 var btn=document.getElementById('btn'); btn.onclick=function(){ console.log('Hello'); } 但使用 on-event 處理器只能執行一個事件 var btn=document.getElementById('btn'); btn.onclick=function(){ console.log('Hello'); } btn.onclick=function(){ console.log('Hiiiiiiii'); } 以上範例就只會產生 Hiiiiiiii 而相對於 addEventListener() ,能處理多個相同的事件 var btn=document.getElementById(&

六角同學會心得

圖片
這次心得會像寫日記那樣,小冗長又無趣,想說做個紀念: ) 09/30參加六角同學會,在還沒參加前內心其實閃過很多小劇場ww,會發生甚麼事,會有什麼人...等之類的,帶著既期待又好奇的心情去看看 那天下午微熱,想說自己會不會穿太多(穿長袖),還好現場不會很熱,進去後看到一堆人已經到場了!大家都好踴躍,我也開始找位子就坐,剛好選到講台最旁邊等活動開始,結果準備開始前洧傑老師竟然下台找我們聊了一下!!!超級驚訝,雖然只是閒聊一下,但對我來說我超緊張的,就好像遇到電視上的人那樣,很興奮 介紹六角學院的發展,我覺得他們真的很用心,能為學員想的很多,像是最近出的接案,就很受用,若是未來有機會能接到,一定對我很有幫助!! 在學長姊經驗談這一部分,了解每個人的面試、轉職的部分,希望哪天我也能像他們一樣走的那麼高那麼遠ww 接下來是 老師學員聊天時間,對於這邊我就比較可惜,因為不敢搭訕人,所以就也沒有接觸到其他學員,但在旁邊看大家都好熱絡!尤其是老師旁邊滿滿一堆人 接著是遊戲: 誰是前端王 其實沒想到我會拿到獎品,當初想說應該後面就會被刷掉,結果就這樣存活到最後一題,之後還跟我朋友競爭2、3名! 轉蛋 可惜只有轉到貼紙~~ 最後,一路參加下來我覺得蠻有趣的,不會很乾也不會無聊!雖然很可惜和他人交流很少,但至少是有些收穫的 然後也謝謝我朋友願意陪我一起來: )