当前位置:首页 > 科技  > 软件

JS小知识,分享工作中常用的八个封装函数,让你事半功倍

来源: 责编: 时间:2024-01-08 09:17:20 324观看
导读一、回到顶部当页面很长时,如果用户想回到页面顶部,必须滚动滚动键几次才能回到顶部。如果页面右下角有“返回顶部”按钮,用户可以点击返回顶部。对于用户来说,这是一个很好的用户体验。// Method 1 constbindTop1 = ()

UEJ28资讯网——每日最新资讯28at.com

一、回到顶部

当页面很长时,如果用户想回到页面顶部,必须滚动滚动键几次才能回到顶部。如果页面右下角有“返回顶部”按钮,用户可以点击返回顶部。对于用户来说,这是一个很好的用户体验。UEJ28资讯网——每日最新资讯28at.com

// Method 1  constbindTop1 = () => {      window.scrollTo(0, 0)      document.documentElement.scrollTop = 0;  }        // Method 2: Scrolling through the timer will be visually smoother, without much lag effect    constbindTop2 = () => {      const timeTop = setInterval(() => {        document.documentElement.scrollTop = scrollTopH.value -= 50        if (scrollTopH.value <= 0) {          clearInterval(timeTop)        }      }, 10)  }

二、将文本复制到剪贴板

构建网站时一个非常普遍的需求是能够通过单击按钮将文本复制到剪贴板。以下这段代码是一个很通用的代码,适合大多数浏览器。UEJ28资讯网——每日最新资讯28at.com

