• 你需要知道的 12 个常用的 JavaScript 函数


    在这里插入图片描述

    本文收集了 12 个在日常开发中非常常用的函数,有些可能很复杂,有些可能很简单,但我相信或多或少会对大家都会有所帮助。

    生成随机颜色

    你的网站是否需要生成随机颜色?下面一行代码就可以实现。

    const generateRandomHexColor = () => `#${Math.floor(Math.random() * 0xffffff).toString(16)}`
    
    • 1
    • 2

    console.log(generateRandomHexColor())

    数组重排序

    对数组的元素进行重新排序是一项非常重要的技巧,但是原生 Array 中并没有这项功能。

    const shuffle = (arr) => arr.sort(() => Math.random() - 0.5)
    
    • 1
    • 2

    const arr = [1, 2, 3, 4, 5]
    console.log(shuffle(arr))

    复制到剪切板

    复制到剪切板是一项非常实用且能够提高用户便利性的功能。

    const copyToClipboard = (text) => navigator.clipboard && navigator.clipboard.writeText && navigator.clipboard.writeText(text)
    
    • 1
    • 2

    copyToClipboard(“Hello World!”)

    检测暗色主题

    暗色主题日益普及,很多用的都会在设备中启用案模式,我们将应用程序切换到暗色主题可以提高用户体验度。

    const isDarkMode = () => window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches;
    
    • 1
    • 2

    console.log(isDarkMode())

    滚动到顶部

    将元素滚动到顶部最简单的方法是使用 scrollIntoView。设置 block 为 start 可以滚动到顶部;设置 behavior 为 smooth 可以开启平滑滚动。

    const scrollToTop = (element) => 
      element.scrollIntoView({ behavior: "smooth", block: "start" });
    
    • 1
    • 2
    • 3

    滚动到底部

    与滚动到顶部一样,滚动到底部只需要设置 block 为 end 即可。

    const scrollToBottom = (element) => 
      element.scrollIntoView({ behavior: "smooth", block: "end" });
    
    • 1
    • 2
    • 3

    检测元素是否在屏幕中

    检查元素是否在窗口中最好的方法是使用 IntersectionObserver。

    const callback = (entries) => {
      entries.forEach((entry) => {
        if (entry.isIntersecting) {
          // `entry.target` is the dom element
          console.log(`${entry.target.id} is visible`);
        }
      });
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    const options = {
    threshold: 1.0,
    };
    const observer = new IntersectionObserver(callback, options);
    const btn = document.getElementById(“btn”);
    const bottomBtn = document.getElementById(“bottom-btn”);
    observer.observe(btn);
    observer.observe(bottomBtn);

    检测设备

    使用 navigator.userAgent 来检测网站运行在哪种平台设备上。

    const detectDeviceType = () =>
      /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
        navigator.userAgent
      ) ? "Mobile" : "Desktop";
    
    • 1
    • 2
    • 3
    • 4
    • 5

    console.log(detectDeviceType());

    隐藏元素

    我们可以将元素的 style.visibility 设置为 hidden,隐藏元素的可见性,但元素的空间仍然会被占用。如果设置元素的 style.display 为 none,会将元素从渲染流中删除。

    const hideElement = (el, removeFromFlow = false) => {
      removeFromFlow ? (el.style.display = 'none')
      : (el.style.visibility = 'hidden')
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    从 URL 中获取参数

    JavaScript 中有一个 URL 对象,通过它可以非常方便的获取 URL 中的参数。

    const getParamByUrl = (key) => {
      const url = new URL(location.href)
      return url.searchParams.get(key)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    深拷贝对象

    深拷贝对象非常简单,先将对象转换为字符串,再转换成对象即可。

    const deepCopy = obj => JSON.parse(JSON.stringify(obj))
    
    • 1
    • 2

    除了利用 JSON 的 API,还有更新的深拷贝对象的 structuredClone API,但并不是在所有的浏览器中都支持。

    structuredClone(obj)
    
    • 1
    • 2

    等待函数

    JavaScript 提供了 setTimeout 函数,但是它并不返回 Promise 对象,所以我们没办法使用 async 作用在这个函数上,但是我们可以封装等待函数。

    const wait = (ms) => new Promise((resolve)=> setTimeout(resolve, ms))
    
    • 1
    • 2

    const asyncFn = async () => {
    await wait(1000)
    console.log(‘等待异步函数执行结束’)
    }

    asyncFn()


    感谢你的阅读,如果本文对你有所帮助,不妨点个赞吧。

  • 相关阅读:
    iPhone 15 Pro与iPhone 13 Pro:最大的预期升级
    Nginx服务器的整体架构
    lua学习
    LeetCode-1402题解
    java计算机毕业设计基于ssm的协同过滤算法的电影推荐系统(源代码+数据库+Lw文档)
    单阶段目标检测与双阶段目标检测的联系与区别
    当我让文心一言写个代码来庆祝1024程序员节,它写的代码是……
    深度学习常用激活函数总结
    16.Xaml WrapPanel控件 ---> 流面板
    创新能力|如何用8D能力模型来提升产品经理的核心能力
  • 原文地址:https://blog.csdn.net/qq_38517811/article/details/127331416