返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue自定义加载指令最新详解
  • 824
分享到

vue自定义加载指令最新详解

2024-04-02 19:04:59 824人浏览 八月长安
摘要

目录前言创建加载组件创建指令指令文件创建构造器书写指令开启函数关闭函数前言 用过element-ui的都应该知道,里面有一个loading组件,有两种调用方法:指令和服务。但是只有一

前言

用过element-ui的都应该知道,里面有一个loading组件,有两种调用方法:指令和服务。但是只有一种加载效果,为了丰富加载效果和方便使用,于是写了一个自定义loading指令。

创建加载组件

首先,需要创建loading组件,展示需要的加载效果,因人而异,不再赘述。

创建指令

指令文件

首先,创建一个js文件用于书写自定义指令,在这个文件中导入Vueloading组件:

import Vue from 'vue'
import loading from './loading.vue'

创建构造器

主要是使用Vue.extend构造器,可以简单的理解为传入一个组件作为参数,然后返回该组件的类,可以使用这个类new出实例。

// loading组件作为参数传入
const loadinGConstructor = Vue.extend(loading)

书写指令

在此之前,设定好指令的参数,在本人的项目中,参数有两种方式:1.传入一个布尔值,代表是否开启加载;2.传入一个对象,对象中包含是否开启遮罩、提示文字、加载背景颜色等属性,方便开发时,高度自定义laoding
指令的触发主要是在update中,该属性可接收一个函数,每次指令的参数改变时都会触发该函数,就是在这里判断开启或者关闭加载效果。 整体代码如下,附有详细注释:

const loadingDirective = Vue => {
  Vue.directive('custLoading', {
    
    // update: 参数变化时触发
    update: function (el, binding, vnode) {
      const value = binding.value
      let backup = {}
      // 判断参数类型,将参数都转换为对象,方便后续统一处理
      typeof value === 'boolean' ? (backup.loading = value) : (backup = value || {})
      // 取出所有的参数
      const { loading, tip, background } = backup
      // 根据loading参数判断开启或者关闭加载效果,开启和关闭函数后续会讲到
      loading ? createLoading(el, tip, background) : close(el?.customLoadingInstance?.$el)
    },
    // unbid: 指令卸载时触发
    unbind: function (el, binding) {
      const { loading } = binding.value || {}
      // 如果还在展示加载特效,则关闭
      loading && close(el?.customLoadingInstance?.$el)
    }
  })
}
export default loadingDirective

开启函数

在上面的指令中,当开启的参数为true时,回会调用一个createLoading函数用于将加载效果加入到指令挂载的元素上,具体思路如下:
1.在调用时,我们传入了三个参数给它,分别是挂载有自定义加载指令的元素、加载时的提示、加载背景颜色,详细可见上面的指令代码。
2.在执行之前,还需要进行判断当前的Vue实例是否运行在服务器上,如果是,此时不需要将加载效果展示出来;或者该元素之前是否已经带有加载特效,如果是的话,没必要在开启一次,不然到时会出现多层加载效果,既多余,又让页面显得混乱。
3.判断需要使用加载效果的元素是否还存在,不存在,则挂载到#main或者document.body上。
4.判断元素上是否存在定位或者其他条件,在本人的项目中,使用绝对定位来使加载效果铺满元素,因此需要进行判断,如果没有定位,则加上relative
5.使用loadingConstructor,创建loading实例,将实例作为子元素通过appendChild,放进需要展示的元素中,就可以展示出来;同时,在展示的元素上增加一个属性customLoadingInstance,用于记录当前的loading实例,方便后续的销毁。
整体代码如下:

