最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript前端實(shí)用的工具函數(shù)封裝

 更新時(shí)間:2022年07月19日 11:04:02   作者:?jiǎn)紊聿皇且餐玫穆? 
這篇文章主要為大家介紹了JavaScript前端實(shí)用的一些工具函數(shù)的封裝,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

1.webpack里面配置自動(dòng)注冊(cè)組件

第一個(gè)參數(shù)是匹配路徑,第二個(gè)是深度匹配,第三個(gè)是匹配規(guī)則

const requireComponent = require.context('./libary', true, /\.vue$/)
export default {
  install (Vue) {
    requireComponent.keys().forEach((item) => {
      **根據(jù)組件的name注冊(cè)全局組件**
      Vue.component(
        requireComponent(item).default.name,
        requireComponent(item).default
      )
    })
  }
}

2.自定義指令圖片懶加載

導(dǎo)入默認(rèn)圖片

import defaultImg from '@/assets/images/200.png'
export default {
  install (Vue) {
    // // 注冊(cè)自定義指令   v2方法
    Vue.directive('lazy', {
      // inserted () {
      //   console.log(11111)
      // }
     //注冊(cè)自定義指令  v3方法
      mounted (el, binding) {
        // 瀏覽器提供 IntersectionObserver
        const observer = new IntersectionObserver(
          ([{ isIntersecting }]) => {
            // console.log(isIntersecting, '====IntersectionObserver')
            if (isIntersecting) {
              console.log(el, binding, 11111)
              // 圖片加載失敗就顯示默認(rèn)圖片
              el.onerror = function () {
                el.src = defaultImg
              }
              el.src = binding.value
              // 不在監(jiān)聽(tīng)dom
              observer.unobserve(el)
            }
          },
          {
            threshold: 0.01
          }
        )
        // 監(jiān)聽(tīng)dom
        observer.observe(el)
      }
    })
  }
}

3.圖片文件轉(zhuǎn)base64格式(實(shí)現(xiàn)預(yù)覽)

基于 FileReader 把文件讀取為 base64 的字符串:

fileChange (e) {
      // console.log(e.target.files)
      if (e.target.files.length === 0) {
        // 沒(méi)有選擇圖片
        this.avatar = ''
      } else {
        // 創(chuàng)建 fr 對(duì)象---FileReader構(gòu)造函數(shù)
        const fr = new FileReader()
        // 讀取文件
        fr.readAsDataURL(e.target.files[0])
        // 監(jiān)聽(tīng)加載事件,讀取成功后執(zhí)行里面的回調(diào)
        fr.onload = () => {
        // 將結(jié)果賦給xxx
          this.avatar = fr.result
        }
      }
    },

給input設(shè)置change改變事件

  • 1 設(shè)置一個(gè)變量接收轉(zhuǎn)換的數(shù)據(jù)
  • 2 拿到事件目標(biāo),里面有個(gè)方法e.target.files是個(gè)偽數(shù)組.通過(guò)e.target.files.length判斷用戶(hù)是否選擇了圖片
  • 3 通過(guò)new FileReader拿到一個(gè)實(shí)例
  • 4 通過(guò) 實(shí)例名.readAsDataURL 將圖片轉(zhuǎn)成base64格式
  • 5 onload可以監(jiān)聽(tīng)轉(zhuǎn)換完成后/給聲明變量賦值

4.數(shù)組轉(zhuǎn)為tree型結(jié)構(gòu)(遞歸實(shí)現(xiàn))

當(dāng)后端傳來(lái)的數(shù)據(jù)是扁平化的時(shí)候,前端可用代碼處理數(shù)據(jù)得到樹(shù)形結(jié)構(gòu)

列表型數(shù)據(jù)的關(guān)鍵屬性: id 和 pid, id指的是自己的部門(mén)id, pid指的是父級(jí)部門(mén)的id (空則沒(méi)有父級(jí)部門(mén)) 孩子的pid與父親的id一致

// 注  :  list 傳來(lái)的數(shù)組 , value 篩選的條件
function arrToTree(list, value) {
  // 1.定義一個(gè)空數(shù)組,后續(xù)往里面添加樹(shù)形結(jié)構(gòu)
  const arr = []
  list.forEach(item => {
  // 2. 篩選滿足要求的item
    if (item.pid === value) {
  // 3.篩選所有孩子,即pid與父級(jí)id一致的(外循環(huán)走一次,里面走完所有)
      const children = arrToTree(list, item.id)
  // 4.父級(jí)中有孩子,才能加上children屬性
      if (children.length > 0) {
   // 5. 因?yàn)樾枰臉?shù)形結(jié)構(gòu)中孩子屬性名為children,手動(dòng)給父級(jí)添加一個(gè)children屬性,并賦值
        item.children = children
      }
   // 6. 把滿足要求的一組數(shù)據(jù)push進(jìn)去
      arr.push(item)
    }
  })
  // 返回樹(shù)形結(jié)構(gòu)
  return arr
}

// 第一次調(diào)用函數(shù),找出pid為''的每一項(xiàng)(即父級(jí)),后面調(diào)用,找孩子

調(diào)用: arrToTree(list, '')

