Vue组件实现卡片动画倒计时示例详解

下面是“Vue组件实现卡片动画倒计时示例详解”的完整攻略:

标题

一、项目介绍

介绍该项目的背景和目的,如:Vue组件实现卡片动画倒计时,可以应用在各类网页和手机应用中,方便用户知晓某个活动、限时促销等的剩余时间。

二、技术栈

列举使用的技术,如:Vue.js框架、CSS3动画等。

三、项目实现

1.基础HTML、CSS实现

通过HTML和CSS实现基本的卡片样式和动画效果。示例代码如下:

<div class="card">
  <div class="content">
    <div class="time">
      <span class="digit">0</span>
      <span class="digit">0</span>
      <span class="colon">:</span>
      <span class="digit">0</span>
      <span class="digit">0</span>
      <span class="colon">:</span>
      <span class="digit">0</span>
      <span class="digit">0</span>
    </div>
  </div>
</div>
.card {
  position: relative;
  width: 300px;
  height: 450px;
  margin: 20px;
  overflow: hidden;
  background-color: #fff;
  box-shadow: 0 10px 20px rgba(0,0,0,.3);
}

.card .content {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%,-50%);
  text-align: center;
}

.card .content .time {
  display: flex;
  justify-content: center;
  align-items: center;
  margin: 30px;
  font-size: 40px;
  font-weight: bold;
  color: #fff;
}

.card .content .time .digit {
  position: relative;
  margin: 0 5px;
  font-style: italic;
}

.card .content .time .colon:before {
  content: ":";
  position: absolute;
  top: 50%;
  left: -12px;
  transform: translateY(-50%);
  font-size: 50px;
  color: #fff;
}

2.Vue.js实现

使用Vue.js框架进行开发,具体实现方法如下:

1)在Vue的模板中引用该卡片组件,并传入倒计时的起始时间。

<div id="app">
  <card count-down="600"></card>
</div>

2)在Vue的data中定义倒计时的变量。

data: {
  time: 0
}

3)通过Vue的computed计算属性,将时间转化为分钟、秒数等,并渲染在卡片上。

computed: {
  minutes() {
    return parseInt(this.time / 60)%60 < 10 ? '0'+ parseInt(this.time/60)%60 : parseInt(this.time/60)%60;
  },
  seconds() {
    return this.time%60 < 10 ? '0'+ this.time%60 : this.time%60;
  },
  rest() {
    return this.time <= 0 ? 'time up' : this.minutes + '分' + this.seconds + '秒';
  }
}
<div class="time">
  <span class="digit">{{ minutes.toString()[0] }}</span>
  <span class="digit">{{ minutes.toString()[1] }}</span>
  <span class="colon">:</span>
  <span class="digit">{{ seconds.toString()[0] }}</span>
  <span class="digit">{{ seconds.toString()[1] }}</span>
</div>
<p v-text="rest"></p>

4)通过Vue的定时器setInterval()实现秒数的递减。

mounted() {
  setInterval(() => {
    this.time--;
  }, 1000);
}

3. CSS3动画实现

为了让卡片具有倒计时的动感效果,使用了CSS3的transform、transition等属性,具体实现方法如下:

.card .content .time .digit {
  position: relative;
  margin: 0 5px;
  font-style: italic;
  transform: translateY(0);
  transition: all 0.3s ease-out;
}

.card .content .time .digit.out {
  transform: translateY(-100%);
}

.card .content .time .digit.outback {
  transform: translateY(100%);
}

.card .content .time .colon:before {
  content: ":";
  position: absolute;
  top: 50%;
  left: -12px;
  transform: translateY(-50%);
  font-size: 50px;
  color: #fff;
  opacity: 0.8;
  transform: scale(1);
  animation: colon 1s infinite;
}

@keyframes colon {
  0% {
    transform: scale(1);
    opacity: 0.8;
  }
  50% {
    transform: scale(2);
    opacity: 1;
  }
  100% {
    transform: scale(1);
    opacity: 0.8;
  }
}

四、完整代码展示

以上就是Vue组件实现卡片动画倒计时的完整攻略,下面是完整的HTML、CSS和Vue.js代码。

<!DOCTYPE html>
<head>
  <title>Vue组件实现卡片动画倒计时示例详解</title>
  <meta charset="utf-8">
