精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

久久av中文字幕片| 激情五月综合网| 亚洲va国产天堂va久久en| 国产欧美日韩综合精品二区| 久久人妻免费视频| 国产韩国精品一区二区三区| 精品国精品国产尤物美女| 干日本少妇首页| 国产福利视频在线观看| av一区二区三区在线| 国产精品极品尤物在线观看| 538任你躁在线精品视频网站| 婷婷亚洲精品| 日韩午夜三级在线| 9久久婷婷国产综合精品性色 | www激情五月| 亚洲天堂导航| 亚洲资源在线观看| 亚洲美女搞黄| 免费在线黄色网址| 高清日韩电视剧大全免费| 国产精品男女猛烈高潮激情| 欧美日韩成人免费观看| 青青草91久久久久久久久| 亚洲国产99精品国自产| 婷婷中文字幕在线观看| 你懂得影院夜精品a| 亚洲mv在线观看| 99精品一级欧美片免费播放| 国产福利电影在线| 成人av网在线| 国产a一区二区| 国产毛片毛片毛片毛片毛片| 久色成人在线| 91精品国产高清久久久久久| 久久免费视频精品| 亚洲精品久久| 久久激情视频久久| 日韩精品无码一区二区三区久久久| caoporn成人| 日韩欧美高清dvd碟片| 欧美美女性视频| 国产91欧美| 欧美日韩国产首页在线观看| 男人揉女人奶房视频60分| sm在线播放| 亚洲图片欧美视频| 青青在线视频免费观看| 欧美寡妇性猛交xxx免费| 一区二区视频免费在线观看| 女女百合国产免费网站| 免费av网站在线看| 136国产福利精品导航| 一区二区免费电影| 成人在线播放| 亚洲综合免费观看高清在线观看| 日韩国产精品毛片| а√天堂资源地址在线下载| 亚洲乱码一区二区三区在线观看| 国产高清免费在线| 97caopor国产在线视频| 亚洲精品国产a久久久久久| 看全色黄大色大片| 久久不射影院| 黄色成人在线免费| 日韩有码免费视频| 欧美aaa级| 欧美一卡在线观看| 亚洲久久久久久| 亚洲小说图片| 自拍亚洲一区欧美另类| 国产馆在线观看| 欧美在线亚洲综合一区| 欧美日韩电影在线观看| 日韩视频免费观看高清| 快she精品国产999| 国产欧美在线视频| 免费观看黄一级视频| 99久免费精品视频在线观看| 欧美一区二区三区在线免费观看| 日本www在线观看视频| 亚洲最色的网站| 动漫av网站免费观看| 91久久久久久白丝白浆欲热蜜臀| 欧美日本一区二区在线观看| 欧美xxxxx少妇| 国产调教一区二区三区| 久久精品91久久香蕉加勒比| 国产午夜精品一区二区理论影院| 男人的天堂成人在线| 国产视频999| 天堂在线视频免费观看| 国产精品伦理在线| 国产精品久久..4399| 激情久久一区二区| 精品国产不卡一区二区三区| 蜜桃久久精品成人无码av| 伊人情人综合网| 欧美综合在线观看| 国产日韩一级片| 久久亚洲综合av| 9色视频在线观看| 欧美性片在线观看| 亚洲电影第1页| 少妇视频一区二区| 美女尤物久久精品| 亚洲在线免费视频| 福利片在线观看| 午夜欧美在线一二页| 成人不卡免费视频| 国产欧美日韩精品一区二区免费| 欧美日本中文字幕| 在线播放国产一区| 国产亚洲综合在线| 欧美大片在线播放| 精品视频一二| 日日骚久久av| 日韩免费av网站| 99v久久综合狠狠综合久久| 亚洲精品国产精品国自产观看| 免费高潮视频95在线观看网站| 91精品国产美女浴室洗澡无遮挡| 精品无码在线观看| 美女网站久久| 免费国产一区二区| av在线私库| 日韩欧美专区在线| 91人妻一区二区三区蜜臀| 日本大胆欧美人术艺术动态| 日本日本精品二区免费| 乡村艳史在线观看| 亚洲国产日韩精品在线| 久久久一区二区三区四区| 国产福利视频一区二区三区| 特级毛片在线免费观看| 国产精品诱惑| 中文字幕欧美国内| 欧美一级做a爰片免费视频| 久久婷婷一区二区三区| 日韩精品视频久久| 久久av国产紧身裤| 97久久精品国产| 天堂网av2014| 欧美日韩国产一区中文午夜| 国产精品久久AV无码| 91久久亚洲| 久久久7777| 亚洲高清黄色| 中文字幕日韩精品在线观看| 亚洲天堂中文字幕在线| 国产精品国产自产拍在线| 狠狠操狠狠干视频| 希岛爱理一区二区三区| 亚洲iv一区二区三区| 特级毛片在线| 亚洲国产精品大全| 99久久精品国产亚洲| 97精品电影院| 精品久久久久久久无码| 成人在线丰满少妇av| 国产主播在线一区| 91网在线看| 精品国产乱码久久久久久1区2区| 永久免费看片在线播放| 久久久午夜精品理论片中文字幕| 免费看a级黄色片| 91一区在线| 9a蜜桃久久久久久免费| 草莓视频丝瓜在线观看丝瓜18| 日韩av网站导航| 尤物视频免费观看| 亚洲视频在线观看三级| 亚洲精品乱码久久久久久蜜桃欧美| 9久re热视频在线精品| 欧美一级爽aaaaa大片| 高清一区二区| 欧美一级大片视频| 香蕉视频网站在线观看| 日韩一区二区免费在线观看| 日本一区二区网站| 国产亚洲精品超碰| 亚洲综合伊人久久| 日韩五码在线| 在线观看成人av电影| 黄色欧美在线| 国产欧美欧洲在线观看| 毛片在线导航| 国产一区二区三区视频| 国产高清免费av| 色欧美日韩亚洲| 国内偷拍精品视频| 久久久精品tv| 日本精品一二三区| 免播放器亚洲一区| 99在线精品免费视频| 凹凸成人精品亚洲精品密奴| 国产伦精品一区二区三区高清版| 99久久精品一区二区成人| 欧美黑人巨大精品一区二区| 高清在线观看av| 亚洲国产毛片完整版| 国产美女www爽爽爽视频| 色综合久久久久综合体桃花网| 男人操女人的视频网站| 久久精品夜色噜噜亚洲aⅴ| 亚洲妇女无套内射精| 日韩精品免费视频人成| 免费人成自慰网站| 国产精品久久久久久久| 青娱乐国产91| 欧美天堂影院| 成人欧美一区二区三区视频xxx| 日韩中文视频| 奇米影视亚洲狠狠色| 日本精品600av| 日韩视频在线免费| 国产在线视频网址| 亚洲精品福利视频| 亚洲av无码国产综合专区| 欧美私模裸体表演在线观看| 亚洲男人第一av| 亚洲在线视频免费观看| av成人免费网站| 成人免费一区二区三区在线观看 | 视频福利一区| 国产精品12| 中文字幕一区二区三区日韩精品| 国产在线播放91| 国产精品原创视频| 国产精品视频区| 外国成人直播| 日韩av片电影专区| **欧美日韩在线观看| 欧美在线影院在线视频| av中文字幕在线看| 韩日精品中文字幕| 超碰成人av| 午夜精品蜜臀一区二区三区免费| 牛牛在线精品视频| 久久久久亚洲精品| 999福利在线视频| 国语自产精品视频在线看| 波多野结衣在线播放| 久久久久久久久久久免费 | 999国内精品视频在线| 国产免费黄色大片| 日韩第一区第二区| 日韩美女在线观看| 666av成人影院在线观看| 欧美亚洲另类制服自拍| 亚洲伊人av| 日本久久亚洲电影| 久久久成人av毛片免费观看| 国产精品高清网站| 成人精品一区二区三区电影| 国产日韩在线亚洲字幕中文| 日韩三级一区| 99久久综合狠狠综合久久止| 韩国精品福利一区二区三区| 久久涩涩网站| 精品免费av| 中文字幕一区二区三区在线乱码| 小处雏高清一区二区三区| 妞干网这里只有精品| 国产精品v亚洲精品v日韩精品| 国产乱子伦精品无码专区| 亚洲人www| 免费日韩视频在线观看| 免费在线一区观看| 成年人网站av| 白白色亚洲国产精品| 亚洲人成人无码网www国产 | jizz久久久久久| 成人精品久久一区二区三区| h视频久久久| 欧美一区二区视频在线| 午夜精品视频一区二区三区在线看| 日本一道在线观看| 亚洲在线黄色| 激情文学亚洲色图| a级高清视频欧美日韩| 日韩中文字幕有码| 亚洲另类在线视频| 亚洲日本视频在线观看| 欧美日韩亚州综合| 黄色aaa毛片| 在线电影中文日韩| 日韩特级毛片| 国产99久久精品一区二区永久免费 | 四虎电影院在线观看| 日韩一级黄色av| 国产理论在线| 91在线网站视频| 综合亚洲色图| 日韩一级片一区二区| 日韩精品免费专区| 男人网站在线观看| 中文字幕人成不卡一区| 国产又黄又爽又色| 91精品国产品国语在线不卡| 国产一级在线| 97色在线视频| 久久99成人| 日韩影视精品| 一区二区三区国产在线| 日本少妇一区二区三区| 国产免费观看久久| 日韩精品成人在线| 91精品国产aⅴ一区二区| 国产在线观看免费网站| 久久久久久久97| 国产剧情一区二区在线观看| 欧美少妇一区| 亚洲美女91| 亚洲妇女无套内射精| 国产精品国产三级国产普通话三级 | 爆操欧美美女| 成人av.网址在线网站| 最近国产精品视频| 777777av| 丁香一区二区三区| 久久精品黄色片| 欧美日韩国产小视频在线观看| 嫩草在线播放| 2019中文字幕全在线观看| gogo大尺度成人免费视频| 视频一区三区| 日本视频中文字幕一区二区三区| 少妇户外露出[11p]| 亚洲一二三四区不卡| 99久久精品国产色欲| 久久视频免费在线播放| 日韩美女在线| 亚洲欧洲精品一区二区| 三级不卡在线观看| 久久精品国产亚洲av久| 懂色aⅴ精品一区二区三区蜜月| 色呦呦中文字幕| 91大神福利视频在线| 卡通动漫精品一区二区三区| 99在线精品免费视频| av午夜精品一区二区三区| 久久精品久久精品久久| 亚洲成人xxx| 俺来俺也去www色在线观看| 国产chinese精品一区二区| 狠狠88综合久久久久综合网| 国产高潮失禁喷水爽到抽搐| 亚洲午夜在线观看视频在线| 亚洲精品一区二区口爆| 欧美激情一级欧美精品| 澳门成人av| 又粗又黑又大的吊av| 久久老女人爱爱| 国产精品露脸视频| 色诱女教师一区二区三区| 亚洲精品成a人ⅴ香蕉片| 成人在线观看www| 国产成都精品91一区二区三| 国产第一页在线播放| 日韩成人av在线播放| 日韩一区二区三区在线免费观看 | 亚洲综合二区| 级毛片内射视频| 欧美精品高清视频| 日本色护士高潮视频在线观看| 国产精品精品软件视频| 国产亚洲在线观看| 99精品欧美一区二区| 欧美美女bb生活片| av中文字幕在线看| 日本一区二区三区在线视频| 极品美女销魂一区二区三区免费| 国产成人av一区二区三区| 欧美日韩在线视频免费观看| 国产精品国产三级欧美二区| 男人的天堂成人在线| 四虎影视一区二区| 欧美大黄免费观看| 日韩在线影院| 水蜜桃在线免费观看| 91在线免费视频观看| 亚洲一区二区三区网站| 色综合久久中文字幕综合网小说| 婷婷亚洲成人| 国产黑丝在线视频| 欧美午夜精品久久久久久浪潮| 日本a在线播放| 精品一区久久久| 久久av资源站| 丁香六月婷婷综合| 久久中文字幕国产| 欧美日本成人| 国产精品日日摸夜夜爽| 欧美亚洲综合色| 18video性欧美19sex高清| 亚洲色图自拍| 91麻豆文化传媒在线观看| 欧美日韩直播| 国产九九热视频|