5.遞歸深拷貝

  let obj = {
            name:'張三',
            age:20,
            hobby:['學(xué)習(xí)','上課','干飯'],
            student:{
                name:'尼古拉斯趙四',
                age:38
            }
        }
        //深拷貝函數(shù)
        function copy(obj,newObj){
            for(let key in obj ){
                if( obj[key] instanceof Array ){
                    newObj[key] = []
                    //遞歸調(diào)用 繼續(xù)深拷貝數(shù)組
                    copy(obj[key],newObj[key])
                }else if( obj[key] instanceof Object ){
                    newObj[key] = {}
                    //遞歸調(diào)用 繼續(xù)深拷貝對(duì)象
                    copy(obj[key],newObj[key])
                }else{
                    newObj[key] = obj[key]
                }
            }
        }
        //開(kāi)始拷貝
        let newObj = {}
        copy(obj,newObj)

6.將數(shù)組里面的對(duì)象轉(zhuǎn)換成我們需要的鍵值對(duì)

我們拿到的數(shù)據(jù):arr=[{入職日期:43535,姓名:'jack',手機(jī)號(hào):111111....},{}]

需要的上傳格式: [{timeOfEntry:43535,username:'jack',mobile:111111....},{}]

     //手動(dòng)寫(xiě)一個(gè)具有對(duì)應(yīng)關(guān)系的對(duì)象
      const userRelations = {
        '入職日期': 'timeOfEntry',
        '手機(jī)號(hào)': 'mobile',
        '姓名': 'username',
        '轉(zhuǎn)正日期': 'correctionTime',
        '工號(hào)': 'workNumber'
      }
     //第一個(gè)參數(shù)是自己寫(xiě)的對(duì)應(yīng)關(guān)系對(duì)象,第二個(gè)參數(shù)是原數(shù)組
     function demandArr(userRelations,arr){
      //創(chuàng)建一個(gè)空數(shù)組
      const newArr = []
      arr.forEach(item => {
      //創(chuàng)建一個(gè)空對(duì)象
        const obj = {}
        //循環(huán)數(shù)組里的每一個(gè)對(duì)象
        for (const k in item) {
          const englishKey = userRelations[k] 
            obj[englishKey] = item[k]
          }
         newArr.push(obj)
       })
      }
      // console.log(newArr)

以上就是JavaScript前端實(shí)用的工具函數(shù)封裝的詳細(xì)內(nèi)容,更多關(guān)于JavaScript工具函數(shù)封裝的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vite項(xiàng)目自動(dòng)添加eslint prettier源碼解讀

    Vite項(xiàng)目自動(dòng)添加eslint prettier源碼解讀

    這篇文章主要為大家介紹了Vite項(xiàng)目自動(dòng)添加eslint prettier源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 微信小程序?qū)崿F(xiàn)頁(yè)面跳轉(zhuǎn)傳值的方法

    微信小程序?qū)崿F(xiàn)頁(yè)面跳轉(zhuǎn)傳值的方法

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)頁(yè)面跳轉(zhuǎn)傳值的方法的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-10-10
  • 基于JavaScript獲取base64圖片大小

    基于JavaScript獲取base64圖片大小

    這篇文章主要介紹了基于JavaScript獲取base64圖片大小,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • js 實(shí)現(xiàn)Material UI點(diǎn)擊漣漪效果示例

    js 實(shí)現(xiàn)Material UI點(diǎn)擊漣漪效果示例

    這篇文章主要為大家介紹了js 實(shí)現(xiàn)Material UI點(diǎn)擊漣漪效果示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • VBScript版代碼高亮

    VBScript版代碼高亮

    VBScript版代碼高亮...
    2006-06-06
  • 利用javaScript處理常用事件詳解

    利用javaScript處理常用事件詳解

    這篇文章主要介紹了利用javaScript處理常用事件詳解,文章有非常詳細(xì)的代碼實(shí)踐,對(duì)學(xué)習(xí)js的小伙伴們有一定的參考價(jià)值,需要的朋友可以參考下
    2021-04-04
  • 微信小程序開(kāi)發(fā)一鍵登錄 獲取session_key和openid實(shí)例

    微信小程序開(kāi)發(fā)一鍵登錄 獲取session_key和openid實(shí)例

    這篇文章主要介紹了微信小程序開(kāi)發(fā)一鍵登錄 獲取session_key和openid實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • JavaScript中Reduce10個(gè)常用場(chǎng)景技巧

    JavaScript中Reduce10個(gè)常用場(chǎng)景技巧

    這篇文章主要為大家介紹了JavaScript中Reduce10個(gè)常用場(chǎng)景和技巧,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • JS ES新特性 模板字符串

    JS ES新特性 模板字符串

    這篇文章主要介紹了JS ES新特性模板字符串,模板字符串即Template String是增強(qiáng)版的字符串,使用反引號(hào)(```)來(lái)代替譜通字符串中的用雙引號(hào)和單引號(hào),更多相關(guān)介紹,需要的朋友可以參考下面文章的詳細(xì)內(nèi)容
    2021-12-12
  • 一文解析Express框架view對(duì)象使用

    一文解析Express框架view對(duì)象使用

    這篇文章主要介紹了Express框架view對(duì)象使用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03

最新評(píng)論

兴和县| 佛山市| 兴化市| 乐陵市| 台前县| 绩溪县| 亳州市| 蚌埠市| 高淳县| 武邑县| 马尔康县| 札达县| 衡山县| 扬中市| 西吉县| 都江堰市| 田林县| 洪泽县| 泾阳县| 灌南县| 台江县| 上饶市| 澄江县| 霍山县| 鲁甸县| 崇明县| 惠来县| 乌兰浩特市| 湖北省| 镇雄县| 阜平县| 永安市| 利川市| 德昌县| 乌什县| 柳林县| 修水县| 普定县| 夏河县| 闻喜县| 五常市|