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

yizhihongxing

下面是“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日

相关文章

  • vue2.0 watch里面的 deep和immediate用法说明

    下面我来详细讲解一下 “vue2.0 watch里面的 deep和immediate用法说明”, 希望对你有所帮助。 watch 在Vue.js中,我们可以使用 watch 来监听数据的改变,从而执行对应的操作。 Watch 是 Vue 实例的一个选项属性,用于监听 Vue 实例上的数据变化。当数据发生改变时,会执行 watch 选项的对应方法。 deep …

    Vue 2023年5月29日
    00
  • 解决Vue打包之后文件路径出错的问题

    当我们使用Vue进行项目开发并进行部署时,有可能会出现打包之后文件路径出错的问题,导致浏览器无法正常加载应用程序。这个问题主要是由于打包后文件的路径不正确,需要进行相关的设置以解决。下面是解决Vue打包之后文件路径出错的完整攻略。 1. 查看打包后的路径 在进行部署之前,我们需要先查看打包后的文件路径是否正确。我们可以使用命令行进入到打包后的目录下,然后运行…

    Vue 2023年5月28日
    00
  • 详解vue的数据劫持以及操作数组的坑

    详解Vue的数据劫持以及操作数组的坑 什么是数据劫持 在Vue中,内部使用的是ES5提供的Object.defineProperty()方法,来实现数据的劫持。简单来说,就是通过这个方法,拦截了一个对象的属性的读取和设置的操作,在读取和设置的过程中加入了自己的逻辑,从而可以实现响应式数据的更新。 通过数据劫持,可以使得组件数据与界面一一对应,数据的变化会自动…

    Vue 2023年5月28日
    00
  • Vue组件之极简的地址选择器的实现

    首先我们需要了解一下Vue组件的基本知识。 什么是Vue组件? Vue 组件是可复用的 Vue 实例,拥有自己的视图和行为。在 Vue 中,组件是基本的代码复用单元,一个页面可以由多个小的组件组成,每个组件封装了自己的代码和模板,可以单独的进行开发、测试和维护。 Vue组件的基本结构 一个 Vue 组件通常由模板、样式和逻辑组成。模板是组件的显示部分,样式是…

    Vue 2023年5月29日
    00
  • Vue中props用法介绍

    下面我将为您提供Vue中props用法介绍的完整攻略。 Vue中props用法介绍 在Vue中,我们可以通过props来实现父组件传递数据给子组件的操作,让子组件可以像使用自身数据一样使用父组件传递的数据。在该篇文章中,我们将会讲解Vue中props的用法。 父组件向子组件传递props数据 在父组件中,我们可以通过在子组件上绑定props属性的方式来向子组…

    Vue 2023年5月27日
    00
  • vue-cli中实现响应式布局的方法

    当我们使用Vue-cli构建一个项目时,可以选择一些预设好的模板,比如使用vue-init webpack模板,就会得到一个默认的项目结构。我们可以在此基础上选择性的添加我们需要的库和工具,比如Sass﹑Stylus等CSS预处理器来实现响应式布局。 以下是一些实现响应式布局的方法: 1. 使用css@media查询 media queries是css3最强…

    Vue 2023年5月28日
    00
  • vue3安装配置sass的详细步骤

    请按照以下步骤来安装配置Sass: 安装Vue CLI Vue CLI是一个官方提供的基于webpack的脚手架。在项目中使用它可以帮助我们自动化构建、配置开发环境和打包等等。下面是安装Vue CLI的命令: npm install -g @vue/cli 创建Vue 3工程 执行以下命令以创建一个新的 Vue 工程: vue create my-proje…

    Vue 2023年5月28日
    00
  • 用Vue.js实现监听属性的变化

    使用Vue.js实现监听属性的变化是Vue.js的一个重要特性。通过使用Vue.js自带的监听器,可以有效的监听组件、变量或数据的变化,并且在变化后自动执行一个动作。下面将介绍如何使用Vue.js实现监听属性的变化。 第一步:定义变量或数据 首先,我们需要定义我们要监听的变量或数据。这个变量或数据可以是一个单独的变量,也可以是一个对象或数组。 //定义一个变…

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