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

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

 更新時間:2022年07月19日 11:04:02   作者:單身不是也挺好的嘛  
這篇文章主要為大家介紹了JavaScript前端實用的一些工具函數(shù)的封裝,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

1.webpack里面配置自動注冊組件

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

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

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

導(dǎo)入默認圖片

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

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

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

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

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

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

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

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

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

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

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

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

5.遞歸深拷貝

  let obj = {
            name:'張三',
            age:20,
            hobby:['學習','上課','干飯'],
            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ù)深拷貝對象
                    copy(obj[key],newObj[key])
                }else{
                    newObj[key] = obj[key]
                }
            }
        }
        //開始拷貝
        let newObj = {}
        copy(obj,newObj)

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

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

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

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

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

相關(guān)文章

  • Vite項目自動添加eslint prettier源碼解讀

    Vite項目自動添加eslint prettier源碼解讀

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

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

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

    基于JavaScript獲取base64圖片大小

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

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

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

    VBScript版代碼高亮

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

    利用javaScript處理常用事件詳解

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

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

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

    JavaScript中Reduce10個常用場景技巧

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

    JS ES新特性 模板字符串

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

    一文解析Express框架view對象使用

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

最新評論

绥江县| 孟村| 安泽县| 大荔县| 南昌县| 布尔津县| 吉水县| 康乐县| 商洛市| 深泽县| 昌平区| 治多县| 南木林县| 酉阳| 台中市| 阿荣旗| 溆浦县| 文成县| 科技| 玛曲县| 鞍山市| 民权县| 平定县| 桂阳县| 正镶白旗| 阿拉善左旗| 三都| 扬中市| 红安县| 得荣县| 灵台县| 拜城县| 隆林| 基隆市| 兰溪市| 灯塔市| 黄山市| 阳山县| 枣庄市| 武陟县| 林甸县|