返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript前端实用的工具函数封装
  • 538
分享到

JavaScript前端实用的工具函数封装

2024-04-02 19:04:59 538人浏览 薄情痞子
摘要

目录1.webpack里面配置自动注册组件2.自定义指令图片懒加载3.图片文件转base64格式(实现预览)4.数组转为tree型结构(递归实现)5.递归深拷贝6.将数组里面的对象转

1.WEBpack里面配置自动注册组件

第一个参数是匹配路径,第二个是深度匹配,第三个是匹配规则

const requireComponent = require.context('./libary', true, /\.Vue$/)
export default {
  install (Vue) {
    requireComponent.keys().forEach((item) => {
      **根据组件的name注册全局组件**
      Vue.component(
        requireComponent(item).default.name,
        requireComponent(item).default
      )
    })
  }
}

2.自定义指令图片懒加载

导入默认图片

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
              // 不在监听dom
              observer.unobserve(el)
            }
          },
          {
            threshold: 0.01
          }
        )
        // 监听dom
        observer.observe(el)
      }
    })
  }
}

3.图片文件转base64格式(实现预览)

基于 FileReader 把文件读取为 base64 的字符串

fileChange (e) {
      // console.log(e.target.files)
      if (e.target.files.length === 0) {
        // 没有选择图片
        this.avatar = ''
      } else {
        // 创建 fr 对象---FileReader构造函数
        const fr = new FileReader()
        // 读取文件
        fr.readAsDataURL(e.target.files[0])
        // 监听加载事件,读取成功后执行里面的回调
        fr.onload = () => {
        // 将结果赋给xxx
          this.avatar = fr.result
        }
      }
    },

给input设置change改变事件

  • 1 设置一个变量接收转换的数据
  • 2 拿到事件目标,里面有个方法e.target.files是个伪数组.通过e.target.files.length判断用户是否选择了图片
  • 3 通过new FileReader拿到一个实例
  • 4 通过 实例名.readAsDataURL 将图片转成base64格式
  • 5 onload可以监听转换完成后/给声明变量赋值

4.数组转为tree型结构(递归实现)

后端传来的数据是扁平化的时候,前端可用代码处理数据得到树形结构

列表型数据的关键属性: id 和 pid, id指的是自己的部门id, pid指的是父级部门的id (空则没有父级部门) 孩子的pid与父亲的id一致

// 注  :  list 传来的数组 , value 筛选的条件
function arrToTree(list, value) {
  // 1.定义一个空数组,后续往里面添加树形结构
  const arr = []
  list.forEach(item => {
  // 2. 筛选满足要求的item
    if (item.pid === value) {
  // 3.筛选所有孩子,即pid与父级id一致的(外循环走一次,里面走完所有)
      const children = arrToTree(list, item.id)
  // 4.父级中有孩子,才能加上children属性
      if (children.length > 0) {
   // 5. 因为需要的树形结构中孩子属性名为children,手动给父级添加一个children属性,并赋值
        item.children = children
      }
   // 6. 把满足要求的一组数据push进去
      arr.push(item)
    }
  })
  // 返回树形结构
  return arr
}

// 第一次调用函数,找出pid为''的每一项(即父级),后面调用,找孩子

调用: arrToTree(list, '')

5.递归深拷贝

  let obj = {
            name:'张三',
            age:20,
            hobby:['学习','上课','干饭'],
            student:{
                name:'尼古拉斯赵四',
                age:38
            }
        }
        //深拷贝函数
        function copy(obj,newObj){
            for(let key in obj ){
                if( obj[key] instanceof Array ){
                    newObj[key] = []
                    //递归调用 继续深拷贝数组
                    copy(obj[key],newObj[key])
                }else if( obj[key] instanceof Object ){
                    newObj[key] = {}
                    //递归调用 继续深拷贝对象
                    copy(obj[key],newObj[key])
                }else{
                    newObj[key] = obj[key]
                }
            }
        }
        //开始拷贝
        let newObj = {}
        copy(obj,newObj)

6.将数组里面的对象转换成我们需要的键值对

我们拿到的数据:arr=[{入职日期:43535,姓名:'jack',手机号:111111....},{}]

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

     //手动写一个具有对应关系的对象
      const userRelations = {
        '入职日期': 'timeOfEntry',
        '手机号': 'mobile',
        '姓名': 'username',
        '转正日期': 'correctionTime',
        '工号': 'workNumber'
      }
     //第一个参数是自己写的对应关系对象,第二个参数是原数组
     function demandArr(userRelations,arr){
      //创建一个空数组
      const newArr = []
      arr.forEach(item => {
      //创建一个空对象
        const obj = {}
        //循环数组里的每一个对象
        for (const k in item) {
          const englishKey = userRelations[k] 
            obj[englishKey] = item[k]
          }
         newArr.push(obj)
       })
      }
      // console.log(newArr)

以上就是javascript前端实用的工具函数封装的详细内容,更多关于JavaScript工具函数封装的资料请关注编程网其它相关文章!

