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() // undefinedgetType({}}) // objectgetType([]) // arraygetType(1) // numbergetType('fatfish') // stringgetType(true) // booleangetType(/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) // pfkMfjEJ6xrandomString(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) // 6randomNum(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'

我太喜爱这种形式了,简略易懂。