</head>
<body>
  <div id="app">
    <card count-down="600"></card>
  </div>
  <template id="card-template">
    <div class="card">
      <div class="content">
        <h2>活动倒计时</h2>
        <div class="time">
          <span class="digit">{{ minutes.toString()[0] }}</span>
          <span class="digit">{{ minutes.toString()[1] }}</span>
          <span class="colon">:</span>
          <span class="digit">{{ seconds.toString()[0] }}</span>
          <span class="digit">{{ seconds.toString()[1] }}</span>
        </div>
        <p v-text="rest"></p>
      </div>
    </div>
  </template>
  <script src="https://unpkg.com/vue"></script>
  <script>
    Vue.component('card', {
      template: '#card-template',
      props: ['countDown'],
      data: function() {
        return {
          time: this.countDown
        }
      },
      computed: {
        minutes() {
          return parseInt(this.time / 60)%60 < 10 ? '0'+ parseInt(this.time/60)%60 : parseInt(this.time/60)%60;
        },
        seconds() {
          return this.time%60 < 10 ? '0'+ this.time%60 : this.time%60;
        },
        rest() {
          return this.time <= 0 ? 'time up' : this.minutes + '分' + this.seconds + '秒';
        }
      },
      mounted() {
        setInterval(() => {
          this.time--;
        }, 1000);
      }
    });

    new Vue({
      el: '#app'
    });
  </script>
  <style>
    .card {
      position: relative;
      width: 300px;
      height: 450px;
      margin: 20px;
      overflow: hidden;
      background-color: #fff;
      box-shadow: 0 10px 20px rgba(0,0,0,.3);
    }

    .card .content {
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%,-50%);
      text-align: center;
    }

    .card .content .time {
      display: flex;
      justify-content: center;
      align-items: center;
      margin: 30px;
      font-size: 40px;
      font-weight: bold;
      color: #fff;
    }

    .card .content .time .digit {
      position: relative;
      margin: 0 5px;
      font-style: italic;
      transform: translateY(0);
      transition: all 0.3s ease-out;
    }

    .card .content .time .digit.out {
      transform: translateY(-100%);
    }

    .card .content .time .digit.outback {
      transform: translateY(100%);
    }

    .card .content .time .colon:before {
      content: ":";
      position: absolute;
      top: 50%;
      left: -12px;
      transform: translateY(-50%);
      font-size: 50px;
      color: #fff;
      opacity: 0.8;
      transform: scale(1);
      animation: colon 1s infinite;
    }

    @keyframes colon {
      0% {
        transform: scale(1);
        opacity: 0.8;
      }
      50% {
        transform: scale(2);
        opacity: 1;
      }
      100% {
        transform: scale(1);
        opacity: 0.8;
      }
    }
  </style>
</body>

这里只是展示了一种倒计时样式的实现,实际上你可以通过改变CSS样式、调整Vue组件的实现等等来拓展更多酷炫的效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue组件实现卡片动画倒计时示例详解 - Python技术站

(0)
上一篇 2023年5月29日
下一篇 2023年5月29日

相关文章

  • 分享7个成为更好的Vue开发者的技巧

    分享7个成为更好的Vue开发者的技巧 作为一名Vue开发者,提高技能水平是非常重要的,下面是分享7个成为更好的Vue开发者的技巧: 1. 熟悉Vue的核心概念 Vue的核心概念包括:模板语法、组件、生命周期等,必须要熟悉和掌握它们,才能更好地开发Vue应用。 示例代码: <template> <div> <h3>{{ me…

    Vue 2023年5月27日
    00
  • Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例

    下面是详细的攻略: Vue + WebSocket + WaveSurferJS 实现H5聊天对话交互的实例 实现思路 本实例使用Vue框架,结合WebSocket实现即时通讯,配合WaveSurferJS实现音频波形效果。 使用Vue框架建立页面,实现主要交互逻辑; 使用WebSocket实现即时通讯,并实现接收和发送消息功能; 使用WaveSurferJ…

    Vue 2023年5月28日
    00
  • 十个有用的自定义Vue钩子函数总结

    下面详细讲解一下”十个有用的自定义Vue钩子函数总结”的攻略: 1. 什么是Vue钩子函数 Vue.js提供了很多生命周期钩子函数,我们可以在不同的阶段对应的函数中执行代码。其实,除了Vue.js官方提供的钩子函数,我们还可以自己定义钩子函数,方便我们在需要的时候进行统一处理。 2. 自定义Vue钩子函数的常用场景 2.1 全局数据加载提示 在请求全局数据时…

    Vue 2023年5月27日
    00
  • 八种vue实现组建通信的方式

    以下是八种Vue实现组件通信的完整攻略: 1. Props Props是Vue组件间通信中最常用的一种方式。Props允许父组件向子组件传递数据,可以通过在子组件中声明props选项来接收父组件传递的值。示例代码如下: <!–父组件模版–> <template> <Child :msg="message"…

    Vue 2023年5月29日
    00
  • vue使用echarts图表的详细方法

    当我们需要在Vue项目中使用Echarts图表时,需要进行以下步骤: 安装echarts和vue-echarts 使用npm或yarn安装: npm install echarts vue-echarts yarn add echarts vue-echarts 在Vue项目中引入echarts和vue-echarts 在需要使用Echarts图表的Vue组…

    Vue 2023年5月29日
    00
  • vue实现列表无缝循环滚动

    关于“vue实现列表无缝循环滚动”的攻略,以下是详细说明: 1. 背景 在日常开发中,我们经常需要实现列表的滚动,并且有时需要实现无缝循环滚动。而vue框架提供了非常方便的实现方式。 2. 实现方案 2.1 方案一 步骤一:数据处理 首先,我们需要在vue的data中定义一个列表数据,并将其从末尾插入到列表头部。 // vue组件中data定义列表数据 da…

    Vue 2023年5月27日
    00
  • 手把手带你搭建一个node cli的方法示例

    下面是手把手带你搭建一个node cli的方法示例的完整攻略: 前置知识 在开始搭建之前,我们需要掌握一些基础知识: Node.js的基本使用 npm包管理器的使用 shell命令行的基本使用 如果你还不会这些基础知识,建议先学习一下。 步骤 1. 初始化项目 首先,我们需要创建一个新的目录,进入目录后使用以下命令进行项目初始化: npm init -y 这…

    Vue 2023年5月29日
    00
  • vue实现集成腾讯TIM即时通讯

    vue实现集成腾讯TIM即时通讯 1. 安装TIM SDK 首先,我们需要在项目中安装TIM SDK,在项目根目录下执行以下命令: npm install tim-js-sdk –save 2. 创建TIM实例 安装完成TIM SDK后,我们需要在项目中创建TIM实例,代码示例如下: import TIM from ‘tim-js-sdk’; const …

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部