日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

JS小知識,分享工作中常用的八個封裝函數,讓你事半功倍

來源: 責編: 時間:2024-01-08 09:17:20 234觀看
導讀一、回到頂部當頁面很長時,如果用戶想回到頁面頂部,必須滾動滾動鍵幾次才能回到頂部。如果頁面右下角有“返回頂部”按鈕,用戶可以點擊返回頂部。對于用戶來說,這是一個很好的用戶體驗。// Method 1 constbindTop1 = ()

lxg28資訊網——每日最新資訊28at.com

一、回到頂部

當頁面很長時,如果用戶想回到頁面頂部,必須滾動滾動鍵幾次才能回到頂部。如果頁面右下角有“返回頂部”按鈕,用戶可以點擊返回頂部。對于用戶來說,這是一個很好的用戶體驗。lxg28資訊網——每日最新資訊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)  }

二、將文本復制到剪貼板

構建網站時一個非常普遍的需求是能夠通過單擊按鈕將文本復制到剪貼板。以下這段代碼是一個很通用的代碼,適合大多數瀏覽器。lxg28資訊網——每日最新資訊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。lxg28資訊網——每日最新資訊28at.com

基本介紹

防抖:在指定時間內頻繁觸發事件,以最后一次觸發為準。lxg28資訊網——每日最新資訊28at.com

節流:一個事件在指定時間內被頻繁觸發,并且只會被觸發一次,以第一次為準。lxg28資訊網——每日最新資訊28at.com

應用場景

防抖: 輸入搜索,當用戶不斷輸入內容時,使用防抖來減少請求次數,節省請求資源。lxg28資訊網——每日最新資訊28at.com

節流:場景一般是按鈕點擊。一秒內點擊 10 次將發起 10 個請求。節流后,1秒內點擊多次,只會觸發一次。lxg28資訊網——每日最新資訊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 中的一個新方法。用指定的元素填充數組,實際上就是用默認的內容初始化數組。lxg28資訊網——每日最新資訊28at.com

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

五、檢查它是否是一個函數

檢測是否是函數 其實寫完后直接寫isFunction就好了,這樣可以避免重復寫判斷。lxg28資訊網——每日最新資訊28at.com

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

六、檢查它是否是一個安全數組

檢查它是否是一個安全數組,如果不是,用 isArray 方法在這里返回一個空數組。lxg28資訊網——每日最新資訊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中使用正則表達式過濾特殊字符,檢查所有輸入字段是否包含特殊字符。lxg28資訊網——每日最新資訊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個方法你學會了嗎,我強烈建議大家收藏起來,別再造輪子了。希望今天的分享能夠幫助到你,感謝你的閱讀。lxg28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-57908-0.htmlJS小知識,分享工作中常用的八個封裝函數,讓你事半功倍

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 生產級K8S監控告警方案分享給你

下一篇: 九條微服務最佳實踐,你學會了哪條?

標簽:
  • 熱門焦點
  • Redmi Buds 4開箱簡評:才199還有降噪 可以無腦入

    在上個月舉辦的Redmi Note11T Pro系列新機發布會上,除了兩款手機新品之外,Redmi還帶來了兩款TWS真無線藍牙耳機產品,Redmi Buds 4和Redmi Buds 4 Pro,此前我們在Redmi Note11T
  • Automa-通過連接塊來自動化你的瀏覽器

    1、前言通過瀏覽器插件可實現自動化腳本的錄制與編寫,具有代表性的工具就是:Selenium IDE、Katalon Recorder,對于簡單的業務來說可快速實現自動化的上手工作。Selenium IDEKat
  • 一年經驗在二線城市面試后端的經驗分享

    忠告這篇文章只適合2年內工作經驗、甚至沒有工作經驗的朋友閱讀。如果你是2年以上工作經驗,請果斷劃走,對你沒啥幫助~主人公這篇文章內容來自 「升職加薪」星球星友 的投稿,坐
  • 如何通過Python線程池實現異步編程?

    線程池的概念和基本原理線程池是一種并發處理機制,它可以在程序啟動時創建一組線程,并將它們置于等待任務的狀態。當任務到達時,線程池中的某個線程會被喚醒并執行任務,執行完任
  • JavaScript學習 -AES加密算法

    引言在當今數字化時代,前端應用程序扮演著重要角色,用戶的敏感數據經常在前端進行加密和解密操作。然而,這樣的操作在網絡傳輸和存儲中可能會受到惡意攻擊的威脅。為了確保數據
  • 19個 JavaScript 單行代碼技巧,讓你看起來像個專業人士

    今天這篇文章跟大家分享18個JS單行代碼,你只需花幾分鐘時間,即可幫助您了解一些您可能不知道的 JS 知識,如果您已經知道了,就當作復習一下,古人云,溫故而知新嘛。現在,我們就開始今
  • Python異步IO編程的進程/線程通信實現

    這篇文章再講3種方式,同時講4中進程間通信的方式一、 Python 中線程間通信的實現方式共享變量共享變量是多個線程可以共同訪問的變量。在Python中,可以使用threading模塊中的L
  • 馮提莫簽約抖音公會 前“斗魚一姐”消失在直播間

    來源:直播觀察提起&ldquo;馮提莫&rdquo;這個名字,很多網友或許聽過,但應該不記得她是哪位主播了。其實,作為曾經的&ldquo;斗魚一姐&rdquo;,馮提莫在游戲直播的年代影響力不輸于現
  • 朋友圈可以修改可見范圍了 蘋果用戶可率先體驗

    近日,iOS用戶迎來微信8.0.27正式版更新,除了可更換二維碼背景外,還新增了多項實用功能。在新版微信中,朋友圈終于可以修改可見范圍,簡單來說就是已發布的朋友圈
Top 主站蜘蛛池模板: 龙南县| 拜泉县| 平乐县| 兖州市| 新竹市| 诏安县| 平和县| 揭东县| 上高县| 遵义市| 肥乡县| 广东省| 墨江| 鄂尔多斯市| 全南县| 青岛市| 永仁县| 昌黎县| 新沂市| 南丰县| 湖北省| 梁平县| 犍为县| 拉萨市| 嵊州市| 寿光市| 肃宁县| 丹东市| 娄烦县| 林芝县| 施甸县| 安丘市| 阳原县| 家居| 岐山县| 九江县| 兰西县| 竹北市| 双鸭山市| 万盛区| 安义县|