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日

相关文章

  • 超级详细的Vue安装与配置教程

    超级详细的Vue安装与配置教程 安装Node.js 首先需要安装Node.js,可以在官网下载对应平台的安装包:https://nodejs.org/en/download/ 安装完成后,打开终端或命令行工具,输入以下命令来检查是否安装成功: node -v npm -v 如果能够成功输出版本号,说明Node.js已经安装成功。 安装Vue CLI Vue官…

    Vue 2023年5月27日
    00
  • VueX安装及使用基础教程

    VueX是Vue.js的状态管理库,它可以帮助我们在应用程序中管理共享状态。下面是VueX安装及使用基础教程的完整攻略。 安装 # 使用npm安装 npm install vuex –save # 使用yarn安装 yarn add vuex 使用 首先,在Vue.js中使用VueX,我们需要将其添加到我们的Vue.js应用程序中。可以使用以下代码在Vue…

    Vue 2023年5月27日
    00
  • 浅谈使用Vue完成移动端apk项目

    针对这个问题,我准备了以下的完整攻略: 浅谈使用Vue完成移动端apk项目 1. 熟悉Vue框架 在使用Vue完成移动端apk项目之前,我们需要熟悉Vue框架的基本原理和用法。Vue是一款轻量级的前端框架,易于上手,并且具有很好的可维护性和扩展性。 熟练掌握Vue的基本语法,包括 Vue实例、组件、生命周期等; 熟悉Vue的核心思想和常用插件,比如Vue R…

    Vue 2023年5月28日
    00
  • Vue中如何使用mock模拟数据

    下面我会为您详细讲解在Vue中如何使用mock模拟数据的完整攻略。 1. 什么是Mock Mock(模拟数据)是指在前端开发中,由于后端接口还未开发完成,前端开发需要提前模拟数据进行开发的一种手段。mock可以在前端使用虚拟数据进行开发,便于前端更好地进行模块开发、调试、测试等。 2. 如何使用mock 2.1 安装mockjs 我们可以使用npm安装moc…

    Vue 2023年5月28日
    00
  • 15分钟学会vue项目改造成SSR(小白教程)

    下面是关于“15分钟学会vue项目改造成SSR(小白教程)”的完整攻略。 什么是SSR? SSR(Server Side Rendering)即服务端渲染,根据服务端返回的数据,在服务端生成HTML字符串,然后将其发送给客户端进行展示。与传统的SPA(Single Page Application)相比,SSR能够优化页面的SEO和首屏加载速度。 如何将Vu…

    Vue 2023年5月27日
    00
  • Vue 实现把表单form数据 转化成json格式的数据

    现在许多前端应用都需要从表单中获取用户数据以便后续处理。在Vue中,我们可以很方便地使用v-model指令来绑定表单元素的值,然后通过相关的事件来处理数据的提交,从而实现将表单数据转化为JSON格式的数据。 下面是实现的详细步骤: 步骤 在Vue组件中定义表单数据,并使用v-model指令来绑定表单元素的值,如下所示: <template> &l…

    Vue 2023年5月28日
    00
  • Vue3发送post请求出现400 Bad Request报错的解决办法

    以下是 “Vue3发送post请求出现400 Bad Request报错的解决办法” 的完整攻略: 问题描述 在使用 Vue3 进行 post 请求时,可能会遇到 400 Bad Request 错误,这通常是因为请求的数据格式或参数设置错误导致的。 解决方法 1. 设置请求头 可以尝试设置请求头中的 Content-Type 和 Accept 字段,确保发…

    Vue 2023年5月27日
    00
  • Vue2和Vue3的10种组件通信方式梳理

    Vue2和Vue3的10种组件通信方式梳理 Vue.js是一款用于构建用户界面的渐进式JavaScript框架,为单页应用提供了一系列有用的特性,如组件化、数据双向绑定、路由管理等。在Vue.js应用程序中,组件通信是非常重要的一环,本文将详细讲解Vue2和Vue3中的10种组件通信方式,以便开发者可以更好地应用这些技巧。 1. 父子组件通信 1.1 父传子…

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