精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

七個項目中必備的JavaScript代碼片段

開發 前端
本文介紹八個實用的JavaScript代碼片段,建議添加到項目中去。

 [[421451]]

1. 下載一個excel文檔

同時適用于word,ppt等瀏覽器不會默認執行預覽的文檔,也可以用于下載后端接口返回的流數據,見 3

  1. //下載一個鏈接  
  2. function download(link, name) { 
  3.     if(!name){ 
  4.             name=link.slice(link.lastIndexOf('/') + 1
  5.     } 
  6.     let eleLink = document.createElement('a'
  7.     eleLink.download = name 
  8.     eleLink.style.display = 'none' 
  9.     eleLink.href = link 
  10.     document.body.appendChild(eleLink) 
  11.     eleLink.click() 
  12.     document.body.removeChild(eleLink) 
  13. //下載excel 
  14. download('http://111.229.14.189/file/1.xlsx'
  15. 復制代碼 

2. 在瀏覽器中自定義下載一些內容

場景:我想下載一些DOM內容,我想下載一個JSON文件

  1. /** 
  2.  * 瀏覽器下載靜態文件 
  3.  * @param {String} name 文件名 
  4.  * @param {String} content 文件內容 
  5.  */ 
  6. function downloadFile(name, content) { 
  7.     if (typeof name == 'undefined') { 
  8.         throw new Error('The first parameter name is a must'
  9.     } 
  10.     if (typeof content == 'undefined') { 
  11.         throw new Error('The second parameter content is a must'
  12.     } 
  13.     if (!(content instanceof Blob)) { 
  14.         content = new Blob([content]) 
  15.     } 
  16.     const link = URL.createObjectURL(content) 
  17.     download(link, name) 
  18. //下載一個鏈接 
  19. function download(link, name) { 
  20.     if (!name) {//如果沒有提供名字,從給的Link中截取最后一坨 
  21.         name =  link.slice(link.lastIndexOf('/') + 1
  22.     } 
  23.     let eleLink = document.createElement('a'
  24.     eleLink.download = name 
  25.     eleLink.style.display = 'none' 
  26.     eleLink.href = link 
  27.     document.body.appendChild(eleLink) 
  28.     eleLink.click() 
  29.     document.body.removeChild(eleLink) 
  30. 復制代碼 

使用方式:

  1. downloadFile('1.txt','lalalallalalla'
  2. downloadFile('1.json',JSON.stringify({name:'hahahha'})) 
  3. 復制代碼 

3. 下載后端返回的流

數據是后端以接口的形式返回的,調用 1 中的download方法進行下載

  1.  download('http://111.229.14.189/gk-api/util/download?file=1.jpg'
  2.  download('http://111.229.14.189/gk-api/util/download?file=1.mp4'
  3.  
  4. 復制代碼 

4. 提供一個圖片鏈接,點擊下載

圖片、pdf等文件,瀏覽器會默認執行預覽,不能調用download方法進行下載,需要先把圖片、pdf等文件轉成blob,再調用download方法進行下載,轉換的方式是使用axios請求對應的鏈接

  1. //可以用來下載瀏覽器會默認預覽的文件類型,例如mp4,jpg等 
  2. import axios from 'axios' 
  3. //提供一個link,完成文件下載,link可以是  http://xxx.com/xxx.xls 
  4. function downloadByLink(link,fileName){ 
  5.     axios.request({ 
  6.         url: link, 
  7.         responseType: 'blob' //關鍵代碼,讓axios把響應改成blob 
  8.     }).then(res => { 
  9.  const link=URL.createObjectURL(res.data) 
  10.         download(link, fileName) 
  11.     }) 
  12.  
  13. 復制代碼 

注意:會有同源策略的限制,需要配置轉發

5. 防抖

在一定時間間隔內,多次調用一個方法,只會執行一次.

這個方法的實現是從Lodash庫中copy的

  1. /** 
  2.  * 
  3.  * @param {*} func 要進行debouce的函數 
  4.  * @param {*} wait 等待時間,默認500ms 
  5.  * @param {*} immediate 是否立即執行 
  6.  */ 
  7. export function debounce(func, wait=500, immediate=false) { 
  8.     var timeout 
  9.     return function() { 
  10.         var context = this 
  11.         var args = arguments 
  12.  
  13.         if (timeout) clearTimeout(timeout) 
  14.         if (immediate) { 
  15.             // 如果已經執行過,不再執行 
  16.             var callNow = !timeout 
  17.             timeout = setTimeout(function() { 
  18.                 timeout = null 
  19.             }, wait) 
  20.             if (callNow) func.apply(context, args) 
  21.         } else { 
  22.             timeout = setTimeout(function() { 
  23.                 func.apply(context, args) 
  24.             }, wait) 
  25.         } 
  26.     } 
  27. 復制代碼 

使用方式:

  1. <!DOCTYPE html> 
  2. <html lang="en"
  3.     <head> 
  4.         <meta charset="UTF-8" /> 
  5.         <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
  6.         <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 
  7.         <title>Document</title> 
  8.     </head> 
  9.     <body> 
  10.         <input id="input" /> 
  11.         <script> 
  12.             function onInput() { 
  13.                 console.log('1111'
  14.             } 
  15.             const debounceOnInput = debounce(onInput) 
  16.             document 
  17.                 .getElementById('input'
  18.                 .addEventListener('input', debounceOnInput) //在Input中輸入,多次調用只會在調用結束之后,等待500ms觸發一次    
  19.         </script> 
  20.     </body> 
  21. </html> 
  22.  
  23. 復制代碼 

如果第三個參數 immediate 傳true,則會立即執行一次調用,后續的調用不會在執行,可以自己在代碼中試一下

6. 節流

多次調用方法,按照一定的時間間隔執行

這個方法的實現也是從Lodash庫中copy的

  1. /** 
  2.  * 節流,多次觸發,間隔時間段執行 
  3.  * @param {Function} func 
  4.  * @param {Int} wait 
  5.  * @param {Object} options 
  6.  */ 
  7. export function throttle(func, wait=500, options) { 
  8.     //container.onmousemove = throttle(getUserAction, 1000); 
  9.     var timeout, context, args 
  10.     var previous = 0 
  11.     if (!options) options = {leading:false,trailing:true
  12.  
  13.     var later = function() { 
  14.         previous = options.leading === false ? 0 : new Date().getTime() 
  15.         timeout = null 
  16.         func.apply(context, args) 
  17.         if (!timeout) context = args = null 
  18.     } 
  19.  
  20.     var throttled = function() { 
  21.         var now = new Date().getTime() 
  22.         if (!previous && options.leading === false) previous = now 
  23.         var remaining = wait - (now - previous) 
  24.         context = this 
  25.         args = arguments 
  26.         if (remaining <= 0 || remaining > wait) { 
  27.             if (timeout) { 
  28.                 clearTimeout(timeout) 
  29.                 timeout = null 
  30.             } 
  31.             previous = now 
  32.             func.apply(context, args) 
  33.             if (!timeout) context = args = null 
  34.         } else if (!timeout && options.trailing !== false) { 
  35.             timeout = setTimeout(later, remaining) 
  36.         } 
  37.     } 
  38.     return throttled 
  39. 復制代碼 

第三個參數還有點復雜, options

  • leading,函數在每個等待時延的開始被調用,默認值為false

  • trailing,函數在每個等待時延的結束被調用,默認值是true

可以根據不同的值來設置不同的效果:

  • leading-false,trailing-true:默認情況,即在延時結束后才會調用函數

  • leading-true,trailing-true:在延時開始時就調用,延時結束后也會調用

  • leading-true, trailing-false:只在延時開始時調用

例子:

  1. <!DOCTYPE html> 
  2. <html lang="en"
  3.     <head> 
  4.         <meta charset="UTF-8" /> 
  5.         <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
  6.         <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 
  7.         <title>Document</title> 
  8.     </head> 
  9.     <body> 
  10.         <input id="input" /> 
  11.         <script> 
  12.             function onInput() { 
  13.                 console.log('1111'
  14.             } 
  15.             const throttleOnInput = throttle(onInput) 
  16.             document 
  17.                 .getElementById('input'
  18.                 .addEventListener('input', throttleOnInput) //在Input中輸入,每隔500ms執行一次代碼 
  19.         </script>  
  20.     </body> 
  21. </html> 
  22.  
  23. 復制代碼 

7. cleanObject

去除對象中value為空(null,undefined,'')的屬性,舉個栗子:

  1. let res=cleanObject({ 
  2.     name:''
  3.     pageSize:10
  4.     page:1 
  5. }) 
  6. console.log("res", res) //輸入{page:1,pageSize:10}   name為空字符串,屬性刪掉 
  7. 復制代碼 

使用場景是:后端列表查詢接口,某個字段前端不傳,后端就不根據那個字段篩選,例如 name 不傳的話,就只根據 page 和 pageSize 篩選,但是前端查詢參數的時候(vue或者react)中,往往會這樣定義

  1. export default
  2.     data(){ 
  3.         return { 
  4.             query:{ 
  5.                 name:''
  6.                 pageSize:10
  7.                 page:1 
  8.             } 
  9.         } 
  10.     } 
  11.  
  12.  
  13. const [query,setQuery]=useState({name:'',page:1,pageSize:10}) 
  14. 復制代碼 

給后端發送數據的時候,要判斷某個屬性是不是空字符串,然后給后端拼參數,這塊邏輯抽離出來就是 cleanObject ,代碼實現如下

  1. export const isFalsy = (value) => (value === 0 ? false : !value); 
  2.  
  3. export const isVoid = (value) => 
  4.   value === undefined || value === null || value === ""
  5.  
  6. export const cleanObject = (object) => { 
  7.   // Object.assign({}, object) 
  8.   if (!object) { 
  9.     return {}; 
  10.   } 
  11.   const result = { ...object }; 
  12.   Object.keys(result).forEach((key) => { 
  13.     const value = result[key]; 
  14.     if (isVoid(value)) { 
  15.       delete result[key]; 
  16.     } 
  17.   }); 
  18.   return result; 
  19. }; 
  20.  
  21. 復制代碼 
  1. let res=cleanObject({ 
  2.     name:''
  3.     pageSize:10
  4.     page:1 
  5. }) 
  6. console.log("res", res) //輸入{page:1,pageSize:10} 
  7. 復制代碼 

 

 

責任編輯:張燕妮 來源: 前端技術江湖
相關推薦

2021-10-29 11:05:34

JavaScript代碼字符串

2024-08-02 17:19:36

2023-03-24 07:30:53

JavaScript項目元框架

2023-01-10 14:54:19

2023-11-13 22:33:47

低代碼無代碼

2023-09-07 16:28:46

JavaScrip

2025-03-21 08:20:00

數據清洗Python編程

2025-04-29 10:43:57

開發代碼JavaScript

2024-01-02 18:03:42

編程語言Python

2022-08-16 10:16:53

CIOIT領導者

2024-01-31 12:13:02

JavaScriptSet元素

2011-07-11 10:16:07

JavaScript

2023-05-22 15:53:06

JavaScrip代碼素材

2023-10-10 16:16:05

JavaScrip開發

2023-10-09 14:48:06

2024-11-06 16:45:39

Python游戲開發代碼

2025-02-19 12:00:00

JavaScript代碼數組方法

2024-01-30 18:05:04

IDE編輯器代碼

2024-09-10 08:35:57

2022-10-08 23:46:47

JavaScript對象開發
點贊
收藏

51CTO技術棧公眾號

石原莉奈在线亚洲三区| 性生活一级大片| 自拍视频一区二区| 国产三级在线看| 日韩一区免费| 久久久精品免费网站| 精品国产美女在线| 免费国产一区二区| 久久久久无码精品国产| 91丨精品丨国产| 久久精品夜色噜噜亚洲aⅴ| 国产精品一区二区女厕厕| avtt中文字幕| 视频一区二区三区不卡| 丝袜诱惑亚洲看片| 综合激情国产一区| 日本美女高潮视频| 天天爽夜夜爽夜夜爽| 中文字幕亚洲综合久久五月天色无吗'' | 日韩av第一页| 欧美无人区码suv| 91欧美精品| 久久久精品日韩欧美| 91在线高清免费观看| 中文字幕91视频| 电影一区电影二区| 国产日韩欧美精品电影三级在线| 欧美一乱一性一交一视频| 逼特逼视频在线观看| 欧美人与牲禽动交com| 国产精品一二三区在线| 久久影视免费观看| 欧美一级视频在线| eeuss影院在线播放| 免费人成精品欧美精品| 在线日韩中文字幕| 性猛交ⅹ×××乱大交| bbbbbbbbbbb在线视频| 成人黄色在线看| 97视频免费在线看| 狠狠人妻久久久久久综合蜜桃| 性欧美xxx69hd高清| 久久综合九色欧美综合狠狠| 国产成人精品综合| 特级西西人体高清大胆| 高清国产一区二区三区四区五区| 亚洲乱码精品一二三四区日韩在线| 成人在线一区二区| 波多野结衣在线电影| 国产最新精品| 欧美肥妇毛茸茸| 少妇大叫太大太粗太爽了a片小说| 丰满人妻一区二区三区四区53 | 亚洲欧洲国产精品一区| 亚洲观看高清完整版在线观看| 国产精品青青草| 国产一区二区99| 欧美一级精品| 91精品国产入口在线| 欧美精品在欧美一区二区| 人妻无码中文字幕| 男男成人高潮片免费网站| 青草青草久热精品视频在线观看| 国产又粗又猛又爽又黄的视频小说| 伊人久久大香线蕉综合网站| 欧美一区二区三区在线视频| 天天操狠狠操夜夜操| 欧美人动性xxxxz0oz| 亚洲综合成人在线| 色噜噜色狠狠狠狠狠综合色一| 99久久久久成人国产免费| 亚洲欧美日韩在线观看a三区 | 97av影视网在线观看| 九九热精品视频在线| 国产大片一区| 日韩电影中文字幕av| 91精品999| 精品成人18| 欧美亚洲综合网| 日韩精品综合在线| 欧美精品hd| 久久久久久免费网| 日韩精品久久一区| 天天色综合久久| 2021中文字幕一区亚洲| 欧美最大成人综合网| 免费观看黄色一级视频| 91视频www| 91嫩草免费看| 少妇人妻精品一区二区三区| 久久精品网站免费观看| 国产精品h视频| 都市激情在线视频| 亚洲日本va午夜在线影院| 日韩国产欧美一区| 日本高清在线观看wwwww色| 亚洲一区免费观看| 国产911在线观看| 在线免费观看黄色网址| 久久精品亚洲麻豆av一区二区 | 欧美亚洲丝袜传媒另类| 国产在线视频三区| 亚洲人成伊人成综合图片| 日韩少妇与小伙激情| 国产一级做a爱片久久毛片a| 久久国产精品免费| 日韩美女视频免费在线观看| 国产精品久久久久久无人区| 日本午夜一区二区| 国产成人精品优优av| 精品人妻少妇嫩草av无码专区| 免费观看在线综合| 国产精品免费视频一区二区 | 小泽玛利亚一区| 免费欧美视频| 久久久噜噜噜| 午夜免费日韩视频| 999视频在线| 国内精品美女在线观看| 青草成人免费视频| 国产精品一区二区免费视频| 国产白丝网站精品污在线入口| 国产精品吹潮在线观看| 精品在线播放视频| 中文字幕日韩一区二区不卡| 91成品人片a无限观看| 91杏吧porn蝌蚪| 神马电影久久| 深夜福利一区二区| 亚洲欧美综合7777色婷婷| 在线高清一区| 久久精品国产视频| 亚欧精品视频一区二区三区| 精品久久97| 精品国产三级电影在线观看| 美女日批在线观看| 一区二区三区亚洲变态调教大结局| 国产视频精品xxxx| 免费看黄色的视频| 成人综合一区| 69**夜色精品国产69乱| 99在线精品视频免费观看20| 久久国产精品露脸对白| 国产日韩久久| 青青草视频在线观看| 亚洲精品国产精华液| 五月天亚洲视频| 91p九色成人| 亚洲精品98久久久久久中文字幕| 亚洲高清av一区二区三区| 日韩电影不卡一区| 一区二区中文字幕| 日韩乱码一区二区| 国产黑丝在线一区二区三区| 91亚洲午夜在线| 国产在线一二| 久久综合给合久久狠狠狠97色69| 国产精品一色哟哟| 久久99成人| 久久精品最新地址| 91theporn国产在线观看| 老司机精品视频在线| 亚洲专区中文字幕| 性感美女视频一二三| 国产午夜久久久久| 日韩视频第二页| 蜜臀av免费一区二区三区| 欧美一级片在线播放| 免费在线观看污视频| 中文字幕制服丝袜成人av| 中国一级黄色录像| 调教一区二区| 同产精品九九九| 爆乳熟妇一区二区三区霸乳| www欧美在线观看| 最新69国产成人精品视频免费| 精品国产乱子伦| 国产精品久久一卡二卡| 真人做人试看60分钟免费| 亚洲精品自拍| 久久香蕉国产线看观看av| 99热这里只有精品在线观看| 亚洲影院理伦片| 中文字幕免费高清视频| 亚洲自拍另类| 亚洲 日韩 国产第一区| 成人污版视频| 欧美激情在线观看视频| 日韩久久久久久久久| 国产日韩精品一区| 亚洲综合色在线观看| 婷婷精品进入| 国产精品久久久久久久久久直播 | 欧美巨大黑人极品精男| 丰满人妻熟女aⅴ一区| 欧美午夜影院在线视频| 国产乱女淫av麻豆国产| 欧美日韩亚洲一区三区| 亚洲一区二区三区久久 | 北条麻妃在线视频| 99久久婷婷国产综合精品青牛牛| 亚洲欧美国产va在线影院| 国产a免费视频| 国产精品嫩草99av在线| 91欧美激情另类亚洲| 性欧美1819sex性高清大胸| 亚洲精品视频免费| 国产精品主播一区二区| 精品国产乱码久久久久酒店 | 风间由美一区二区av101 | 国产福利小视频在线观看| 日韩免费观看高清完整版 | www.玖玖玖| 成人污版视频| 日本不卡免费高清视频| 国产欧美久久久久久久久| 在线观看国产91| 免费看污片网站| 亚洲东热激情| 日韩精品一区二区三区色偷偷| 日韩大陆av| 日韩av影视在线| www.97av.com| 色婷婷久久久综合中文字幕| 日韩福利小视频| 久久精品视频在线看| 国产成人精品综合久久久久99 | 午夜视频在线观| 免播放器亚洲| 日本中文字幕在线视频观看| 日韩欧美精品综合| 国产91热爆ts人妖在线| 4438x成人网全国最大| 亚洲欧美日韩爽爽影院| 黄色av网站免费在线观看| 欧美久久久久中文字幕| 天天操天天干视频| 黄色一区二区在线| 黄页网站免费观看| 国产精品自在在线| 一区二区在线播放视频| 国产精品毛片| 91精品91久久久中77777老牛| 午夜视频精品| 日本福利视频导航| 91日韩在线| 日韩欧美激情一区二区| 国产一区二区三区四区五区| 九九99玖玖| 人妖欧美1区| 日韩在线视频观看正片免费网站| 欧美大片aaa| 精品久久久久久久久久久久包黑料| 精品人妻无码一区二区色欲产成人| 欧美精品高清视频| 中文字幕一区二区三区波野结| 久久九九久久九九| 一级国产黄色片| 成人免费观看视频| 国产麻豆天美果冻无码视频| www.成人网.com| 日韩精品人妻中文字幕有码| 成人av在线一区二区| 肉色超薄丝袜脚交| 国产suv精品一区二区三区| 一区二区在线免费观看视频| 国产电影一区二区三区| 久久久久中文字幕亚洲精品| 91丨九色丨国产丨porny| 亚洲一区二区三区综合| 91麻豆免费观看| 国产精品300页| 久久久久久久av麻豆果冻| 欧美88888| 亚洲免费高清视频在线| 一区二区视频免费看| 亚洲综合一区二区三区| 国产91精品一区| 色嗨嗨av一区二区三区| 精品伦精品一区二区三区视频密桃| 日本一区二区三区免费乱视频 | 亚洲综合视频网站| 亚洲美女在线国产| 欧美久久久久久久久久久久| 亚洲成人福利片| 美女黄页在线观看| 夜夜精品浪潮av一区二区三区| 天天综合天天做| 夜夜揉揉日日人人青青一国产精品| 日韩美女一级片| 欧美日韩国产首页| 亚洲精品久久久久久久久久久久久久 | 中文字幕精品av| a级网站在线播放| 日韩黄在线观看| 国产三级在线免费观看| 久久亚洲欧美日韩精品专区 | 国产中文字幕视频在线观看| 久久综合中文| 亚洲18在线看污www麻豆| 国产高清精品网站| 久久久久麻豆v国产精华液好用吗| 国产女同互慰高潮91漫画| 亚洲怡红院在线观看| 五月天一区二区三区| 中文字幕你懂的| 欧美一区二区免费| 成人高清免费在线播放| 欧美国产日韩免费| 手机看片久久| 7777精品伊久久久大香线蕉语言| 国产一区福利| 欧美做受777cos| 久久男女视频| 91porn在线| 国产精品高潮呻吟| 国产精品视频久久久久久久| 欧美日韩另类国产亚洲欧美一级| 亚洲av无码片一区二区三区| 中文字幕亚洲无线码a| 黑人另类精品××××性爽| 国产精品久久一| 伊人久久精品一区二区三区| 欧美巨猛xxxx猛交黑人97人| 欧美无毛视频| 国产精品xxx在线观看www| 成人看的视频| 女人另类性混交zo| 高清视频一区二区| 成年人二级毛片| 欧美在线免费视屏| 男人天堂一区二区| 欧美成人午夜视频| 精品久久久网| 日本午夜精品一区二区三区| 国产精品v日韩精品v欧美精品网站| 爽爽爽在线观看| 国产精品午夜春色av| 欧美激情黑白配| 精品第一国产综合精品aⅴ| 亚洲精品一线| 日韩一区二区电影在线| 色鬼7777久久| 久久久久久尹人网香蕉| av在线亚洲一区| 午夜精品区一区二区三| 免费成人在线影院| 亚洲欧洲久久久| 日韩欧美亚洲国产一区| www黄色在线观看| 欧美黑人xxxx| 久久99成人| 大陆极品少妇内射aaaaaa| 狠狠色丁香九九婷婷综合五月| 中文字幕欧美人妻精品一区| 成人激情综合网站| 免费在线观看亚洲| 欧美一级理论片| av在线导航| 超碰97在线人人| 欧美一级色片| 国产精品国产亚洲精品看不卡| 日日夜夜精品视频天天综合网| 青青草原国产在线视频| 亚洲欧美综合另类在线卡通| 一级做a爱片久久毛片| 这里只有精品久久| 亚洲伦理网站| 国产 欧美 日韩 一区| 丁香啪啪综合成人亚洲小说| 国产成人精品av久久| 欧美日韩一区二区免费在线观看 | 欧美黑人xxxx| 成人h动漫精品一区二区器材| 欧美日韩dvd| 99久久伊人精品| 国产精品视频123| 伊人久久久久久久久久久久久| 欧美最新精品| 青春草在线视频免费观看| 国产一区二区电影| 国产小视频在线看| 国产香蕉精品视频一区二区三区| 在线观看免费高清完整| 国产热re99久久6国产精品| 久久99国产精品久久99大师| 欧美 国产 综合| 国产精品女主播在线观看| 国产欧美熟妇另类久久久| 欧美高清视频在线| 偷拍精品福利视频导航| 亚洲精品综合在线观看| 亚洲一区在线免费观看| 香港一级纯黄大片| 国产日韩欧美自拍| 一区二区国产在线观看| 你懂得视频在线观看| 日韩亚洲欧美中文三级| 男人久久天堂| 国产一区一区三区|