const copyText = (text) => {        const clipboardStr = window.clipboardStr        if (clipboardStr) {          clipboardStr.clearData()          clipboardStr.setData('Text', text)          return true        } else if (document.execCommand) {            //Note: document, execCommand is deprecated but some browsers still support it. Remember to check the compatibility when using it          // Get the content to be copied by creating a dom element          const el = document.createElement('textarea')          el.value = text          el.setAttribute('readonly', '')          el.style.position = 'absolute'          el.style.left = '-9999px'          document.body.appendChild(el)          el.select()          // Copy the current content to the clipboard          document.execCommand('copy')          // delete el node          document.body.removeChild(el)          return true        }        return false    }

三、防抖/节流

在前端开发的过程中,我们会遇到很多按钮被频繁点击,然后触发多个事件,但是我们又不想触发事件太频繁。这里有两种常见的解决方案来防止 Debouncing 和 Throttling。UEJ28资讯网——每日最新资讯28at.com

基本介绍

防抖:在指定时间内频繁触发事件,以最后一次触发为准。UEJ28资讯网——每日最新资讯28at.com

节流:一个事件在指定时间内被频繁触发,并且只会被触发一次,以第一次为准。UEJ28资讯网——每日最新资讯28at.com

应用场景

防抖: 输入搜索,当用户不断输入内容时,使用防抖来减少请求次数,节省请求资源。UEJ28资讯网——每日最新资讯28at.com

节流:场景一般是按钮点击。一秒内点击 10 次将发起 10 个请求。节流后,1秒内点击多次,只会触发一次。UEJ28资讯网——每日最新资讯28at.com

// Debouncing    // fn is the function that needs anti-shake, delay is the timer time    function debounce(fn,delay){        let timer = null;        return function () {             //if the timer exists, clear the timer and restart the timer            if(timer){                clearTimeout(timeout);            }            //Set a timer and execute the actual function to be executed after a specified time            timeout = setTimeout(() => {               fn.apply(this);            }, delay);        }    }        // Throttling    function throttle(fn) {      let timer = null; // First set a variable, when the timer is not executed, the default is null      return function () {        if (timer) return; // When the timer is not executed, the timer is always false, and there is no need to execute it later        timer = setTimeout(() => {          fn.apply(this, arguments);           // Finally, set the flag to true after setTimeout is executed           // Indicates that the next cycle can be executed.          timer = null;        }, 1000);      };    }

四、初始化数组

fill() :这是 ES6 中的一个新方法。用指定的元素填充数组,实际上就是用默认的内容初始化数组。UEJ28资讯网——每日最新资讯28at.com

const arrList = Array(6).fill()   console.log(arrList)  // result:  ['','','','','','']

五、检查它是否是一个函数

检测是否是函数 其实写完后直接写isFunction就好了,这样可以避免重复写判断。UEJ28资讯网——每日最新资讯28at.com

const isFunction = (obj) => {        return typeof obj === "function" &&          typeof obj.nodeType !== "number" &&           typeof obj.item !== "function";

六、检查它是否是一个安全数组

检查它是否是一个安全数组,如果不是,用 isArray 方法在这里返回一个空数组。UEJ28资讯网——每日最新资讯28at.com

const safeArray = (array) => {    return Array.isArray(array) ? array : []}

七、检查对象是否是安全对象

// Check whether the current object is a valid object.    const isVaildObject = (obj) => {        return typeof obj === 'object' &&           !Array.isArray(obj) && Object.keys(obj).length    }    const safeObject = obj => isVaildObject(obj) ? obj : {}

八、过滤特殊字符

js中使用正则表达式过滤特殊字符,检查所有输入字段是否包含特殊字符。UEJ28资讯网——每日最新资讯28at.com

function filterCharacter(str){        let pattern = new RegExp("[`~!@#$^&*()=:”“'。,、?|{}':;'%,//[//].<>/?~!@#¥……&*()&;—|{ }【】‘;]")        let resultStr = "";        for (let i = 0; i < str.length; i++) {            resultStr = resultStr + str.substr(i, 1).replace(pattern, '');        }        return resultStr;    }          filterCharacter('gyaskjdhy12316789#$%^&!@#1=123,./[') // result: gyaskjdhy123167891123

结束

今天的分享就到这里,这8个方法你学会了吗,我强烈建议大家收藏起来,别再造轮子了。希望今天的分享能够帮助到你,感谢你的阅读。UEJ28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-57908-0.htmlJS小知识,分享工作中常用的八个封装函数,让你事半功倍

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 生产级K8S监控告警方案分享给你

下一篇: 九条微服务最佳实践,你学会了哪条?

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • 鸿蒙OS 4.0公测机型公布:甚至连nova6都支持

    华为全新的HarmonyOS 4.0操作系统将于今天下午正式登场,官方在发布会之前也已经正式给出了可升级的机型产品,这意味着这些机型会率先支持升级享用。这次的HarmonyOS 4.0支持
  • 三万字盘点 Spring 九大核心基础功能

    大家好,我是三友~~今天来跟大家聊一聊Spring的9大核心基础功能。话不多说,先上目录:图片友情提示,本文过长,建议收藏,嘿嘿嘿!一、资源管理资源管理是Spring的一个核心的基础功能,不
  • 雅柏威士忌多款单品价格大跌,泥煤顶流也不香了?

    来源 | 烈酒商业观察编 | 肖海林今年以来,威士忌市场开始出现了降温迹象,越来越多不断暴涨的网红威士忌也开始悄然回归市场理性。近日,LVMH集团旗下苏格兰威士忌品牌雅柏(Ardbeg
  • 破圈是B站头上的紧箍咒

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之每年的暑期档都少不了瞄准追剧女孩们的古偶剧集,2021年有优酷的《山河令》,2022年有爱奇艺的《苍兰诀》,今年却轮到小破站抓住了追
  • 一条抖音4亿人围观 ! 这家MCN比无忧传媒还野

    作者:Hiu 来源:互联网品牌官01 擦边少女空降热搜,幕后推手曝光被网友誉为&ldquo;纯欲天花板&rdquo;的女网红井川里予,近期因为一组哥特风照片登上热搜,引发了一场互联网世界关于
  • 信通院:小米、华为等11家应用商店基本完成APP签名及验签工作

    中国信通院表示,目前,小米、华为、OPPO、vivo、360手机助手、百度手机助手、应用宝、豌豆荚和努比亚等9家应用商店,以及抖音和快手2家新型应用分发平
  • 华为和江淮汽车合作开发百万元问界MPV?双方回应来了

    8月1日消息,郭明錤今天在社交平台发文称,华为正在和江淮汽车合作,开发售价在100万元的问界MPV,预计在2024年第2季度量产,销量目标为上市首年交付5万辆。
  • 超级标准版旗舰!iQOO 11S全球首发iQOO超算独显芯片

    上半年已接近尾声,截至目前各大品牌旗下的顶级旗舰都已悉数亮相,而下半年即将推出的顶级旗舰已经成为了数码圈爆料的主流,其中就包括全新的iQOO 11S系
Top