--结束END--

本文标题: JavaScript前端实用的工具函数封装

本文链接: https://lsjlt.com/news/164617.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JavaScript前端实用的工具函数封装
    目录1.webpack里面配置自动注册组件2.自定义指令图片懒加载3.图片文件转base64格式(实现预览)4.数组转为tree型结构(递归实现)5.递归深拷贝6.将数组里面的对象转...
    99+
    2024-04-02
  • 常用的前端JavaScript方法封装
    目录1、输入一个值,返回其数据类型**2、数组去重3、字符串去重4、深拷贝 浅拷贝5、reverse底层原理和扩展6、圣杯模式的继承7、找出字符串中第一次只出现一次的字母8、找元素的...
    99+
    2024-04-02
  • javascript常用工具类如何封装
    小编给大家分享一下javascript常用工具类如何封装,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言因为工作中经常用到这些...
    99+
    2024-04-02
  • 前端开发的常用工具函数有哪些
    这篇文章主要讲解了“前端开发的常用工具函数有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“前端开发的常用工具函数有哪些”吧!1、时间格式化等方法推荐使用 moment.js 的库文件2、...
    99+
    2023-06-08
  • JS怎么封装转换前后端接口数据格式工具
    本篇内容介绍了“JS怎么封装转换前后端接口数据格式工具”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!思路一般后端返回给前端的数据几乎都是数组...
    99+
    2023-07-05
  • JS封装转换前后端接口数据格式工具函数下划线<=>大写
    目录一、前言二、思路三、代码四、效果结语一、前言 这段时间接近年底,公司的业务也不是很繁忙,有些闲暇的时间,就模仿ruoyi写一个后台系统,技术栈前端是react18,后端为koa...
    99+
    2023-05-13
    JS封装转换接口数据格式 JS前后端接口封装
  • Web前端正则工具函数有哪些
    这篇文章主要讲解了“Web前端正则工具函数有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Web前端正则工具函数有哪些”吧!验证股票代码(A股)&nbs...
    99+
    2024-04-02
  • JavaScript前后端数据交互工具ajax使用教程
    目录1. 介绍1.1定义1.2传统请求的问题1.3Ajax请求与传统请求的区别1.4应用场景2.原生ajax用法2.1ajax的基础语法2.2ajax提交数据3.jquery的aja...
    99+
    2022-11-13
    JavaScript ajax JavaScript 前后端数据交互
  • JavaScript中实用工具函数有哪些
    这篇文章主要讲解了“JavaScript中实用工具函数有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中实用工具函数有哪些”吧! ...
    99+
    2024-04-02
  • JavaScript前端构建工具原理的理解
    目录前言构建工具的前世今生YUI Tool + AntGrunt / GulpWebpack / Rollup / ParcelVite / Esbuildjs 模块化的发展史和构建...
    99+
    2024-04-02
  • web前端实用工具有哪些
    本篇内容介绍了“web前端实用工具有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、CSS布局生成器它是一个全功能的 CSS 和 JS...
    99+
    2023-06-30
  • Android封装的http请求实用工具类
    代码如下:import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.URL...
    99+
    2022-06-06
    工具类 HTTP 工具 http请求 Android
  • JavaScript常用的工具函数分享
    目录格式化时间戳时间格式化 几分钟前 几小时前url参数转为对象对象序列化【对象转url参数】本地存储cookie操作数字格式化单位数字千位过滤过滤成版本号首字母大写class 操作...
    99+
    2024-04-02
  • JavaScript中的50+个实用工具函数小结
    JavaScript可以做很多出色的事情,本篇文章给大家整理50+个实用工具函数,可以帮助你提高工作效率并可以帮助调试代码 1、isStatic: 检测数据是不是除了symbol外...
    99+
    2024-04-02
  • JavaScript 浏览器开发者工具,前端开发的超级工具
    JavaScript 浏览器开发者工具是一套强大的工具,可帮助前端开发人员调试、分析和优化其 Web 应用程序。这些工具集成在 Chrome、Firefox、Safari 和 Microsoft Edge 等现代浏览器中,提供了各种功能,...
    99+
    2024-04-02
  • 微信小程序工具函数封装的示例分析
    这篇文章主要介绍微信小程序工具函数封装的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下const formatTime = date...
    99+
    2024-04-02
  • CSS和JavaScript常用工具封装方法是什么
    这篇文章主要介绍“CSS和JavaScript常用工具封装方法是什么”,在日常操作中,相信很多人在CSS和JavaScript常用工具封装方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CSS和Jav...
    99+
    2023-06-04
  • JavaScript函数怎么封装和使用
    本篇内容主要讲解“JavaScript函数怎么封装和使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript函数怎么封装和使用”吧!1、函数函数:...
    99+
    2024-04-02
  • JavaScript函数封装的示例详解
    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"&g...
    99+
    2024-04-02
  • 分享JavaScript和CSS常用工具方法封装教程
    本篇内容介绍了“分享JavaScript和CSS常用工具方法封装教程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作