發表文章

JS趴趴往上走-BOM

圖片
BOM BOM(Browser Object Model,瀏覽器物件模型)是用來操作瀏覽器功能,BOM沒有自己的一套規範,不像JavaScript的規範是ECMAScript而DOM的規範是W3C,在DOM模型還沒出現前BOM模型就已經存在了,所以也可以被稱為Level 0 DOM BOM主要核心為window物件,所有的BOM都可透過window來存取,也就是在ECMAScript的全域變數擔任重要腳色,負責管理JavaScript和瀏覽器的通訊,而window物件提供的屬性主要為: document 、 location 、 navigator 、 screen 、 history 、 frames 由於window是最頂層的物件,所以呼叫window下屬/方法可不必明確指明window 例如我們在全域變數宣告一個 a ; 但它其實是 window.a var a=123; console.log(a);//123 console.log(window.a);//123 還有我們常用的 alert() 也是window下的函式方法 var a=123; alert(a);//123 alert(window.a);//123 示範部分window屬性 window.history 提供了進入瀏覽歷史的方式,可以在歷史紀錄中回上一步或到下一步 回到上一頁: window.history.back(); 移動到下一頁: window.history.forward(); 或者使用 go() 從頁面的 session history紀錄中載入特定紀錄,以目前頁面的相對位置而定使前往上一頁或下一頁 //回到上一頁 window.history.go(-1); //刷新本頁 window.history.go(0); //移動到下一頁 window.history.go(1); window.print() 列印功能 可放進函式,觸發此屬性 function myPrint() { window.print(); } myPrint(); window.location 可獲得當前頁面網址,並將瀏覽器重定到新頁面;除了可以跳轉...

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 .