常用標籤2
1. css | 小三角
div { width: 0; height: 0; border: 5px solid #transparent; border-top-color: red; }
2. css | 文字超出隱藏
一行 div{ overflow: hidden; text-overflow:ellipsis; white-space: nowrap; } //多行 div{ display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; overflow: hidden; }
3. css |IOS手機容器滾動條滑動不流暢
div{ overflow: auto; -webkit-overflow-scrolling: touch; }
4. css | 修改滾動條樣式
滾動條整體部分
::-webkit-scrollbar { width: 6px; }
滾動條的軌道
::-webkit-scrollbar-track { background-color: #aaa; }
滾動條裡面的小方塊
::-webkit-scrollbar-thumb { background-color: var(--main-color); }
::-webkit-scrollbar-thumb:hover{ background-color: #5b5b5b; }
::-webkit-scrollbar-thumb:active { background-color: #0a0d59; }
div::-webkit-scrollbar-button 滾動條的軌道的兩端按鈕,允許通過點選微調小方塊的位置。
div::-webkit-scrollbar-track-piece 內層軌道,滾動條中間部分
div::-webkit-scrollbar-corner 邊角,即兩個滾動條的交匯處
div::-webkit-resizer 兩個滾動條的交匯處上用於通過拖動調整元素大小的小控制元件
5.解決ios audio無法自動播放、迴圈播放的問題
// 解決ios audio無法自動播放、迴圈播放的問題 var music = document.getElementById('video'); var state = 0; document.addEventListener('touchstart', function(){ if(state==0){ music.play(); state=1; } }, false); document.addEventListener("WeixinJSBridgeReady", function () { music.play(); }, false); //迴圈播放 music.onended = function () { music.load(); music.play(); }
6. Date物件
獲取當前時間毫秒值 // 方式一 Date.now(); // 1606381881650 // 方式二 new Date() - 0; // 1606381881650 // 方式三 new Date().getTime() // 1606381881650 建立Date物件的相容性問題。 // window和安卓支援,ios和mac不支援 new Date('2020-11-26'); // window和安卓支援,ios和mac支援 new Date('2020/11/26');
7.Proxy和Object.defineProperty區別
Proxy的意思是代理,我一般叫他攔截器,可以攔截物件上的一個操作。用法如下,通過new的方式建立物件,第一個引數是被攔截的物件,第二個引數是物件操作的描述。例項化後返回一個新的物件,當我們對這個新的物件進行操作時就會呼叫我們描述中對應的方法。 new Proxy(target, { get(target, property) { }, set(target, property) { }, deleteProperty(target, property) { } }) Proxy區別於Object.definedProperty。 Object.defineProperty只能監聽到屬性的讀寫,而Proxy除讀寫外還可以監聽屬性的刪除,方法的呼叫等。 通常情況下我們想要監視陣列的變化,基本要依靠重寫陣列方法的方式實現,這也是Vue的實現方式,而Proxy可以直接監視陣列的變化。 const list = [1, 2, 3]; const listproxy = new Proxy(list, { set(target, property, value) { target[property] = value; return true; // 標識設定成功 } }); list.push(4); Proxy是以非入侵的方式監管了物件的讀寫,而defineProperty需要按特定的方式定義物件的屬性。
8.Reflect
他是ES2015
新增的物件,純靜態物件也就是不能被例項化,只能通過靜態方法的方式呼叫,和Math
物件類似,只能類似Math.random()
的方式呼叫。
Reflect
內部封裝了一系列對物件的底層操作,一共14
個,其中1
個被廢棄,還剩下13
個。
Reflect
的靜態方法和Proxy
描述中的方法完全一致。也就是說Reflect
成員方法就是Proxy
處理物件的預設實現。
Proxy
物件預設的方法就是呼叫了Reflect
內部的處理邏輯,也就是如果我們呼叫get
方法,那麼在內部,Reflect
就是將get
原封不動的交給了Reflect
,如下。
constproxy=newProxy(obj,{
get(target,property){
returnReflect.get(target,property);
}
})
Reflect
和Proxy
沒有絕對的關係,我們一般將他們兩個放在一起講是為了方便對二者的理解。
那為什麼會有Reflect
物件呢,其實他最大的用處就是提供了一套統一操作Object
的API
。
判斷物件是否存在某一個屬性,可以使用in
操作符,但是不夠優雅,還可以使用Reflect.has(obj, name)
; 刪除一個屬性可以使用delete
,也可以使用Reflect.deleteProperty(obj, name)
; 獲取所有屬性名可以使用Object.keys
, 也可以使用Reflect.ownKeys(obj)
; 我們更推薦使用Reflect
的API
來操作物件,因為他才是未來。
9. 解析get引數
通過replace方法獲取url中的引數鍵值對,可以快速解析get引數。 const q = {}; location.search.replace(/([^?&=]+)=([^&]+)/g,(_,k,v)=>q[k]=v); console.log(q);
10. 解析連結url
可以通過建立a標籤,給a標籤賦值href屬性的方式,獲取到協議,pathname,origin等location物件上的屬性。 // 建立a標籤 const aEle = document.createElement('a'); // 給a標籤賦值href路徑 aEle.href = '/test.html'; // 訪問aEle中的屬性 aEle.protocol; // 獲取協議 aEle.pathname; // 獲取path aEle.origin; aEle.host; aEle.search; ...
11. localStorage
localStorage是H5提供的永久儲存空間,一般最大可儲存5M資料,並且支援跨域隔離,他的出現極大提高了前端開發的可能性。localStorage的使用很多人都知道setItem,getItem,removeItem, 但他也可以直接以成員的方式操作。 // 儲存 localStorage.name = 'yd'; // 獲取 localStorage.name; // yd // 刪除 delete localStorage.name; // 清除全部 localStorage.clear(); // 遍歷 for (let i = 0; i < localStorage.length; i++) { const key = localStorage.key(i); // 獲取本地儲存的Key localStorage[key]; // 獲取本地儲存的value } localStorage滿了的情況下仍繼續儲存並不會覆蓋其他的值,而是直接報錯(QuotaExceededError),並且當前儲存的值也會被清空。瀏覽器支援每個域名下儲存5M資料。
12. sessionStorage
sessionStorage
和localStorage
的區別是,存在當前會話,很多人理解的是瀏覽器關閉,這是不對的,假設你在A
頁面儲存了sessionStorage
,新開選項卡將A
頁面的連結貼上進去開啟頁面,sessionStorage
也是不存在的。
所以sessionStorage
存在的條件是頁面間的跳轉,A
頁面儲存了sessionStorage
,他要通過超連結
或者location.href
或者window.open
來開啟另一個同域頁面才能訪問sessionStorage
。
這一點在混合開發巢狀H5
的開發模式中尤為重要,如果以新開webview
的方式開啟頁面,很可能sessionStorage
就沒有了。
13. 陣列快速去重
應該很多人都知道這個,陣列轉換成Set, 再轉換為陣列,不過這種去重方式只能去除基本資料型別組成的陣列。 const arr = [1, 2, 3, 4, 5, 6]; const arr2 = new Set(arr); const arr3 = [...arr2];