背景:影城移动点餐web App增加会员卡支付功能

需求:确认订单页点击会员卡项弹出会员卡列表,多张会员卡依次叠加覆盖上一张80%的高度,点击任意卡片则改卡片置为当前卡片,只有当前卡片显示全部卡片信息。

经过一天的分析和尝试造出了轮子,基本满足需求,核心代码如下:

代码已托管在github,想要看运行效果请移步 https://github.com/yinzifa

html代码:

  1. <template>
  2. <div class="container">
  3. <div class="card-item" v-for="(item,index) in cardArrs"
  4. :class="[item.bgColor ,'z'+item.zIndex, 't'+item.zIndex*30]"
  5. @click.stop="changeArrIndex(index)">
  6. {{item.text}}
  7. </div>
  8. </div>
  9. </template>

js代码:

  1. <script>
  2. export default {
  3. // props: [],
  4. data() {
  5. return {
  6. cardArrs: [
  7. {
  8. text: "card-1",
  9. zIndex: 1,
  10. bgColor: "red"
  11. },
  12. {
  13. text: "card-2",
  14. zIndex: 2,
  15. bgColor: "blue"
  16. },
  17. {
  18. text: "card-3",
  19. zIndex: 3,
  20. bgColor: "yellow"
  21. },
  22. {
  23. text: "card-4",
  24. zIndex: 4,
  25. bgColor: "green"
  26. },
  27. {
  28. text: "card-5",
  29. zIndex: 5,
  30. bgColor: "black"
  31. }
  32. ],
  33. maxLength: 5
  34. }
  35. },
  36. methods: {
  37. changeArrIndex(index){
  38. // if(index == this.maxLength - 1) {
  39. // return;
  40. // }
  41. let _zIndex = "";
  42. let _newArr = [];
  43. this.cardArrs.forEach((item,idx)=> {
  44. let _obj = {};
  45. if(idx == index) {
  46. _zIndex = item.zIndex;
  47. _obj.zIndex = this.maxLength;
  48. _obj.bgColor = item.bgColor;
  49. _obj.text = item.text;
  50. _obj.flag = true;
  51. _newArr.push(_obj)
  52. }else {
  53. _newArr.push(item)
  54. }
  55. });
  56. _newArr.forEach((obj)=>{
  57. if(obj.zIndex == this.maxLength && !obj.flag) {
  58. obj.zIndex = _zIndex;
  59. }
  60. });
  61. _newArr.map((item)=>{
  62. delete item.flag;
  63. });
  64. this.cardArrs = _newArr;
  65. }
  66. }
  67. }
  68. </script>

css代码:

  1. <style scoped>
  2. .container {
  3. width: 500px;
  4. height: 300px;
  5. padding: 20px;
  6. border: 1px solid #ccc;
  7. position: relative;
  8. }
  9. .card-item {
  10. width: 300px;
  11. height: 200px;
  12. line-height: 198px;
  13. text-align: center;
  14. font-size: 18px;
  15. border-radius: 5px;
  16. position: absolute;
  17. }
  18. .card-item.t30 {
  19. top: 30px;
  20. animation: positionAnimate1 1.1s
  21. }
  22. .card-item.t60 {
  23. top: 60px;
  24. animation: positionAnimate1 0.9s
  25. }
  26. .card-item.t90 {
  27. top: 90px;
  28. animation: positionAnimate1 0.7s
  29. }
  30. .card-item.t120 {
  31. top: 120px;
  32. box-shadow: 0 0 2px 2px #fff;
  33. animation: positionAnimate 0.5s
  34. }
  35. .card-item.t150 {
  36. top: 150px;
  37. box-shadow: 0 0 2px 2px #fff;
  38. animation: positionAnimate 0.3s
  39. }
  40. @keyframes positionAnimate1 {
  41. 0% {
  42. opacity: 0;
  43. transform: scale(0.9);
  44. }
  45. 100% {
  46. transform: scale(1);
  47. opacity: 1;
  48. }
  49. }
  50. @keyframes positionAnimate {
  51. 0% {
  52. opacity: 0;
  53. transform: scale(1.1);
  54. }
  55. 100% {
  56. transform: scale(1);
  57. opacity: 1;
  58. }
  59. }
  60. .card-item.z1 {
  61. z-index: 1;
  62. }
  63. .card-item.z2 {
  64. z-index: 2;
  65. }
  66. .card-item.z3 {
  67. z-index: 3;
  68. }
  69. .card-item.z4 {
  70. z-index: 4;
  71. }
  72. .card-item.z5 {
  73. z-index: 5;
  74. }
  75. .card-item.red {
  76. border: 1px solid red;
  77. background-color: red;
  78. }
  79. .card-item.blue {
  80. border: 1px solid blue;
  81. background-color: blue;
  82. }
  83. .card-item.yellow {
  84. border: 1px solid yellow;
  85. background-color: yellow;
  86. }
  87. .card-item.green {
  88. border: 1px solid green;
  89. background-color: green;
  90. }
  91. .card-item.black {
  92. border: 1px solid black;
  93. background-color: black;
  94. }
  95. </style>

  

