摘要:第六集從零開始實現組件本集定位組件我相信只要與后端存在交互的項目都是需要它的組件雖然簡單但他的作用十分重要讓用戶有一個良好的體驗也就是反饋給用戶一個信號我正在做再等等遮擋住用戶的操作也就是此期間有可能不讓用戶再去觸發其他事件不讓用戶看到白屏
第六集: 從零開始實現(loading組件 )
本集定位 :
loading組件我相信只要與后端存在交互的項目都是需要它的, 組件雖然簡單, 但他的作用十分重要:
讓用戶有一個良好的體驗, 也就是反饋給用戶一個信號, "我正在做, 再等等...".
遮擋住用戶的操作, 也就是此期間(有可能)不讓用戶再去觸發其他事件.
不讓用戶看到白屏, 看到白屏的體驗差到爆炸啊.
各種炫酷的效果, 也是吸睛的一種手段.
一: loading需求分析
出現之時, 要遮擋用戶的操作.
不依賴dom, 要通過js就能控制它的出現與隱藏, 比如配置axios.
充滿父級, 而不是充滿body, 因為是pc端, 所以不是小黑塊的形式.
屏幕上方進度條的討論
我去年的工程里面用的進度條, 體驗太差了, 不夠顯眼, 屏幕上不能點擊讓人懵圈, 所以本次不用.
骨架屏的討論
????下一章會做(簡易版骨架屏).
很多技術方向, 是為了完美展示dom結構的陰影, 1:1的還原還未加載出的dom的樣子, 其實我感覺不用這樣把.... 只是個過渡階段有個大致的樣子就可以了, 更多的精力與能力放在業務上, 據我觀察了很多app, 真的100%還原的真的不多, 而且我問過很多朋友是否注意到骨架屏與真實的dom結構存在偏差, 全都說沒注意到, 所以骨架屏這方面本套組件只做最基本的功能.
二: 基礎結構的搭建
模板
// 老規矩:// 黑色的遮罩層 // icon與內容顯示區// icon組件 // 顯示的提示文字 {{title}} js
props: { title: { type: String, default: "加載中 . . ." }, iconName: { // 加載圖標的樣子肯定是用戶自定義的 type: String, default: "cc-load1" // 默認就是普通的菊花 }, iconColor: { // 圖標的顏色也是用戶自己定的, 萬一有特殊需求 type: String, default: "#3F8BDB" } }css部分, 針對居中與定位都有封裝.
@import "./common/var.scss"; @import "./common/extend.scss"; @import "./common/mixin.scss"; @include b(loading) { @include position(); &__curtain{ @include position(); } &__icon{ position: absolute; color: $--color-nomal; z-index: 10; @include flexCenter; @include position(); :nth-child(1){ // 文字與圖標分的開一些 margin-bottom:6px; } } }src/style/common/mixin.scss
@mixin position($position: absolute) { margin: auto; position: $position; top: 0; left: 0; right: 0; bottom: 0; } @mixin flexCenter { display: flex; align-items: center; flex-direction: column; justify-content: center; }使用顯示
// 需要顯示的時候, 讓這個dom顯示即可, 因為默認是對瀏覽器定位的.三: 針對父級定位, 而不是全局的loading
其實很簡單, 也就是屬性的差別, 把fixed定位換掉即可, 都可以換上吸附屬性浪一浪
讓我來加很多友好的屬性{{title}} js, 這里面的默認值都是本套工程的共用值;
props: { position: { type: String, default: "fixed" }, title: { type: String, default: "加載中 . . ." }, textColor: { type: String, default: "#3F8BDB" }, opacity: { type: Number, default: 0.8 }, iconName: { type: String, default: "cc-load1" }, iconColor: { type: String, default: "#3F8BDB" }, curtainColor: { type: String, default: "black" }, boxZIndex: { type: Number, default: 100 }, textFontSize: { type: Number, default: 17 }, iconSize: { type: Number, default: 25 } },效果展示
四: 添加事件與js編程式調用
其實就算是蒙層狀態, 也要給個點擊事件, 比如用戶點了很多下, 可以給用戶彈出一個"馬上好,再點受不了了...", 用戶可以自己通過native修飾符去做, 但是那樣太不工程化了.
onClickLoading() { this.$emit("click"); }別忘了加stop修飾符, 不然點擊穿透可就壞事了.
我們更多時候是要從js的方式控制加載狀態的
vue-cc-ui/src/components/loading/main/loading.js// 引入寫好的組件 import Loading from "./loading.vue"; Loading.install = function(Vue) { // 注冊一下才能使用 Vue.component(Loading.name, Loading); // 在原型上掛在一波 Vue.prototype.$ccShowLoading = function(options) { // extend也就是實例化這個組件 let Constructor = Vue.extend(Loading); let node = new Constructor({ propsData: options // 所有的配置也都如數傳進去 }); // 執行到他的鉤子 node.vm = node.$mount(); // 插入body, 因為這個就沒必要插入固定的父級了, 用戶自己傳也可以 document.body.appendChild(node.$el); }; // 有出現就要有消失 Vue.prototype.$ccHiddenLoading = function() { // 從body上面找到class為這個的元素就干掉. document.body.childNodes.forEach(item => { if (item.className === "cc-loading") { document.body.removeChild(item); } }); }; }; export default Loading;下一章: 簡易版骨架屏
歡迎大家一起進步!github: 鏈接描述
個人網站: 鏈接描述文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/116141.html
相關文章
第六集: 從零開始實現一套pc端vue的ui組件庫( loading )組件
摘要:第六集從零開始實現組件本集定位組件我相信只要與后端存在交互的項目都是需要它的組件雖然簡單但他的作用十分重要讓用戶有一個良好的體驗也就是反饋給用戶一個信號我正在做再等等遮擋住用戶的操作也就是此期間有可能不讓用戶再去觸發其他事件不讓用戶看到白屏 第六集: 從零開始實現(loading組件 ) 本集定位 : loading組件我相信只要與后端存在交互的項目都是需要它的, 組件雖然簡單, 但...
第五集: 從零開始實現一套pc端vue的ui組件庫toast組件
摘要:第五集從零開始實現組件本集定位組件的實現爭取一章就說完更多彈出相關的東西會在組件里面下章組件很開心昨天去現場錄制脫口秀大會心情愉悅 第五集: 從零開始實現(toast組件) 本集定位: toast組件的實現, 爭取一章就說完, 更多彈出相關的東西會在alert組件里面.下章loading組件.很開心昨天去現場錄制脫口秀大會,心情愉悅
第五集: 從零開始實現一套pc端vue的ui組件庫toast組件
摘要:第五集從零開始實現組件本集定位組件的實現爭取一章就說完更多彈出相關的東西會在組件里面下章組件很開心昨天去現場錄制脫口秀大會心情愉悅 第五集: 從零開始實現(toast組件) 本集定位: toast組件的實現, 爭取一章就說完, 更多彈出相關的東西會在alert組件里面.下章loading組件.很開心昨天去現場錄制脫口秀大會,心情愉悅
發表評論
0條評論
閱讀 2106·2021-11-24 09:39
閱讀 1495·2019-08-30 15:44
閱讀 1946·2019-08-29 17:06
閱讀 3393·2019-08-29 16:32
閱讀 3543·2019-08-29 16:26
閱讀 2654·2019-08-29 15:35
閱讀 3026·2019-08-29 12:50
閱讀 1636·2019-08-29 11:15