我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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.class="lazy" data-src = defaultImg
              }
              el.class="lazy" data-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工具函数封装的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JS怎么封装转换前后端接口数据格式工具

本篇内容介绍了“JS怎么封装转换前后端接口数据格式工具”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!思路一般后端返回给前端的数据几乎都是数组
2023-07-05

前端开发的常用工具函数有哪些

这篇文章主要讲解了“前端开发的常用工具函数有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“前端开发的常用工具函数有哪些”吧!1、时间格式化等方法推荐使用 moment.js 的库文件2、
2023-06-08

web前端:封装一个简单的动画函数

编程学习网:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成类,其中数据和函数都是类的成员。
web前端:封装一个简单的动画函数
2024-04-23

JS封装转换前后端接口数据格式工具函数下划线<=>大写

这篇文章主要为大家介绍了JS优雅封装转换前后端接口数据格式工具函数下划线<=>大写实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-13

JavaScript前后端数据交互工具ajax使用教程

Ajax(Asynchronous Javascript And XML),即是异步的JavaScript和XML,Ajax其实就是浏览器与服务器之间的一种异步通信方式
2022-11-13

Android封装的http请求实用工具类

代码如下:import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.URLEncoder;import java.security.KeyS
2022-06-06

JavaScript 前端安全工具和技术:保护您的应用程序

JavaScript 是世界上最流行的编程语言,但它也容易受到攻击。本文介绍了一些 JavaScript 前端安全工具和技术,帮助您保护您的应用程序安全。
JavaScript 前端安全工具和技术:保护您的应用程序
2024-02-04

好程序员web前端分享用JavaScript实现的5个常见函数

好程序员web前端分享用JavaScript实现的5个常见函数,在学习JavaScript,或者前端面试中,有人会问你节流函数、防抖函数、递归函数等,本文分享了5个常见函数,希望对大家有所帮助。 在 JavaScript 中有一些问题会被拿
2023-06-03

golang中封装模型的常用函数如何实现?

在Golang中,封装模型的常用函数可以通过使用结构体和方法来实现。结构体是一种自定义的数据类型,可以用来封装相关的数据和方法。方法是与结构体关联的函数,可以在方法内部访问和操作结构体的成员。通过将函数定义为结构体的方法,我们可以将函数与特
golang中封装模型的常用函数如何实现?
2024-02-12

前端开发中的应用与实践:使用Ajax函数

Ajax函数在前端开发中的应用与实践随着Web应用的快速发展,前端开发变得越来越重要。而Ajax作为一种前端开发技术,能够实现无需刷新页面的数据交互,成为了前端开发中不可或缺的工具。本文将介绍Ajax函数的基本原理,以及在前端开发中的应用
前端开发中的应用与实践:使用Ajax函数
2024-01-26

使用Springboot封装一个自适配的数据单位转换工具类

我们在接收前台传输的数据时,往往SpringBoot使用内置的数据类型转换器把我们提交的数据自动封装成对象等类型,下面这篇文章主要给大家介绍了关于使用Springboot封装一个自适配的数据单位转换工具类的相关资料,需要的朋友可以参考下
2023-03-08

编程热搜

目录