JS篇
- 函式防抖
函式防抖是指頻繁觸發的情況下,只有足夠的空閒時間,才執行程式碼一次
函式防抖的要點,也是需要一個setTimeout
來輔助實現。延遲執行需要跑的程式碼。
如果方法多次觸發,則把上次記錄的延遲執行程式碼用clearTimeout
清掉,重新開始。
如果計時完畢,沒有方法進來訪問觸發,則執行程式碼。
//函式防抖
var timer = false
document.getElementById("debounce").onScroll = function() {
clearTimeout(timer)
timer = setTimeout(function(){
console.log("函式防抖")
}, 300)
}
複製程式碼
- 函式節流
函式節流是指一定時間內js方法只跑一次
函式節流的要點是,宣告一個變數當標誌位,記錄當前程式碼是否在執行。
如果空閒,則可以正常觸發方法執行。 如果程式碼正在執行,則取消這次方法執行,直接return。
//函式節流
var canScroll = true;
document.getElementById('throttle').onScroll = function() {
if (!canScroll) {
return;
}
canScroll = false;
setTimeout(function(){
console.log('函式節流');
canScroll = true;
},300)
}
複製程式碼
- 使用Boolean過濾陣列中的所有假值
const compact = arr => arr.filter(Boolean)
compact([0, 1, false, 2, '', 3, 'a', 'e' * 23, NaN, 's', 34]) // [ 1, 2, 3, 'a', 's', 34 ]
複製程式碼
- 雙位運算子~~ 可以使用雙位操作符來替代 Math.floor( )
- 資料型別更優雅的強制轉換
//加法和減法運算子也可進行型別轉換。
var str="87";+str;//隱式轉換為 number型別 87
//使用一次邏輯非運算子,流程是將值轉成布林值然後取反。而使用兩次邏輯非運算子就 是將值轉成成布林值取反再取反,相當於對值進行 Boolean()轉型函式處理。
var box = !!0; //false
複製程式碼
- 獲取制定範圍內的隨機數
var x = Math.floor(Math.random() * (max - min + 1)) + min;
複製程式碼
- 打亂數字陣列的順序
var numbers = [5, 458 , 120 , -215 , 228 , 400 , 122205, -85411];
numbers = numbers.sort(function() {
return Math.random() - 0.5
});
複製程式碼
- 獲取陣列中的最大值和最小值
var numbers = [5, 458 , 120 , -215 , 228 , 400 , 122205, -85411];
var maxInNumbers = Math.max.apply(Math, numbers);
var minInNumbers = Math.min.apply(Math, numbers);
複製程式碼
CSS篇
- 清除浮動
.clearfix:after{
content:".";
clear:both;
display:block;
height:0;
overflow:hidden;
visibility:hidden;
}
複製程式碼
- 換行
//不換行
white-space:nowrap;
//自動換行
word-wrap: break-word;
word-break: normal;
//強制換行
word-break:break-all;
複製程式碼
- 使用 :not() 來精簡css程式碼
// 不使用:not()
.nav li {
border-right: 1px solid #666;
}
.nav li:last-child {
border-right: none;
}
// 使用:not()
.nav li:not(:last-child) {
border-right: 1px solid #666;
}
// 或者使用兄弟選擇符~
.nav li:first-child ~ li {
border-left: 1px solid #666;
}
複製程式碼
持續更新~ 歡迎同行的小夥伴們留言補充~