使用vue2.6实现抖音【时间轮盘】屏保效果附源码

实现抖音【时间轮盘】屏保效果可以分为以下五个步骤:

实现抖音【时间轮盘】屏保效果可以分为以下五个步骤:

1. 创建Vue项目

首先需要创建一个Vue项目,可以使用Vue CLI创建,也可以手动创建。

2. 安装所需依赖

在使用Vue2.6实现抖音【时间轮盘】屏保效果中,需要安装vue-router、axios、moment、qs等依赖。

npm install vue-router axios moment qs --save

3. 创建组件

接下来需要创建两个组件,一个是用于显示时间轮盘的组件,一个是用于调用API获取时间数据的组件。

时间轮盘组件

时间轮盘组件包括HTML和CSS代码,其中用到了CSS动画来实现时间切换的效果。

<template>
  <div class="timeline-wrap">
    <div v-for="(item, index) in timeArray" :key="index">
      <p>{{ item.label }}</p>
      <div :class="'time-item '+item.active" :style="'transform:rotate('+item.deg+'deg)'">
        <div class="time-item-wrap">
          <span>{{ item.time }}</span>
        </div>
      </div>
    </div>
  </div>
</template>

<style>
.timeline-wrap {
  position: relative;
  width: 200px;
  height: 200px;
  margin: 50px auto;
}

.time-item {
  position: absolute;
  top: 0;
  left: 0;
  width: 200px;
  height: 200px;
  border: 5px solid #ccc;
  border-radius: 50%;
  transform: rotate(0deg);
}

.time-item-wrap {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  text-align: center;
  font-size: 24px;
  line-height: 200px;
  font-weight: bold;
  color: #333;
}

.time-item.active {
  border-color: #3eaf7c;
}

.time-item.active .time-item-wrap {
  color: #3eaf7c;
}

@keyframes rotate {
  0% {
    transform: rotate(0);
  }

  100% {
    transform: rotate(360deg);
  }
}
</style>

获取时间数据组件

获取时间数据组件主要是调用API来获取时分秒的数据,并将数据传递给时间轮盘组件。

<template>
  <div>
    <button @click="getTimeData">获取时间</button>
    <time-wheel :timeData="timeData"></time-wheel>
  </div>
</template>

<script>
import axios from 'axios';
import qs from 'qs';
import moment from 'moment';

import TimeWheel from './TimeWheel';

export default {
  name: 'TimePage',
  components: {
    TimeWheel
  },
  data() {
    return {
      timeData: {
        hour: '00',
        minute: '00',
        second: '00'
      }
    }
  },
  methods: {
    getTimeData() {
      const date = new Date();
      const formData = {
        year: date.getFullYear(),
        month: (date.getMonth() + 1).toString().padStart(2, '0'),
        day: date.getDate().toString().padStart(2, '0')
      };
      axios.post('/api/time', qs.stringify(formData))
        .then(res => {
          const { hour, minute, second } = res.data;
          this.timeData = {
            hour: hour.toString().padStart(2, '0'),
            minute: minute.toString().padStart(2, '0'),
            second: second.toString().padStart(2, '0')
          };
        })
        .catch(err => console.log(err));
    }
  }
};
</script>

4. 调用API

使用axios调用API来获取时分秒的数据,并在获取成功后将数据传递给时间轮盘组件。

const formData = {
  year: date.getFullYear(),
  month: (date.getMonth() + 1).toString().padStart(2, '0'),
  day: date.getDate().toString().padStart(2, '0')
};
axios.post('/api/time', qs.stringify(formData))
  .then(res => {
    const { hour, minute, second } = res.data;
    this.timeData = {
      hour: hour.toString().padStart(2, '0'),
      minute: minute.toString().padStart(2, '0'),
      second: second.toString().padStart(2, '0')
    };
  })
  .catch(err => console.log(err));

5. 实现轮盘切换效果

使用CSS动画实现时间轮盘的切换效果,将时间轮盘的角度旋转一定的角度即可。

.time-item.active {
  border-color: #3eaf7c;
  animation: rotate 60s linear infinite;
}

.time-item.active .time-item-wrap {
  color: #3eaf7c;
}

@keyframes rotate {
  0% {
    transform: rotate(0);
  }

  100% {
    transform: rotate(360deg);
  }
}

至此,使用Vue2.6实现抖音【时间轮盘】屏保效果的完整攻略完成。

示例说明:
1. 在API请求中使用了moment库处理日期格式,使得日期格式更加规范和易读。使用方式为:调用moment函数,传入需要格式化的日期,再以.format()方法制定输出的日期格式。
2. 在时间轮盘组件中,使用了v-for指令遍历一个timeArray数组,该数组中包含了需要展示的时间信息及其对应的时间在轮盘上的角度。在每次获取到新的时间信息之后,根据时间信息计算出每个时间在轮盘上的角度,使得时间轮盘能够动态的调整时间的位置。

本文标题为:使用vue2.6实现抖音【时间轮盘】屏保效果附源码

基础教程推荐