發表文章

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> 當我們點擊 ...