debounce (防抖)函數(shù)
$('textarea').on('keydown', debounce(ajaxAction, 2500));
function debounce(fn, delay){
var timer = null; // 聲明計時器
return function() {
var context = this;
var args = arguments;
clearTimeout(timer);
timer = setTimeout(function () {
fn.apply(context, args);
}, delay);
};
}
上面代碼中,只要在2500毫秒之內(nèi),用戶再次擊鍵,就會取消上一次的定時器,然后再新建一個定時器。這樣就保證了回調(diào)函數(shù)之間的調(diào)用間隔,至少是2500毫秒。
清除所有定時器
setTimeout和setInterval函數(shù),都返回一個整數(shù)值,表示計數(shù)器編號。將該整數(shù)傳入clearTimeout和clearInterval函數(shù),就可以取消對應(yīng)的定時器。
var id1 = setTimeout(f, 1000);
var id2 = setInterval(f, 1000);
clearTimeout(id1);
clearInterval(id2);
上面代碼中,回調(diào)函數(shù) f 不會再執(zhí)行了,因為兩個定時器都被取消了。
setTimeout和setInterval返回的整數(shù)值是連續(xù)的,也就是說,第二個setTimeout方法返回的整數(shù)值,將比第一個的整數(shù)值大1。
function f() {}
setTimeout(f, 1000) // 10
setTimeout(f, 1000) // 11
setTimeout(f, 1000) // 12
上面代碼中,連續(xù)調(diào)用三次setTimeout,返回值都比上一次大了1。
利用這一點,可以寫一個函數(shù),取消當前所有的setTimeout定時器。
(function() {
// 每輪事件循環(huán)檢查一次
var gid = setInterval(clearAllTimeouts, 0);
function clearAllTimeouts() {
var id = setTimeout(function() {}, 0);
while (id > 0) {
if (id !== gid) {
clearTimeout(id);
}
id--;
}
}
})();
上面代碼中,先調(diào)用setTimeout,得到一個計算器編號,然后把編號比它小的計數(shù)器全部取消。
生成隨機ID
// 生成長度為11的隨機字母數(shù)字字符串
Math.random().toString(36).substring(2);
// hg7znok52x
獲取URL的查詢參數(shù)
// 獲取URL的查詢參數(shù)
q={};location.search.replace(/([^?&=]+)=([^&]+)/g,(_,k,v)=>q[k]=v);q;
// ?foo=bar&baz=bing => {foo: bar, baz: bing}
數(shù)組混淆
隨機更改數(shù)組元素順序,混淆數(shù)組
// 隨機更改數(shù)組元素順序,混淆數(shù)組
(arr) => arr.slice().sort(() => Math.random() - 0.5)
/*
let a = (arr) => arr.slice().sort(() => Math.random() - 0.5)
let b = a([1,2,3,4,5])
console.log(b)
*/
生成隨機十六進制代碼(生成隨機顏色)
使用JavaScript簡潔代碼生成隨機十六進制代碼
// 生成隨機十六進制代碼 如:'#c618b2'
'#' + Math.floor(Math.random() * 0xffffff).toString(16).padEnd(6, '0');
數(shù)組去重
這是一個原生的JS函數(shù)但是非常簡潔,Set接受任何可迭代對象,如數(shù)組[1,2,3,3],并刪除重復(fù)項
// 數(shù)組去重
[...new Set(arr)]
創(chuàng)建特定大小的數(shù)組
[...Array(3).keys()]
// [0, 1, 2]
返回一個鍵盤(驚呆了)
這是一個很難看懂的簡潔代碼,但是運行后你會驚呆的,他竟然返回一個圖形鍵盤
// 用字符串返回一個鍵盤圖形
(_=>[..."`1234567890-=~~QWERTYUIOP[]\\~ASDFGHJKL;'~~ZXCVBNM,./~"].map(x=>(o+=`/${b='_'.repeat(w=x<y?2:' 667699'[x=["BS","TAB","CAPS","ENTER"][p++]||'SHIFT',p])}\\|`,m+=y+(x+' ').slice(0,w)+y+y,n+=y+b+y+y,l+=' __'+b)[73]&&(k.push(l,m,n,o),l='',m=n=o=y),m=n=o=y='|',p=l=k=[])&&k.join`
`)()
" ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
||` |||1 |||2 |||3 |||4 |||5 |||6 |||7 |||8 |||9 |||0 |||- |||= |||BS ||
||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
||TAB |||Q |||W |||E |||R |||T |||Y |||U |||I |||O |||P |||[ |||] |||\ ||
||______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__||
|/______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|
_________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
||CAPS |||A |||S |||D |||F |||G |||H |||J |||K |||L |||; |||' |||ENTER ||
||_______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
|/_______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
___________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ___________
||SHIFT |||Z |||X |||C |||V |||B |||N |||M |||, |||. |||/ |||SHIFT ||
||_________|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||_________||
|/_________\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/_________\|"