vue实现一个会员卡的组件(可以动态传入图片(分出的一个组件)、背景、文字、卡号等)
自己在写这个组件的时候主要遇到的问题就是在动态传入背景图片或者背景色的时候没能立马顺利写出来,不过现在实现了这个简单组件就和大家分享一下
<template>
<div class="card" :style="bg != undefined ? setBg() : {backgroundColor: '#fff'}">
<div class="cardTop">
<span class="left">
<span>
<avatar class="leftImg" :src="cardImg" alt=""></avatar>
</span>
<span class="content">
<span class="cardName">{{cardName != undefined ? cardName : defaultCardName}}</span>
<span class="cardType">{{cardType != undefined ? cardType : defaultCardType}}</span>
</span>
</span>
<span class="right">
<avatar :src="QRCode" alt=""></avatar>
</span>
</div>
<div class="cardBottom">
<span class="cardNum">卡号:{{cardNum != undefined ? cardNum : defaultCardNum}}</span>
</div>
</div>
</template>
<script>
import Avatar from '@/components/avatar/Avatar.vue';
export default {
components: {
Avatar,
},
props: {
cardImg: {},
QRCode: {},
bg: {},
cardName: {
type: String,
},
cardType: {
type: String,
},
cardNum: {
type: String,
},
},
data() {
return {
backGround: '#fff',
defaultCardName: '阿里云',
defaultCardType: '会员卡',
defaultCardNum: '8888 8888 8888'
}
},
computed: {},
methods: {
setBg() {
let cur = this.bg.lastIndexOf('.'); let img = this.bg.substr(cur + 1); if (/(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(img)) {
return { backgroundImage: 'url(' + this.bg + ')' }
} else {
return { backgroundColor: this.bg }
}
}
}
}
</script>
<style scoped lang="less"> .card {
height: 180px;
max-width: 350px;
display: flex;
flex-direction: column;
border-radius: 10px;
padding: 10px;
justify-content: space-between;
border: 1px solid #ccc;
.cardTop {
display: flex;
justify-content: space-between;
.left {
display: flex;
flex-direction: row;
.leftImg {
height: 70px;
width: 70px;
}
.content {
margin-left: 10px;
min-height: 70px;
display: flex;
flex-direction: column;
justify-content: space-around;
.cardName, .cardType {
font-size: 18px;
}
}
}
.right {
img {
height: 50px;
width: 50px;
}
}
}
.cardBottom { }
} </style>
图片组件如下:
<template>
<span :class="avatarCls">
<img :src="src" v-if="src">
<i v-else-if="icon" :class="['iconfont', `icon-${icon}`]"></i>
<span v-else :class="`${prefixCls}-string`" :style="style" ref="children">
<slot></slot>
</span>
</span>
</template>
<script>
export default {
name: "Avatar",
data() {
return {
prefixCls: "ei-avatar",
scale: 1,
isSlotShow: false,
style: {}
};
},
props: {
size: {
type: String,
default: "large"
},
src: String,
shape: {
type: String,
default: "square"
},
icon: String
},
computed: {
avatarCls() {
const size = { large: "lg", small: "sm" }[this.size];
return [
this.prefixCls,
`${this.prefixCls}-${this.shape}`,
{
[`${this.prefixCls}-${size}`]: !!size,
[`${this.prefixCls}-icon`]: !!this.icon,
[`${this.prefixCls}-image`]: !!this.src
}
];
},
},
methods: {
setScale() {
this.isSlotShow = !this.src && !this.icon;
if (this.$refs.children) {
const childrenWidth = this.$refs.children.offsetWidth;
const avatarWidth = this.$el.getBoundingClientRect().width;
if (avatarWidth - 8 < childrenWidth) {
this.scale = (avatarWidth - 8) / childrenWidth;
} else {
this.scale = 1;
}
}
}
},
mounted() {
this.setScale();
},
updated() {
this.setScale();
}
};
</script>
<style lang="stylus">
@import '../../assets/stylus/variable.styl';
@import '../../assets/stylus/mixin.styl';
.ei-avatar {
display: inline-block;
flex-center(start, center, center)
text-align: center;
background: $avatar-bg;
color: $avatar-color;
white-space: nowrap;
position: relative;
overflow: hidden;
avatar-size($avatar-size-base, $avatar-font-size-base);
&-lg {
avatar-size($avatar-size-lg, $avatar-font-size-lg);
}
&-sm {
avatar-size($avatar-size-sm, $avatar-font-size-sm);
}
&-square {
border-radius: $avatar-border-radius;
}
& > img {
width: 100%;
height: 100%;
display: block;
}
}
</style>
vue实现一个会员卡的组件(可以动态传入图片(分出的一个组件)、背景、文字、卡号等)的更多相关文章
- django在style的样式image url添加静态图片路径和django如何动态传入图片链接?
#django在style的样式image url添加静态图片路径 style=" background:url({% static "agribusiness/images/lo ...
- 如何在小程序自定义组件和动态传入数据小demo
在开发过程中,我们会将页面常用功能抽象为一个组件,这样既方便又可以避免代码冗余.小程序中也提供了自定义组件,了解Vue的伙伴们会发现其实和Vue的组件化很相似.这里用返回顶部功能来说说如何自定义组件, ...
- AngularJS下拉列表select在option动态变化之后多出了一个错误项的问题
场景: Select初始化之后,选中select的某个选项 通过AngularJS更新select的选项 错误写法: HTML(使用ng-repeat) <div ng-app="Te ...
- VUE 单选下拉框Select中动态加载 默认选中第一个
<lable>分类情况</lable> <select v-model="content.tid"> <option v-for=&quo ...
- Vue2.0组件实现动态搜索引擎(一)
原文链接:https://blog.csdn.net/qwezxc24680/article/details/74550556 从github上看到一个不错的开源项目:https://github.c ...
- Knockout.js组件系统的详解之(一) - 组件的定义和注册
(Knockout版本:3.4.1 ) KO的组件主要从以下四个部分进行详细介绍: 1.组件的定义和注册 2.组件绑定 3.使用自定义元素 4.自定义组件加载器(高级) 目录结构 1.通过" ...
- Vue加载组件、动态加载组件的几种方式
https://cn.vuejs.org/v2/guide/components.html https://cn.vuejs.org/v2/guide/components-dynamic-async ...
- Vue.js教程--基础(实例 模版语法template computed, watch v-if, v-show v-for, 一个组件的v-for.)
官网:https://cn.vuejs.org/v2/guide/index.html Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统. 视频教程:https: ...
- [Vue]组件——实现动态组件:keep-alive的使用
1.在app.vue中用一个 <keep-alive> 元素将其动态组件包裹起来: keepAlive为true时,第一次被创建的时候缓存下来,为false时,不会缓存 <keep- ...
随机推荐
- win10下虚拟机安装XP系统 后无网卡的解决
Windows 8提供了免费的虚拟机 Hyper-V, 但是在配置 Hyper-V虚拟机的时候经常遇到虚拟机无法上网,本文介绍的是: 原料 Windows 10 Hyper-V Windows X ...
- 学习《零基础入门学习Python》电子书PDF+笔记+课后题及答案
初学python入门建议学习<零基础入门学习Python>.适合新手入门,很简单很易懂.前一半将语法,后一半讲了实际的应用. Python3入门必备,小甲鱼手把手教授Python,包含电子 ...
- Linux运维管理的必备工具
一.统一账号管理 1.LDAP 统一管理各种平台帐号和密码,包括但不限于各种操作系统(Windows.Linux),Linux系统sudo集成,系统用户分组,主机登入限制等:可与Apache,HTTP ...
- SSH框架的多表查询(方法二)
必须声明本文章==>http://www.cnblogs.com/zhu520/p/7773133.html 一:在前一个方法(http://www.cnblogs.com/zhu520/p ...
- 【Uva 10723】Cyborg Genes
[Link]: [Description] 给你两个串s1,s2; 让你生成一个串S; 使得s1和s2都是S的子列; 要求S最短; 求S的不同方案个数; [Solution] 设两个串的长度分别为n1 ...
- jmind-redis一个redis的nio客户端
Redis是一个基于key/value的系统.Redis目前最新版本是2.2.4,用着很不错,不过java版本的客户端比较的不给力,目前redis 客户端jedis 是基于io 的socket . 而 ...
- Activity 之间 传递 List 封装的对象或者对象
项目中遇到 从也个页面向还有一个页面跳转传递一个List 封装的对象 .按网上查的资料 须要把 对象 实现 Serializable接口. 写了一下.可是跳转直接崩溃.一直看错误之日找不到原因后来自习 ...
- django shell 操作
插件:django-extensions django-extensions==1.9.8 pip3 install django-extensions 1.数据库shell 命令(项目目录下) p ...
- gdal读写图像分块处理
转自赵文原文 gdal读写图像分块处理(精华版) Review: 用gdal,感觉还不如直接用C++底层函数对遥感数据进行处理.因为gdal进行太多封装,如果你仅仅只是Geotif等格式进行处理,IO ...
- Windows简单入门-送给第一次使用电脑的朋友
序言 写本篇文章前.不得不说我已经好久没有写博客了,快接近3个月了 吧,本来去年说參加今年的博客之星的,结果这都立即结束了:不得不说对自己有些嘲讽. 本篇文章是纯小白文章.之所以写这个是由于前段时间妹 ...