需求:
element ui loading图只能使用自己的loading图,
但很多场景下,需要替换成自己的gif图
虽然文档中有些, element-loading-spinner="el-icon-loading" 可指定自定义图
但经测试,也只是只能再elementui 图标库中的图, 不是我们想的那个自定义图类的意思。
自定义图方法:
1) 添加自定义elementUI loading样式
asserts下 新建CSS文件夹 及CSS文件比如myCss.css
再里面,写入自定义的element类CSS样式
.el-loading-spinner{ /*这个是自己想设置的 gif 加载动图*/ background-image:url('../img/loading.gif'); background-repeat: no-repeat; background-size: 200px 120px; height:100px; width:100%; background-position:center; /*覆盖 element-ui 默认的 50% 因为此处设置了height:100%,所以不设置的话,会只显示一半,因为被top顶下去了*/ top:40%; } .el-loading-spinner .circular { /*隐藏 之前 element-ui 默认的 loading 动画*/ display: none; } .el-loading-spinner .el-loading-text{ /*为了使得文字在loading图下面*/ margin:85px 0px; }
CSS 细调,需要在浏览器调试工具中细调
2)main.js 导入自定义样式
这里注意,要在导入elementUI之后,再导入自己的样式,要不然会被elementUI覆盖
import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.use(ElementUI); //element //自定义的element UI loading样式 import './assets/css/myCss.css'
3) v-loading
<el-container v-loading="loading" element-loading-background="rgba(255, 255,255, 0.5)" element-loading-text="加载中..." >
注意,这里 不要加上element-loading-spinner="el-icon-loading" ,否则 也会同时出现element图库中对应的loading图
4)对应加载逻辑
data () { return { loading: true } }, startLoading() { this.loading=true; }, endLoading(){ this.loading=false; },
axios请求接口时,开始loading,收到数据后,loading结束
Ajx_GetClassList() { this.startLoading(); this.$axios( { url: url, method:'POST', } ).then(res=>{ this.endLoading(); }) },
5) 运行时,是正常显示,但编译后,看不到自定义的图片资源了
原因,VUE项目打包后,样式目录结构变为static/css
解决
build->utils.js 配置文件添加
publicPath: '../../'
// Extract CSS when that option is specified // (which is the case during production build) if (options.extract) { return ExtractTextPlugin.extract({ use: loaders, publicPath:'../../', // 解决element-ui中组件图标不显示问题 fallback: 'vue-style-loader' })
这样,编译后的element-ui资源也可以正常访问了
自定义loading图效果
补充知识:vue+elementUI自定义通用table组件
自定义通用table组件,带分页,后端排序,路由带参数跳转,多选框,字段格式化
1.tableList组件
<!-- 费用报销编辑弹框 --> <template> <div class="table-temp"> <el-table :data="tableData" border size="mini" fit highlight-current-row height="500" v-loading="loading" @selection-change="handleSelectionChange" @sort-change="sortChange" > <el-table-column type="selection" width="55" align="center"></el-table-column> <el-table-column type="index" label="序号" align="center" fixed></el-table-column> <!-- prop: 字段名name, label: 展示的名称, fixed: 是否需要固定(left, right), minWidth: 设置列的最小宽度(不传默认值), active: 是否有操作列 active.name: 操作列字段名称, active.clickFun: 操作列点击事件, formatData: 格式化内容--> <el-table-column v-for="(item, key) in tableHeader" :key="key" :prop="item.prop" :label="item.label" :fixed="item.fixed" :min-widitem="item.minWidth" align="center" :sortable="item.sortable" > <template slot-scope="scope"> <div v-if="item.active"> <el-button v-for="(o, key) in item.active" :key="key" @click="handleActive(scope.row, o.router, o.routerId)" type="text" size="small" >{{o.name}}</el-button> </div> <div v-else> <a class="btn-a" v-if="item.router" @click="handleActive(scope.row,item.router, item.routerId)" > <span v-if="!item.formatData">{{ scope.row[item.prop] }}</span> <span v-else>{{ scope.row[item.prop] | formatters(item.formatData) }}</span> </a> <div v-else> <span v-if="!item.formatData">{{ scope.row[item.prop] }}</span> <span v-else>{{ scope.row[item.prop] | formatters(item.formatData) }}</span> </div> </div> </template> </el-table-column> </el-table> <div class="pagination"> <el-pagination background layout="total, prev, pager, next" :current-page="pagination.pageIndex" :page-size="pagination.pageSize" :total="pagination.pageTotal" @current-change="handlePageChange" ></el-pagination> </div> </div> </template> <script> var _ = require('lodash'); export default { props: { tableData: { type: Array, default: function() { return []; } }, tableHeader: { type: Array, default: function() { return []; } }, loading: { type: Boolean, default: false }, pagination: { type: Object, default: { pageIndex: 0, pageSize: 15, pageTotal: 0 } } }, data() { return { multipleSelection: [], newPagination: { pageIndex: 0, pageSize: 15, pageTotal: 0 } }; }, methods: { // 多选操作 handleSelectionChange(val) { this.multipleSelection = val; this.$emit('selectFun', { backData: this.multipleSelection }); }, // 分页导航 handlePageChange(val) { console.log('handlePageChange:', val); this.$set(this.pagination, 'pageIndex', val); //调用父组件方法 this.$emit('pageChange', { backData: this.pagination}); }, // row:本行数据,route:要跳转的路由路径,跳转要传的参数routeId handleActive(row, route, routeId) { console.log(row); this.$router.push({ path: '/' + route, query: { id: row[routeId] } }); }, //后端排序 sortChange(column) { //console.log('sortChange:', column); //调用父组件方法 this.$emit('sortChange', { backData: column }); } }, watch: { } }, computed: { }, created() { } }; </script> <style scoped> .btn-a{ color: #409EFF } </style>
2.组件使用
<template> <div> <!-- 表格 --> <table-List :tableData="tableData" :tableHeader="tableHeader" :loading="loading" :pagination="pagination" @pageChange="pageChange" @selectFun="selectFun" @sortChange="sortChange" ></table-List> </div> </template> <script> import appMain from '../../../utils/app_main'; export default { data() { return { // 请求加载 loading: false, // 分页信息 pagination: { pageIndex: 1, pageSize: 10, pageTotal: 60 }, tableHeader: [ // 表头数据 { prop: 'id', label: '离职编号', minWidth: '100px', router: 'quitDetail', routerId: 'id', sortable: 'custom' }, { prop: 'resignationUserName', label: '姓名', router: 'employeeDetail', routerId: 'resignationUserId', sortable: 'custom' }, { prop: 'departName', label: '部门', minWidth: '100px', sortable: 'custom' }, { prop: 'jobRole', label: '所在岗位', sortable: 'custom' }, { prop: 'onbordingTime', label: '入职日期', formatData: function(val) { let date = new Date(val); return appMain.formatDate(date, 'yyyy-MM-dd'); }, sortable: 'custom' }, { prop: 'resignationTime', label: '离职日期', formatData: function(val) { let date = new Date(val); return appMain.formatDate(date, 'yyyy-MM-dd'); }, minWidth: '100px', sortable: 'custom' }, { prop: 'resignationReason', label: '离职原因', minWidth: '100px', sortable: 'custom' }, { prop: 'status', label: '流程状态', minWidth: '100px', sortable: 'custom' } ], tableData: [], multipleSelection: [], }; }, methods: { // 组件选择完后把数据传过来 selectFun(data) { this.multipleSelection = data.backData; }, //表格组件返回排序对象 sortChange(data) { let column = data.backData; //排序 if (column.order) { //倒序 if (column.order === 'descending') { // this.query.sortColumn = column.prop + ' ' + 'desc'; } else { // this.query.sortColumn = column.prop; } } else { //不排序 // this.query.sortColumn = ''; } //请求接口 }, //分页导航 pageChange(data) { this.pagination = data.backData; console.log('pageChange:', this.pagination); //分页变化--请求接口 }, } }; </script>
3.appMain.js
class appMain { } // 时间格式化 formatDate(date, fmt) { var date = new Date(date) if (/(y+)/.test(fmt)) { fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length)); } let o = { 'M+': date.getMonth() + 1, 'd+': date.getDate(), 'h+': date.getHours(), 'm+': date.getMinutes(), 's+': date.getSeconds() }; for (let k in o) { if (new RegExp(`(${k})`).test(fmt)) { let str = o[k] + ''; fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : this.padLeftZero(str)); } } return fmt; }; padLeftZero(str) { return ('00' + str).substr(str.length); } export default new appMain()
以上这篇VUE-ElementUI 自定义Loading图操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]