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

vue如何自定义加载指令

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

vue如何自定义加载指令

本文小编为大家详细介绍“vue如何自定义加载指令”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue如何自定义加载指令”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

前言

用过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如何自定义加载指令”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

免责声明:

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

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

vue如何自定义加载指令

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

下载Word文档

猜你喜欢

vue如何自定义加载指令

本文小编为大家详细介绍“vue如何自定义加载指令”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue如何自定义加载指令”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言用过element-ui的都应该知道,里面
2023-07-02

vue自定义加载指令v-loading占位图指令v-showimg

这篇文章主要为大家介绍了vue自定义加载指令和v-loading占位图指令v-showimg的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

Vue中如何自定义指令

这篇文章主要介绍Vue中如何自定义指令,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Vue中除了内置指令,也允许注册自定义的指令。自定义指令提供一种将数据的变化映射为DOM的行为例如:当我们想用一个函数表示焦点Vue
2023-06-04

Vue中如何实现自定义指令?

Vue.js提供自定义指令功能,用于扩展其功能。创建自定义指令涉及定义指令对象并注册它。指令生命周期钩子函数在不同阶段调用。示例:v-highlight指令可高亮文本。自定义指令在创建可重用组件、扩展Vue功能、优化性能等场景中很有用。最佳实践包括保持简单、考虑性能、遵循命名约定和提供文档。
Vue中如何实现自定义指令?
2024-04-02

vue中的自定义指令如何使用

这篇文章主要介绍“vue中的自定义指令如何使用”,在日常操作中,相信很多人在vue中的自定义指令如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue中的自定义指令如何使用”的疑惑有所帮助!接下来,请跟
2023-06-29

详解Vue自定义指令如何实现处理图片加载失败的碎图

这篇文章主要介绍了详解Vue自定义指令如何实现处理图片加载失败的碎图,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2023-02-15

Vue如何自定义指令实现元素拖动

这篇文章主要介绍了Vue如何自定义指令实现元素拖动的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue如何自定义指令实现元素拖动文章都会有所收获,下面我们一起来看看吧。一、自定义指令在使用自定义指令之前,先对自
2023-06-26

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录