程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
兼容性
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
兼容性
12、battery state
獲取設備的電池狀態
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
navigator.getBattery().then(battery => console.log(battery));
// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}
使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失
兼容性
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
兼容性
12、battery state
獲取設備的電池狀態
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
navigator.getBattery().then(battery => console.log(battery));
// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}
使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失
兼容性
13、vibration
使設備進行震動,更貼近原生應用開發:
// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);
使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶
兼容性
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
兼容性
12、battery state
獲取設備的電池狀態
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
navigator.getBattery().then(battery => console.log(battery));
// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}
使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失
兼容性
13、vibration
使設備進行震動,更貼近原生應用開發:
// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);
使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶
兼容性
14、page visibility
有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。
大家好不好奇,是如何監聽到頁面的變化?
page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了♂️
document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});
PC端效果如下
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
兼容性
12、battery state
獲取設備的電池狀態
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
navigator.getBattery().then(battery => console.log(battery));
// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}
使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失
兼容性
13、vibration
使設備進行震動,更貼近原生應用開發:
// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);
使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶
兼容性
14、page visibility
有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。
大家好不好奇,是如何監聽到頁面的變化?
page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了♂️
document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});
PC端效果如下
移動端效果如下
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
兼容性
12、battery state
獲取設備的電池狀態
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
navigator.getBattery().then(battery => console.log(battery));
// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}
使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失
兼容性
13、vibration
使設備進行震動,更貼近原生應用開發:
// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);
使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶
兼容性
14、page visibility
有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。
大家好不好奇,是如何監聽到頁面的變化?
page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了♂️
document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});
PC端效果如下
移動端效果如下
使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停
兼容性
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
兼容性
12、battery state
獲取設備的電池狀態
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
navigator.getBattery().then(battery => console.log(battery));
// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}
使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失
兼容性
13、vibration
使設備進行震動,更貼近原生應用開發:
// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);
使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶
兼容性
14、page visibility
有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。
大家好不好奇,是如何監聽到頁面的變化?
page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了♂️
document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});
PC端效果如下
移動端效果如下
使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停
兼容性
15、deviceOrientation
陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
兼容性
12、battery state
獲取設備的電池狀態
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
navigator.getBattery().then(battery => console.log(battery));
// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}
使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失
兼容性
13、vibration
使設備進行震動,更貼近原生應用開發:
// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);
使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶
兼容性
14、page visibility
有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。
大家好不好奇,是如何監聽到頁面的變化?
page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了♂️
document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});
PC端效果如下
移動端效果如下
使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停
兼容性
15、deviceOrientation
陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https
從左到右分別為alpha、beta、gamma;
window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});
移動端效果如下(此時手機在不停的轉動)
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
兼容性
12、battery state
獲取設備的電池狀態
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
navigator.getBattery().then(battery => console.log(battery));
// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}
使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失
兼容性
13、vibration
使設備進行震動,更貼近原生應用開發:
// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);
使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶
兼容性
14、page visibility
有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。
大家好不好奇,是如何監聽到頁面的變化?
page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了♂️
document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});
PC端效果如下
移動端效果如下
使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停
兼容性
15、deviceOrientation
陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https
從左到右分別為alpha、beta、gamma;
window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});
移動端效果如下(此時手機在不停的轉動)
使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動
兼容性
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
兼容性
12、battery state
獲取設備的電池狀態
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
navigator.getBattery().then(battery => console.log(battery));
// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}
使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失
兼容性
13、vibration
使設備進行震動,更貼近原生應用開發:
// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);
使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶
兼容性
14、page visibility
有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。
大家好不好奇,是如何監聽到頁面的變化?
page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了♂️
document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});
PC端效果如下
移動端效果如下
使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停
兼容性
15、deviceOrientation
陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https
從左到右分別為alpha、beta、gamma;
window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});
移動端效果如下(此時手機在不停的轉動)
使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動
兼容性
16、orientation
可以監聽用戶手機設備的旋轉方向變化;
window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);
效果如下:
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
兼容性
12、battery state
獲取設備的電池狀態
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
navigator.getBattery().then(battery => console.log(battery));
// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}
使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失
兼容性
13、vibration
使設備進行震動,更貼近原生應用開發:
// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);
使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶
兼容性
14、page visibility
有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。
大家好不好奇,是如何監聽到頁面的變化?
page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了♂️
document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});
PC端效果如下
移動端效果如下
使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停
兼容性
15、deviceOrientation
陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https
從左到右分別為alpha、beta、gamma;
window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});
移動端效果如下(此時手機在不停的轉動)
使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動
兼容性
16、orientation
可以監聽用戶手機設備的旋轉方向變化;
window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);
效果如下:
也可以使用css的媒體查詢:
/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}
使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP
兼容性
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
兼容性
12、battery state
獲取設備的電池狀態
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
navigator.getBattery().then(battery => console.log(battery));
// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}
使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失
兼容性
13、vibration
使設備進行震動,更貼近原生應用開發:
// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);
使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶
兼容性
14、page visibility
有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。
大家好不好奇,是如何監聽到頁面的變化?
page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了♂️
document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});
PC端效果如下
移動端效果如下
使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停
兼容性
15、deviceOrientation
陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https
從左到右分別為alpha、beta、gamma;
window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});
移動端效果如下(此時手機在不停的轉動)
使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動
兼容性
16、orientation
可以監聽用戶手機設備的旋轉方向變化;
window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);
效果如下:
也可以使用css的媒體查詢:
/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}
使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP
兼容性
17、toDataURL
這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;
let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址
使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽
<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>
效果如下:
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
兼容性
12、battery state
獲取設備的電池狀態
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
navigator.getBattery().then(battery => console.log(battery));
// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}
使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失
兼容性
13、vibration
使設備進行震動,更貼近原生應用開發:
// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);
使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶
兼容性
14、page visibility
有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。
大家好不好奇,是如何監聽到頁面的變化?
page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了♂️
document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});
PC端效果如下
移動端效果如下
使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停
兼容性
15、deviceOrientation
陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https
從左到右分別為alpha、beta、gamma;
window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});
移動端效果如下(此時手機在不停的轉動)
使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動
兼容性
16、orientation
可以監聽用戶手機設備的旋轉方向變化;
window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);
效果如下:
也可以使用css的媒體查詢:
/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}
使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP
兼容性
17、toDataURL
這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;
let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址
使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽
<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>
效果如下:
封裝以下代碼便可解決
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
兼容性
12、battery state
獲取設備的電池狀態
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
navigator.getBattery().then(battery => console.log(battery));
// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}
使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失
兼容性
13、vibration
使設備進行震動,更貼近原生應用開發:
// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);
使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶
兼容性
14、page visibility
有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。
大家好不好奇,是如何監聽到頁面的變化?
page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了♂️
document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});
PC端效果如下
移動端效果如下
使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停
兼容性
15、deviceOrientation
陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https
從左到右分別為alpha、beta、gamma;
window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});
移動端效果如下(此時手機在不停的轉動)
使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動
兼容性
16、orientation
可以監聽用戶手機設備的旋轉方向變化;
window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);
效果如下:
也可以使用css的媒體查詢:
/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}
使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP
兼容性
17、toDataURL
這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;
let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址
使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽
<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>
效果如下:
封裝以下代碼便可解決
效果如下:
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
兼容性
12、battery state
獲取設備的電池狀態
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
navigator.getBattery().then(battery => console.log(battery));
// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}
使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失
兼容性
13、vibration
使設備進行震動,更貼近原生應用開發:
// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);
使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶
兼容性
14、page visibility
有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。
大家好不好奇,是如何監聽到頁面的變化?
page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了♂️
document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});
PC端效果如下
移動端效果如下
使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停
兼容性
15、deviceOrientation
陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https
從左到右分別為alpha、beta、gamma;
window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});
移動端效果如下(此時手機在不停的轉動)
使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動
兼容性
16、orientation
可以監聽用戶手機設備的旋轉方向變化;
window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);
效果如下:
也可以使用css的媒體查詢:
/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}
使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP
兼容性
17、toDataURL
這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;
let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址
使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽
<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>
效果如下:
封裝以下代碼便可解決
效果如下:
或者將當前的DOM轉換成圖片進行下載,常用於生成海報: 如html2canvas庫
兼容性
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
兼容性
12、battery state
獲取設備的電池狀態
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
navigator.getBattery().then(battery => console.log(battery));
// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}
使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失
兼容性
13、vibration
使設備進行震動,更貼近原生應用開發:
// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);
使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶
兼容性
14、page visibility
有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。
大家好不好奇,是如何監聽到頁面的變化?
page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了♂️
document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});
PC端效果如下
移動端效果如下
使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停
兼容性
15、deviceOrientation
陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https
從左到右分別為alpha、beta、gamma;
window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});
移動端效果如下(此時手機在不停的轉動)
使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動
兼容性
16、orientation
可以監聽用戶手機設備的旋轉方向變化;
window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);
效果如下:
也可以使用css的媒體查詢:
/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}
使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP
兼容性
17、toDataURL
這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;
let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址
使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽
<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>
效果如下:
封裝以下代碼便可解決
效果如下:
或者將當前的DOM轉換成圖片進行下載,常用於生成海報: 如html2canvas庫
兼容性
18、customEvent
自定義事件,就跟vue裡面的on跟emit一樣;
監聽自定義事件:
window.addEventListener("follow", event => {
console.log(event.detail); // 輸出 {name: "前端宇宙情報局"}
});
派發自定義事件:
window.dispatchEvent(new CustomEvent("follow", {
detail: {
name: "前端宇宙情報局"
}
}));
兼容性
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
兼容性
12、battery state
獲取設備的電池狀態
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
navigator.getBattery().then(battery => console.log(battery));
// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}
使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失
兼容性
13、vibration
使設備進行震動,更貼近原生應用開發:
// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);
使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶
兼容性
14、page visibility
有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。
大家好不好奇,是如何監聽到頁面的變化?
page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了♂️
document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});
PC端效果如下
移動端效果如下
使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停
兼容性
15、deviceOrientation
陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https
從左到右分別為alpha、beta、gamma;
window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});
移動端效果如下(此時手機在不停的轉動)
使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動
兼容性
16、orientation
可以監聽用戶手機設備的旋轉方向變化;
window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);
效果如下:
也可以使用css的媒體查詢:
/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}
使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP
兼容性
17、toDataURL
這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;
let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址
使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽
<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>
效果如下:
封裝以下代碼便可解決
效果如下:
或者將當前的DOM轉換成圖片進行下載,常用於生成海報: 如html2canvas庫
兼容性
18、customEvent
自定義事件,就跟vue裡面的on跟emit一樣;
監聽自定義事件:
window.addEventListener("follow", event => {
console.log(event.detail); // 輸出 {name: "前端宇宙情報局"}
});
派發自定義事件:
window.dispatchEvent(new CustomEvent("follow", {
detail: {
name: "前端宇宙情報局"
}
}));
兼容性
19、notification
PC端的桌面通知,如網頁端的微信,當收到消息時,右下角會出現一個通知(儘管你把瀏覽器最小化),因為這個通知時獨立於瀏覽器的,是系統的一個原生控件;
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
兼容性
12、battery state
獲取設備的電池狀態
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
navigator.getBattery().then(battery => console.log(battery));
// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}
使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失
兼容性
13、vibration
使設備進行震動,更貼近原生應用開發:
// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);
使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶
兼容性
14、page visibility
有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。
大家好不好奇,是如何監聽到頁面的變化?
page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了♂️
document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});
PC端效果如下
移動端效果如下
使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停
兼容性
15、deviceOrientation
陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https
從左到右分別為alpha、beta、gamma;
window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});
移動端效果如下(此時手機在不停的轉動)
使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動
兼容性
16、orientation
可以監聽用戶手機設備的旋轉方向變化;
window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);
效果如下:
也可以使用css的媒體查詢:
/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}
使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP
兼容性
17、toDataURL
這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;
let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址
使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽
<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>
效果如下:
封裝以下代碼便可解決
效果如下:
或者將當前的DOM轉換成圖片進行下載,常用於生成海報: 如html2canvas庫
兼容性
18、customEvent
自定義事件,就跟vue裡面的on跟emit一樣;
監聽自定義事件:
window.addEventListener("follow", event => {
console.log(event.detail); // 輸出 {name: "前端宇宙情報局"}
});
派發自定義事件:
window.dispatchEvent(new CustomEvent("follow", {
detail: {
name: "前端宇宙情報局"
}
}));
兼容性
19、notification
PC端的桌面通知,如網頁端的微信,當收到消息時,右下角會出現一個通知(儘管你把瀏覽器最小化),因為這個通知時獨立於瀏覽器的,是系統的一個原生控件;
注意:想要成功的調起通知,首先要用戶的授權
Notification.requestPermission(prem => {
prem == "granted" // 同意
prem == "denied" // 拒絕
})
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
兼容性
12、battery state
獲取設備的電池狀態
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
navigator.getBattery().then(battery => console.log(battery));
// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}
使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失
兼容性
13、vibration
使設備進行震動,更貼近原生應用開發:
// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);
使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶
兼容性
14、page visibility
有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。
大家好不好奇,是如何監聽到頁面的變化?
page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了♂️
document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});
PC端效果如下
移動端效果如下
使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停
兼容性
15、deviceOrientation
陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https
從左到右分別為alpha、beta、gamma;
window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});
移動端效果如下(此時手機在不停的轉動)
使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動
兼容性
16、orientation
可以監聽用戶手機設備的旋轉方向變化;
window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);
效果如下:
也可以使用css的媒體查詢:
/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}
使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP
兼容性
17、toDataURL
這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;
let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址
使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽
<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>
效果如下:
封裝以下代碼便可解決
效果如下:
或者將當前的DOM轉換成圖片進行下載,常用於生成海報: 如html2canvas庫
兼容性
18、customEvent
自定義事件,就跟vue裡面的on跟emit一樣;
監聽自定義事件:
window.addEventListener("follow", event => {
console.log(event.detail); // 輸出 {name: "前端宇宙情報局"}
});
派發自定義事件:
window.dispatchEvent(new CustomEvent("follow", {
detail: {
name: "前端宇宙情報局"
}
}));
兼容性
19、notification
PC端的桌面通知,如網頁端的微信,當收到消息時,右下角會出現一個通知(儘管你把瀏覽器最小化),因為這個通知時獨立於瀏覽器的,是系統的一個原生控件;
注意:想要成功的調起通知,首先要用戶的授權
Notification.requestPermission(prem => {
prem == "granted" // 同意
prem == "denied" // 拒絕
})
所以,再調用之前先向用戶發起請求:
let permission = Notification.permission;
if (permission == "granted") {
// 已同意,開始發送通知
...
} else if (permission == "denied") {
// 不同意,發不了咯
} else {
// 其他狀態,可以重新發送授權提示
Notification.requestPermission();
}
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
兼容性
12、battery state
獲取設備的電池狀態
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
navigator.getBattery().then(battery => console.log(battery));
// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}
使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失
兼容性
13、vibration
使設備進行震動,更貼近原生應用開發:
// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);
使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶
兼容性
14、page visibility
有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。
大家好不好奇,是如何監聽到頁面的變化?
page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了♂️
document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});
PC端效果如下
移動端效果如下
使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停
兼容性
15、deviceOrientation
陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https
從左到右分別為alpha、beta、gamma;
window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});
移動端效果如下(此時手機在不停的轉動)
使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動
兼容性
16、orientation
可以監聽用戶手機設備的旋轉方向變化;
window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);
效果如下:
也可以使用css的媒體查詢:
/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}
使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP
兼容性
17、toDataURL
這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;
let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址
使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽
<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>
效果如下:
封裝以下代碼便可解決
效果如下:
或者將當前的DOM轉換成圖片進行下載,常用於生成海報: 如html2canvas庫
兼容性
18、customEvent
自定義事件,就跟vue裡面的on跟emit一樣;
監聽自定義事件:
window.addEventListener("follow", event => {
console.log(event.detail); // 輸出 {name: "前端宇宙情報局"}
});
派發自定義事件:
window.dispatchEvent(new CustomEvent("follow", {
detail: {
name: "前端宇宙情報局"
}
}));
兼容性
19、notification
PC端的桌面通知,如網頁端的微信,當收到消息時,右下角會出現一個通知(儘管你把瀏覽器最小化),因為這個通知時獨立於瀏覽器的,是系統的一個原生控件;
注意:想要成功的調起通知,首先要用戶的授權
Notification.requestPermission(prem => {
prem == "granted" // 同意
prem == "denied" // 拒絕
})
所以,再調用之前先向用戶發起請求:
let permission = Notification.permission;
if (permission == "granted") {
// 已同意,開始發送通知
...
} else if (permission == "denied") {
// 不同意,發不了咯
} else {
// 其他狀態,可以重新發送授權提示
Notification.requestPermission();
}
有點醜哈,但是這是原生的!
兼容性
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
兼容性
12、battery state
獲取設備的電池狀態
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
navigator.getBattery().then(battery => console.log(battery));
// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}
使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失
兼容性
13、vibration
使設備進行震動,更貼近原生應用開發:
// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);
使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶
兼容性
14、page visibility
有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。
大家好不好奇,是如何監聽到頁面的變化?
page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了♂️
document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});
PC端效果如下
移動端效果如下
使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停
兼容性
15、deviceOrientation
陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https
從左到右分別為alpha、beta、gamma;
window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});
移動端效果如下(此時手機在不停的轉動)
使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動
兼容性
16、orientation
可以監聽用戶手機設備的旋轉方向變化;
window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);
效果如下:
也可以使用css的媒體查詢:
/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}
使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP
兼容性
17、toDataURL
這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;
let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址
使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽
<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>
效果如下:
封裝以下代碼便可解決
效果如下:
或者將當前的DOM轉換成圖片進行下載,常用於生成海報: 如html2canvas庫
兼容性
18、customEvent
自定義事件,就跟vue裡面的on跟emit一樣;
監聽自定義事件:
window.addEventListener("follow", event => {
console.log(event.detail); // 輸出 {name: "前端宇宙情報局"}
});
派發自定義事件:
window.dispatchEvent(new CustomEvent("follow", {
detail: {
name: "前端宇宙情報局"
}
}));
兼容性
19、notification
PC端的桌面通知,如網頁端的微信,當收到消息時,右下角會出現一個通知(儘管你把瀏覽器最小化),因為這個通知時獨立於瀏覽器的,是系統的一個原生控件;
注意:想要成功的調起通知,首先要用戶的授權
Notification.requestPermission(prem => {
prem == "granted" // 同意
prem == "denied" // 拒絕
})
所以,再調用之前先向用戶發起請求:
let permission = Notification.permission;
if (permission == "granted") {
// 已同意,開始發送通知
...
} else if (permission == "denied") {
// 不同意,發不了咯
} else {
// 其他狀態,可以重新發送授權提示
Notification.requestPermission();
}
有點醜哈,但是這是原生的!
兼容性
20、fullScreen
全屏不咯? 之前的一個項目剛好用上,不僅僅可以作用在documentElement上,還可以作用在指定元素;
/**
* @method launchFullScreen 開啟全屏
* @param {Object} elem = document.documentElement 作用的元素
*/
const launchFullScreen = (elem = document.documentElement) => {
if(elem.requestFullScreen) {
elem.requestFullScreen();
} else if(elem.mozRequestFullScreen) {
elem.mozRequestFullScreen();
} else if(elem.webkitRequestFullScreen) {
elem.webkitRequestFullScreen();
}
}
作用在documentElement上沒啥可以介紹的咯,就相當於F11開啟全屏:
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
兼容性
12、battery state
獲取設備的電池狀態
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
navigator.getBattery().then(battery => console.log(battery));
// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}
使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失
兼容性
13、vibration
使設備進行震動,更貼近原生應用開發:
// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);
使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶
兼容性
14、page visibility
有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。
大家好不好奇,是如何監聽到頁面的變化?
page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了♂️
document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});
PC端效果如下
移動端效果如下
使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停
兼容性
15、deviceOrientation
陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https
從左到右分別為alpha、beta、gamma;
window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});
移動端效果如下(此時手機在不停的轉動)
使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動
兼容性
16、orientation
可以監聽用戶手機設備的旋轉方向變化;
window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);
效果如下:
也可以使用css的媒體查詢:
/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}
使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP
兼容性
17、toDataURL
這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;
let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址
使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽
<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>
效果如下:
封裝以下代碼便可解決
效果如下:
或者將當前的DOM轉換成圖片進行下載,常用於生成海報: 如html2canvas庫
兼容性
18、customEvent
自定義事件,就跟vue裡面的on跟emit一樣;
監聽自定義事件:
window.addEventListener("follow", event => {
console.log(event.detail); // 輸出 {name: "前端宇宙情報局"}
});
派發自定義事件:
window.dispatchEvent(new CustomEvent("follow", {
detail: {
name: "前端宇宙情報局"
}
}));
兼容性
19、notification
PC端的桌面通知,如網頁端的微信,當收到消息時,右下角會出現一個通知(儘管你把瀏覽器最小化),因為這個通知時獨立於瀏覽器的,是系統的一個原生控件;
注意:想要成功的調起通知,首先要用戶的授權
Notification.requestPermission(prem => {
prem == "granted" // 同意
prem == "denied" // 拒絕
})
所以,再調用之前先向用戶發起請求:
let permission = Notification.permission;
if (permission == "granted") {
// 已同意,開始發送通知
...
} else if (permission == "denied") {
// 不同意,發不了咯
} else {
// 其他狀態,可以重新發送授權提示
Notification.requestPermission();
}
有點醜哈,但是這是原生的!
兼容性
20、fullScreen
全屏不咯? 之前的一個項目剛好用上,不僅僅可以作用在documentElement上,還可以作用在指定元素;
/**
* @method launchFullScreen 開啟全屏
* @param {Object} elem = document.documentElement 作用的元素
*/
const launchFullScreen = (elem = document.documentElement) => {
if(elem.requestFullScreen) {
elem.requestFullScreen();
} else if(elem.mozRequestFullScreen) {
elem.mozRequestFullScreen();
} else if(elem.webkitRequestFullScreen) {
elem.webkitRequestFullScreen();
}
}
作用在documentElement上沒啥可以介紹的咯,就相當於F11開啟全屏:
那麼作用在指定元素會是什麼效果呢?
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
兼容性
12、battery state
獲取設備的電池狀態
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
navigator.getBattery().then(battery => console.log(battery));
// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}
使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失
兼容性
13、vibration
使設備進行震動,更貼近原生應用開發:
// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);
使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶
兼容性
14、page visibility
有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。
大家好不好奇,是如何監聽到頁面的變化?
page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了♂️
document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});
PC端效果如下
移動端效果如下
使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停
兼容性
15、deviceOrientation
陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https
從左到右分別為alpha、beta、gamma;
window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});
移動端效果如下(此時手機在不停的轉動)
使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動
兼容性
16、orientation
可以監聽用戶手機設備的旋轉方向變化;
window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);
效果如下:
也可以使用css的媒體查詢:
/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}
使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP
兼容性
17、toDataURL
這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;
let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址
使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽
<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>
效果如下:
封裝以下代碼便可解決
效果如下:
或者將當前的DOM轉換成圖片進行下載,常用於生成海報: 如html2canvas庫
兼容性
18、customEvent
自定義事件,就跟vue裡面的on跟emit一樣;
監聽自定義事件:
window.addEventListener("follow", event => {
console.log(event.detail); // 輸出 {name: "前端宇宙情報局"}
});
派發自定義事件:
window.dispatchEvent(new CustomEvent("follow", {
detail: {
name: "前端宇宙情報局"
}
}));
兼容性
19、notification
PC端的桌面通知,如網頁端的微信,當收到消息時,右下角會出現一個通知(儘管你把瀏覽器最小化),因為這個通知時獨立於瀏覽器的,是系統的一個原生控件;
注意:想要成功的調起通知,首先要用戶的授權
Notification.requestPermission(prem => {
prem == "granted" // 同意
prem == "denied" // 拒絕
})
所以,再調用之前先向用戶發起請求:
let permission = Notification.permission;
if (permission == "granted") {
// 已同意,開始發送通知
...
} else if (permission == "denied") {
// 不同意,發不了咯
} else {
// 其他狀態,可以重新發送授權提示
Notification.requestPermission();
}
有點醜哈,但是這是原生的!
兼容性
20、fullScreen
全屏不咯? 之前的一個項目剛好用上,不僅僅可以作用在documentElement上,還可以作用在指定元素;
/**
* @method launchFullScreen 開啟全屏
* @param {Object} elem = document.documentElement 作用的元素
*/
const launchFullScreen = (elem = document.documentElement) => {
if(elem.requestFullScreen) {
elem.requestFullScreen();
} else if(elem.mozRequestFullScreen) {
elem.mozRequestFullScreen();
} else if(elem.webkitRequestFullScreen) {
elem.webkitRequestFullScreen();
}
}
作用在documentElement上沒啥可以介紹的咯,就相當於F11開啟全屏:
那麼作用在指定元素會是什麼效果呢?
就像效果圖一樣,會直接開啟全屏,並且只顯示指定的元素,元素的寬高填充了整個屏幕✅
關閉全屏的時候需要注意的是,統一用document對象
/**
* @method exitFullScreen 關閉全屏
*/
const exitFullScreen = () => {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.webkitCancelFullScreen) {
document.webkitCancelFullScreen();
}
}
使用場景:需要讓用戶專注去做某件事,比如代碼編輯區的全屏或者是ERP管理系統
兼容性
程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...
本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。
1、querySelector和querySelectorAll
querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素
注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下
Array.from(list).map();
兼容性
2、closest
跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素
document.querySelector("li").closest("#nav");
其實類似於parentNode和parentElement,可以看看它的profill
兼容性
3、dataset
就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:
<p data-name="蜘蛛俠" data-age="16"></p>
document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}
注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦
兼容性
4、URLSearchParams
假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?
現在告訴大家一個新的API,這個使用就更方便了
new URLSearchParams(location.search).get("name"); // 蜘蛛俠
運行結果
URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串
兼容性
5、hidden
這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:
<div hidden>我被隱藏了</div>
document.querySelector("div").hidden = true / false;
現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦
兼容性
6、contenteditable
可以使一個元素可以被用戶編輯:
<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼
效果如下:
很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好
兼容性
7、speelcheck
也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)
<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>
效果如下:
設置不檢查:
<textarea spellcheck="false"></textarea>
效果如下:
兼容性
8、classList
大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫
現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:
兼容性
9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)
可以獲取指定元素在當前頁面的空間信息:
elem.getBoundingClientRect();
// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}
說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變
兼容性
10、contains
可以判斷指定元素是否包含了指定的子元素:
<div>
<p></p>
</div>
document.querySelector("div").contains(document.querySelector("p")); // true
兼容性
11、online state
是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:
window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});
// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};
可以模擬看下效果
兼容性
12、battery state
獲取設備的電池狀態
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
navigator.getBattery().then(battery => console.log(battery));
// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}
使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失
兼容性
13、vibration
使設備進行震動,更貼近原生應用開發:
// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);
使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶
兼容性
14、page visibility
有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。
大家好不好奇,是如何監聽到頁面的變化?
page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了♂️
document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});
PC端效果如下
移動端效果如下
使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停
兼容性
15、deviceOrientation
陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https
從左到右分別為alpha、beta、gamma;
window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});
移動端效果如下(此時手機在不停的轉動)
使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動
兼容性
16、orientation
可以監聽用戶手機設備的旋轉方向變化;
window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);
效果如下:
也可以使用css的媒體查詢:
/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}
使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP
兼容性
17、toDataURL
這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;
let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址
使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽
<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>
效果如下:
封裝以下代碼便可解決
效果如下:
或者將當前的DOM轉換成圖片進行下載,常用於生成海報: 如html2canvas庫
兼容性
18、customEvent
自定義事件,就跟vue裡面的on跟emit一樣;
監聽自定義事件:
window.addEventListener("follow", event => {
console.log(event.detail); // 輸出 {name: "前端宇宙情報局"}
});
派發自定義事件:
window.dispatchEvent(new CustomEvent("follow", {
detail: {
name: "前端宇宙情報局"
}
}));
兼容性
19、notification
PC端的桌面通知,如網頁端的微信,當收到消息時,右下角會出現一個通知(儘管你把瀏覽器最小化),因為這個通知時獨立於瀏覽器的,是系統的一個原生控件;
注意:想要成功的調起通知,首先要用戶的授權
Notification.requestPermission(prem => {
prem == "granted" // 同意
prem == "denied" // 拒絕
})
所以,再調用之前先向用戶發起請求:
let permission = Notification.permission;
if (permission == "granted") {
// 已同意,開始發送通知
...
} else if (permission == "denied") {
// 不同意,發不了咯
} else {
// 其他狀態,可以重新發送授權提示
Notification.requestPermission();
}
有點醜哈,但是這是原生的!
兼容性
20、fullScreen
全屏不咯? 之前的一個項目剛好用上,不僅僅可以作用在documentElement上,還可以作用在指定元素;
/**
* @method launchFullScreen 開啟全屏
* @param {Object} elem = document.documentElement 作用的元素
*/
const launchFullScreen = (elem = document.documentElement) => {
if(elem.requestFullScreen) {
elem.requestFullScreen();
} else if(elem.mozRequestFullScreen) {
elem.mozRequestFullScreen();
} else if(elem.webkitRequestFullScreen) {
elem.webkitRequestFullScreen();
}
}
作用在documentElement上沒啥可以介紹的咯,就相當於F11開啟全屏:
那麼作用在指定元素會是什麼效果呢?
就像效果圖一樣,會直接開啟全屏,並且只顯示指定的元素,元素的寬高填充了整個屏幕✅
關閉全屏的時候需要注意的是,統一用document對象
/**
* @method exitFullScreen 關閉全屏
*/
const exitFullScreen = () => {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.webkitCancelFullScreen) {
document.webkitCancelFullScreen();
}
}
使用場景:需要讓用戶專注去做某件事,比如代碼編輯區的全屏或者是ERP管理系統
兼容性
好啦,乾貨就到這裡啦,希望大家看完不要忘了
前端學習視頻傳送門
從入門到精通實戰Go web編程視頻來啦,每週末都有前端視頻教程學
參考文章
https://juejin.im/post/5d5df391e51d453b1e478ad0?
https://developer.mozilla.org/en-US/docs/Web/API/Window/orientationchange_event