vue--"卡片层叠" 组件 开发小记的更多相关文章

  1. vue拖拽组件开发

    vue拖拽组件开发 创建临时vue项目 先查看node和npm版本,怎么安装就不多多bb了 再安装vue-cli npm install vue-cli -g //全局安装 vue-cli 检测是否安 ...

  2. 基于vue的新组件开发

    前天完成了一个新组件的开发,做的过程也是各种遇到问题,彻底弄懂了slot,巩固了一些flex布局和jquery的知识,比起自己第一次做组件开发,现在已经是能够下手做,遇到问题解决问题,还算有进步. 但 ...

  3. vue实例之组件开发:图片轮播组件

    一.普通方式: 其中,index是关键. <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  4. 循序渐进VUE+Element 前端应用开发(8)--- 树列表组件的使用

    在我前面随笔<循序渐进VUE+Element 前端应用开发(6)--- 常规Element 界面组件的使用>里面曾经介绍过一些常规的界面组件的处理,主要介绍到单文本输入框.多文本框.下拉列 ...

  5. Vue (三) --- Vue 组件开发

    ------------------------------------------------------------------好心情,会让你峰回路转. 5. 组件化开发 5.1 组件[compo ...

  6. 三: vue组件开发及自动化工具vue-cli

    一: 组件化开发 1 组件 1: 组件(Component)是自定义封装的功能.在前端开发过程中,经常出现多个网页的功能是重复的,而且很多不同的网站之间,也存在同样的功能. 2: 什么是组件 而在网页 ...

  7. vue 开发系列(三) vue 组件开发

    概要 vue 的一个特点是进行组件开发,组件的优势是我们可以封装自己的控件,实现重用,比如我们在平台中封装了自己的附件控件,输入控件等. 组件的开发 在vue 中一个组件,就是一个独立的.vue 文件 ...

  8. Vue 入门之组件化开发

    Vue 入门之组件化开发 组件其实就是一个拥有样式.动画.js 逻辑.HTML 结构的综合块.前端组件化确实让大的前端团队更高效的开发前端项目.而作为前端比较流行的框架之一,Vue 的组件和也做的非常 ...

  9. vue 组件开发 props 验证

    使用props 在Vue中父组件向子组件中传送数据是通过props实现的,一个简单的使用props的例子: <!DOCTYPE html> <html> <head> ...

随机推荐

  1. 阿里云API网关(8)开发指南-SDK下载

    网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...

  2. ICC_lab总结——ICC_lab5:布线&&数字集成电路物理设计学习总结——布线

    字丑,禁止转载! 这里将理论总结和实践放在一起了. 布线的理论总结如下所示: 下面是使用ICC进行实践的流程: 本次的布线实验主要达成的目标是: ·对具有时钟树布局后的设计进行可布线性检查 ·完成布线 ...

  3. Linux show funny time[ liunx 有趣的东西展示]

    Linux show funny time 1.sl 奔跑吧,火车! nick-suo@ubuntu:~$ sudo apt-get install sl 2.telnet 星球大战 nick-suo ...

  4. 关于vertical-align和line-height的真知灼见

    本文的重点是了解vertical-align和line-height的使用 涉及到的名词:基线,底端,行内框,行框,行间距,替换元素及非替换元素,对齐.只有充分理解这些概念才会灵活运用这两个属性. 什 ...

  5. Struts(十三):通用标签

    Struts标签简介: Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性,实现了更好的代码复用.Struts2允许在页面中使用 ...

  6. 框架学习笔记之Hibernate

    一.什么是Hibernate Hibernate框架是当今主流的持久层框架之一,该框架是基于JDBC的主流持久化框架,使用它之后能够大大简化程序DAO层的代码量,提高工作效率,因此受广大开发人员的喜爱 ...

  7. 07、NetCore2.0依赖注入(DI)之生命周期

    07.NetCore2.0依赖注入(DI)之生命周期 NetCore2.0依赖注入框架(DI)是如何管理注入对象的生命周期的?生命周期有哪几类,又是在哪些场景下应用的呢? -------------- ...

  8. Frame

    Frame意为框架,是在屏幕上的一个矩形区域. Frame主要作为其他组件的框架基础,或为其他组件提供间距补充. 何时使用Frame组件呢? Frame组件主要用于在复杂的布局中奖其他组件分组,也用于 ...

  9. java 面向对象编程。。。。

    经过一周的学习(java),总结了许多,对java的理解,java的类型,运用,安装,基础语法,变量,常量,表达式,语句 java从C语言中继承了大量语言特性.java面向对象编程的基本特征,包括继承 ...

  10. 在vue项目中, mock数据

    1. 在根目录下创建 test 目录, 用来存放模拟的 json 数据, 在 test 目录下创建模拟的数据 data.json 文件 2.在build目录下的 dev-server.js的文件作如下 ...