const createLoading = (target, tip= '加载中,请稍候...', background) => {
  // 判断是否允许开启加载特效
  if (Vue.prototype.$isServer || target?.customLoadingInstance) return
  const mainEL = document.querySelector('#main')
  // 判断展示加载效果的元素是否存在
  const parentNode = target || mainEL || document.body
  // 判断父级是否存在定位,没有则添加定位
  const position = getComputedStyle(parentNode)?.position
  (!position || position === 'static') && (parentNode.style.position = 'relative')
  // 创建loading实例
  const instance = new loadingConstructor({
    el: document.createElement('div'),
    data: { background, tip, parentNodeWidth: parentNode.clientWidth, isshow: true }
  })
  // 注意:loading实例是一个Vue组件对象,真正的DOM放在实例的$el属性上
  parentNode.appendChild(instance.$el)
  parentNode.customLoadingInstance = instance
  
  return instance
}

关闭函数

有开启就得有结束,当开启的参数为false时,关闭加载效果。该函数接收loading实例的$el,其实就是加载效果的DOM元素,思路如下:
1.为了使加载组件看起来是逐渐消失的,不得在第一时间将加载效果的DOM元素删除,而是给它添加一个逐渐消失的动画,通过一个class设定。
2.设定动画消失时间,由loading组件内部实现在规定时间内,将整个加载效果执行完成或者淡出页面。也可省略此步骤,直接就将其移除。 之所以加入这个效果,是为了用户视觉上感受更好。
3.创建定时器,用于在加载效果消失时,删除加载效果的DOM元素。同2,也可直接移除。

const close = (target) => {
  if (!target) return
  // 添加逐渐消失的class
  target.className += ' custom-loading-disappear'
  // 获取loading实例
  const instance = target?.parentNode?.customLoadingInstance
  //  设定消失时间。
  instance?.$data?.dur && (instance.$data.dur = 0.8)
  // 设定定时器,用于在加载效果消失时,删除加载效果的`DOM`元素。
  let timer = setTimeout(() => {
    if (target && target.parentNode) {
      // 将customLoadingInstance 属性置为null,才不会干扰下一次开启
      target.parentNode.customLoadingInstance = null
      // 将加载效果的DOM元素移除
      target.parentNode.removeChild(target)
    }
    clearTimeout(timer)
    timer = null
  }, 1100)
}

到此这篇关于vue自定义加载指令的文章就介绍到这了,更多相关vue自定义加载指令内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: vue自定义加载指令最新详解

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

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

