共计 5336 个字符,预计需要花费 14 分钟才能阅读完成。
1. 滚动到页面顶部
咱们能够应用 window.scrollTo() 平滑滚动到页面顶部。
const scrollToTop = () => {window.scrollTo({ top: 0, left: 0, behavior: "smooth"});
};
2. 滚动到页面底部
当然,如果晓得页面的高度,也能够平滑滚动到页面底部。
const scrollToBottom = () => {
window.scrollTo({
top: document.documentElement.offsetHeight,
left: 0,
behavior: "smooth",
});
};
3. 滚动元素到可见区域
有时咱们须要将元素滚动到可见区域,咱们应该怎么做?应用 scrollIntoView 就足够了。
const smoothScroll = (element) => {
element.scrollIntoView({behavior: "smooth",});
};
4. 全屏显示元素
你肯定遇到过这样的场景,须要全屏播放视频,并在浏览器中全屏关上页面。
const goToFullScreen = (element) => {
element = element || document.body;
if (element.requestFullscreen) {element.requestFullscreen();
} else if (element.mozRequestFullScreen) {element.mozRequestFullScreen();
} else if (element.msRequestFullscreen) {element.msRequestFullscreen();
} else if (element.webkitRequestFullscreen) {element.webkitRequestFullScreen();
}
};
5. 退出浏览器全屏状态
是的,这个和第 4 点一起应用,你也会有退出浏览器全屏状态的场景。
const goExitFullscreen = () => {if (document.exitFullscreen) {document.exitFullscreen();
} else if (document.msExitFullscreen) {document.msExitFullscreen();
} else if (document.mozCancelFullScreen) {document.mozCancelFullScreen();
} else if (document.webkitExitFullscreen) {document.webkitExitFullscreen();
}
};
6. 获取数据类型
如何通过函数获取变量的数据类型?
const getType = (value) => {const match = Object.prototype.toString.call(value).match(/ (\w+)]/)
return match[1].toLocaleLowerCase()}
getType() // undefined
getType({}}) // object
getType([]) // array
getType(1) // number
getType('fatfish') // string
getType(true) // boolean
getType(/fatfish/) // regexp
7. 进行冒泡事件
一种实用于所有平台的避免事件冒泡的办法。
const stopPropagation = (event) => {
event = event || window.event;
if (event.stopPropagation) {event.stopPropagation();
} else {event.cancelBubble = true;}
};
深拷贝一个对象
如何复制深度嵌套的对象?
const deepCopy = (obj, hash = new WeakMap()) => {if (obj instanceof Date) {return new Date(obj);
}
if (obj instanceof RegExp) {return new RegExp(obj);
}
if (hash.has(obj)) {return hash.get(obj);
}
let allDesc = Object.getOwnPropertyDescriptors(obj);
let cloneObj = Object.create(Object.getPrototypeOf(obj), allDesc);
hash.set(obj, cloneObj);
for (let key of Reflect.ownKeys(obj)) {if (obj[key] && typeof obj[key] === "object") {cloneObj[key] = deepCopy(obj[key], hash);
} else {cloneObj[key] = obj[key];
}
}
return cloneObj;
};
确定设施类型
咱们常常必须这样做能力在手机上显示 A 逻辑,在 PC 上显示 B 逻辑。基本上,设施类型是通过辨认浏览器的 userAgent 来确定的。
const isMobile = () => {
return !!navigator.userAgent.match(/(iPhone|iPod|Android|ios|iOS|iPad|Backerry|WebOS|Symbian|Windows Phone|Phone)/i
);
};
10. 判断设施是安卓还是 IOS
除了辨别是挪动端还是 PC 端,很多时候咱们还须要辨别以后设施是 Android 还是 IOS。
const isAndroid = () => {return /android/i.test(navigator.userAgent.toLowerCase());
};
const isIOS = () => {
let reg = /iPhone|iPad|iPod|iOS|Macintosh/i;
return reg.test(navigator.userAgent.toLowerCase());
};
11. 获取浏览器类型及其版本
作为前端开发人员,您可能会遇到各种兼容性问题,这时候可能须要获取浏览器的类型和版本。
const getExplorerInfo = () => {let t = navigator.userAgent.toLowerCase();
return 0 <= t.indexOf("msie")
? {
//ie < 11
type: "IE",
version: Number(t.match(/msie ([\d]+)/)[1]),
}
: !!t.match(/trident\/.+?rv:(([\d.]+))/)
? {
// ie 11
type: "IE",
version: 11,
}
: 0 <= t.indexOf("edge")
? {
type: "Edge",
version: Number(t.match(/edge\/([\d]+)/)[1]),
}
: 0 <= t.indexOf("firefox")
? {
type: "Firefox",
version: Number(t.match(/firefox\/([\d]+)/)[1]),
}
: 0 <= t.indexOf("chrome")
? {
type: "Chrome",
version: Number(t.match(/chrome\/([\d]+)/)[1]),
}
: 0 <= t.indexOf("opera")
? {
type: "Opera",
version: Number(t.match(/opera.([\d]+)/)[1]),
}
: 0 <= t.indexOf("Safari")
? {
type: "Safari",
version: Number(t.match(/version\/([\d]+)/)[1]),
}
: {
type: t,
version: -1,
};
};
12. 设置 cookies
cookie 可能是我见过的最蹩脚的 API,它很难应用,以至于咱们不得不从新封装它以最大限度地进步开发效率。
const setCookie = (key, value, expire) => {const d = new Date();
d.setDate(d.getDate() + expire);
document.cookie = `${key}=${value};expires=${d.toUTCString()}`;
};
获取 cookie
除了写入 cookie 之外,咱们还将参加其读取操作。
const getCookie = (key) => {const cookieStr = unescape(document.cookie);
const arr = cookieStr.split(";");
let cookieValue = "";
for (let i = 0; i < arr.length; i++) {const temp = arr[i].split("=");
if (temp[0] === key) {cookieValue = temp[1];
break;
}
}
return cookieValue;
};
14. 删除 cookies
删除 cookie 的想法是什么?其实,只有把它的过期工夫设置为这一刻,它就会立刻过期。
const delCookie = (key) => {document.cookie = `${encodeURIComponent(key)}=;expires=${new Date()}`;
};
15. 生成随机字符串
不晓得大家有没有遇到过须要生成随机字符串的场景。我遇到过很屡次,每次都要 google 一遍,直到学会这个工具性能。
const randomString = (len) => {
let chars = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz123456789";
let strLen = chars.length;
let randomStr = "";
for (let i = 0; i < len; i++) {randomStr += chars.charAt(Math.floor(Math.random() * strLen));
}
return randomStr;
};
randomString(10) // pfkMfjEJ6x
randomString(20) // ce6tEx1km4idRNMtym2S
字符串首字母大写
const fistLetterUpper = (str) => {return str.charAt(0).toUpperCase() + str.slice(1);
};
fistLetterUpper('fatfish') // Fatfish
17. 生成指定范畴内的随机数
兴许出于测试目标,我常常须要生成肯定范畴内的随机数。
const randomNum = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;
randomNum(1, 10) // 6
randomNum(10, 20) // 11
18. 打乱数组的程序
如何打乱数组的原始程序?
const shuffleArray = (array) => {return array.sort(() => 0.5 - Math.random())
}
let arr = [1, -1, 10, 5]
shuffleArray(arr) // [5, -1, 10, 1]
shuffleArray(arr) // [1, 10, -1, 5]
从数组中获取随机值
之前做过一个抽奖我的项目,须要让数组中的奖品随机呈现。
const getRandomValue = array => array[Math.floor(Math.random() * array.length)];
const prizes = ['$100', '🍫', '🍔']
getRandomValue(prizes) // 🍫
getRandomValue(prizes) // 🍔
getRandomValue(prizes) // 🍫
格式化货币
格式化货币的形式有很多,比方这两种形式。
第一种办法
const formatMoney = (money) => {return money.replace(new RegExp(`(?!^)(?=(\\d{3})+${money.includes('.') ? '\\.' : '$'})`, 'g'), ',')
}
formatMoney('123456789') // '123,456,789'
formatMoney('123456789.123') // '123,456,789.123'
formatMoney('123') // '123'
第二种形式
正则表达式让咱们很头疼,不是吗?所以咱们须要找到一种更简略的形式来格式化货币。
const formatMoney = (money) => {return money.toLocaleString()
}
formatMoney(123456789) // '123,456,789'
formatMoney(123456789.123) // '123,456,789.123'
formatMoney(123) // '123'
我太喜爱这种形式了,简略易懂。