Vue 封裝 loading 外掛
具體屬性:
this.$loading(option: Object): Object -> close();
option 屬性:
屬性名 | 型別 | 描述 | 預設值 |
---|---|---|---|
ele | DOM元素 | 要新增載入的DOM元素 | document.body |
message | String | 載入顯示的文字 | “loading…” |
color | String | 載入顯示文字顏色 | “#000000” |
iconfont | String | 載入文字前方顯示的 iconfont 類名(“icon-xxx”) | “” |
backgroundColor | String | 載入背景顏色(建議使用 rgba) | “rgba(44, 62, 80, .7)” |
程式碼如下:
vp-loading.vue
<template>
<div class="vp-loading" >
<span :class="'iconfont ' + iconfont"></span>{{ message }}
</div>
</template>
<script>
export default {
name: "VpLoading",
props: {
message: {
type: String,
default: ""
},
iconfont: {
type: String,
default: ""
}
},
data() {
return {
}
},
created() {
},
mounted() {
}
}
</script>
<style scoped>
.vp-loading {
position: fixed;
z-index: 999;
top: 0px;
right: 0;
left: 0;
bottom: 0;
background-color: rgba(44, 62, 80, .7);
display: flex;
justify-content: center;
align-items: center;
}
.iconfont {
margin-right: .2rem
}
</style>
loading.js
import VpLoading from "./vp-loading.vue";
let loading = {};
loading.install = Vue => {
Vue.prototype.$loading = function(option = {}) {
let options = {
ele: option && option.ele || document.body,
message: option && option.message || "loading...",
color: option && option.color || "#000000",
iconfont: option && option.iconfont || "",
backgroundColor: option && option.backgroundColor || "rgba(44, 62, 80, .7)" // 建議使用 rgba 格式,並設定透明度
}
let vploadingInstance = Vue.extend(VpLoading);
let vploading
let loadingEle = document.createElement("div");
let loadEle;
Vue.nextTick().then(() => {
vploading = new vploadingInstance({
propsData: {
message: options.message,
iconfont: options.iconfont
}
});
vploading.$mount(loadingEle);
let el = vploading.$el;
loadEle = options.ele;
if (loadEle !== document.body) {
loadEle.setAttribute("style", "position: relative");
el.setAttribute("style", "position: absolute; top: 0; right: 0; left: 0; bottom: 0")
}
el.style.color = options.color;
el.style.backgroundColor = options.backgroundColor;
loadEle.appendChild(el);
});
return {
close: () => {
vploading.$el.remove();
}
};
};
};
export default loading;
main.js
import vploading from './components/loading';
Vue.use(vploading);
元件內部使用
mounted() {
let loadObj = this.$loading({
// ele: document.getElementsByClassName("test")[0],
color: "#00a8ff",
iconfont: "icon-redupaixu",
});
setTimeout(() => {
loadObj.close();
}, 3000);
},
相關文章
- Vue外掛從封裝到釋出Vue封裝
- Vue — v-load封裝 loading效果Vue封裝
- vue-loading外掛開發+npm部署VueNPM
- 自己寫一個vue的loading外掛Vue
- Vue二次封裝axios為外掛使用Vue封裝iOS
- 封裝vue外掛,讀懂這遍文章就夠了封裝Vue
- Sublime裝vue外掛Vue
- Flutter學習指南:封裝 API 外掛Flutter封裝API
- 關於react-native封裝外掛--swiperReact封裝
- 用原生JS封裝外掛的方式有哪些?JS封裝
- vue外掛Vue
- 封裝了一個騰訊雲im的flutter外掛封裝Flutter
- React Native開發封裝Toast與載入Loading元件React Native封裝AST元件
- vue封裝彈框Vue封裝
- vue元件封裝指南Vue元件封裝
- vue 封裝按鈕Vue封裝
- Ladda的vue封裝Vue封裝
- 如何使用Flutter封裝即時通訊IM框架開發外掛Flutter封裝框架
- 原生js—ajax的封裝外掛.js—(對get和post做了相容)JS封裝
- Vue-router外掛使用Vue
- vue輪播圖外掛Vue
- Vue-外掛開發Vue
- fastclick外掛的使用--移動端vue專案開發(vue常用外掛)ASTVue
- Eclipse安裝lombok外掛及外掛使用案例EclipseLombok
- ATOM 安裝外掛
- retdec 外掛安裝
- Elasticsearch外掛安裝Elasticsearch
- 封裝Vue 的 SVG 元件封裝VueSVG元件
- Vue Axios 的封裝使用VueiOS封裝
- Vue 封裝動態元件Vue封裝元件
- vue專案封裝iconVue封裝
- [Vue Router] Lazy loading routesVue
- 捲軸外掛vue-scrollVue
- vue檢視大圖外掛Vue
- Vue外掛-json編輯器VueJSON
- Vue外掛打包與釋出Vue
- vue外掛編寫小記Vue
- 如何使用外掛化機制優雅的封裝你的請求hook封裝Hook