猜你喜欢
  • vue自定义加载指令最新详解
    目录前言创建加载组件创建指令指令文件创建构造器书写指令开启函数关闭函数前言 用过element-ui的都应该知道,里面有一个loading组件,有两种调用方法:指令和服务。但是只有一...
    99+
    2024-04-02
  • vue如何自定义加载指令
    本文小编为大家详细介绍“vue如何自定义加载指令”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue如何自定义加载指令”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言用过element-ui的都应该知道,里面...
    99+
    2023-07-02
  • Vue自定义指令详解
    目录Vue自定义指令自定义指令钩子函数输出相关属性运用例子总结Vue自定义指令 自定义指令 注册一个全局指令v-focus,该指令的功能是在页面加载时元素获得焦点 <!DO...
    99+
    2024-04-02
  • Vue中自定义图片懒加载指令
    本篇文章为大家展示了Vue中自定义图片懒加载指令,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。先看如何使用这个指令:  <img v-lazyloa...
    99+
    2024-04-02
  • Vue自定义指令详细
    目录1、背景2、局部自定义指令3、全局自定义指令4.1 自定义指令钩子函数4.2 钩子函数参数4.3 动态指令传参 5、拓展1、背景 最近在面试找工作,然后面试官就问了有关自定义指令...
    99+
    2024-04-02
  • vue自定义加载指令v-loading占位图指令v-showimg
    目录了解自定义指令的钩子函数注册成为全局指令需求描述列表组件 ListCom.vue加载动画组件 LoadingCom.vue钩子函数 loading.js分析上面的代码main.j...
    99+
    2022-11-13
    vue自定义加载占位图指令 vue自定义指令
  • 详解Vue自定义指令及使用
    目录一、什么是指令vue 中常用的一些内置 v- 指令v-if 和 v-show 的对比二、自定义指令的钩子函数三、全局指令四、局部指令五、带参数的自定义指令六、函数简写七、应用实例...
    99+
    2024-04-02
  • Vue自定义指令v-focus实例详解
    目录前言自定义指令 directive项目实际使用技术背景实际操作优势setTimeout(fn, 0) 永远的神$nextTick(callback)小结前言 本文直接参考vue2...
    99+
    2024-04-02
  • vue2.x与vue3.x中自定义指令详解(最新推荐)
    目录前言一、自定义指令分类二、Vue2.x自定义指令钩子函数(1)bind与update区别(2)update与componentUpdated区别(3)钩子函数的参数(摘...
    99+
    2022-12-08
    vue2.x与vue3.x自定义指令 vue2.x与vue3.x
  • Vue自定义指令学习及应用详解
    目录一、自定义指令v-mycolor二、使用钩子函数的自定义指令三、Vue实现简单的学生信息管理系统除了核心功能默认内置的指令,Vue.js允许注册自定义指令。添加一个自定义指令,有...
    99+
    2023-05-19
    Vue自定义指令学习 Vue自定义指令应用 Vue自定义指令 Vue 指令
  • Vue2 中自定义图片懒加载指令 v-lazy实例详解
    目录引言1.涉及到的主要知识讲解1.1 Vue2 中自定义指令1.1.1 指令对象的钩子函数1.1.2 钩子函数参数1.2 使用事件总线进行模块之间的通信1.3 使用到的 Web A...
    99+
    2024-04-02
  • Vue.js directive自定义指令详解
    自定义一个demo指令 Vue自定义指令语法如下: Vue.directive(id, definition) 传入的两个参数,id是指指令ID,definition是指定义...
    99+
    2024-04-02
  • vue中自定义指令directive的详细指南
    目录一、 什么是自定义指令二、 如何自定义指令钩子函数三、应用场景输入框防抖图片懒加载一键 Copy的功能拖拽总结一、 什么是自定义指令 我们看到的v-开头的行内属性,都是指令,不...
    99+
    2024-04-02
  • 详解Vue自定义指令如何实现处理图片加载失败的碎图
    目录一、自定义指令1、局部注册和使用2、全局注册和使用二、自定义指令处理图片加载失败(碎图)一、自定义指令 vue中除v-model、v-show等内置指令之外,还允许注册自定义指令...
    99+
    2023-02-15
    Vue自定义指令 Vue处理碎图 Vue图片加载失败
  • 深入解析Vue的自定义指令
    目录介绍​指令钩子​钩子参数​简化形式​对象字面量​在组件上使用​介绍​ 除了 Vue 内置的一系列指令 (比如 v-model 或 v-show) 之...
    99+
    2023-05-18
    Vue 指令 Vue自定义指令
  • lottie实现vue自定义loading指令及常用指令封装详解
    目录一、前言二、实现方式1.v-loading2.v-click-outside三、后记一、前言 本文主要介绍使用lottie动画实现vue自定义loading的指令方法。另外本篇文...
    99+
    2024-04-02
  • vue全局自定义指令和局部自定义指令的使用
    目录局部自定义指令(只针对组件内的元素)定义全局自定义指令自定义指令的钩子函数自定义指令钩子函数的参数例子除了默认设置的核心指令 (v-model 和 v-show),Vue 也允许...
    99+
    2024-04-02
  • VUE 自定义指令:解锁前端开发的新境界
    什么是 VUE 自定义指令? 自定义指令是 Vue 中的特殊函数,用于扩展 HTML 元素或组件的功能。它们允许开发人员根据特定需求创建自己的指令,从而增强代码的可重用性和灵活性。 自定义指令的结构 Vue 自定义指令由以下部分组成: ...
    99+
    2024-03-14
    自定义指令
  • Vue自定义指令怎么写
    小编给大家分享一下Vue自定义指令怎么写,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是Vue指令指令是一种可以附加到DOM...
    99+
    2024-04-02
  • vue中的自定义指令clickOutside
    目录自定义指令clickOutside首先我们先看看vue官方的文档clickoutside 这个指令用在哪里呢?写法自定义指令clickoutside使用及扩展用法自定义指令cli...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作