Web Animations API实现一个精确计时的时钟示例

yizhihongxing

要实现一个精确计时的时钟示例,我们可以使用Web Animations API。这项API可以让我们通过JavaScript来控制CSS动画,而且可以精确定时。下面是实现的步骤:

步骤一:编写HTML代码

编写一个包含时钟的div元素和三个子元素的HTML结构,分别对应时针、分针和秒针。

<div class="clock">
  <div class="hour-hand"></div>
  <div class="minute-hand"></div>
  <div class="second-hand"></div>
</div>

步骤二:编写CSS代码

使用CSS来定义时钟的样式。这里我们使用transform来控制时针、分针和秒针的旋转(旋转的角度是基于时钟的中心点的)。我们还可以为时钟的背景和时针、分针、秒针设置颜色等样式。

.clock {
  position: relative;
  width: 200px;
  height: 200px;
  border-radius: 50%;
  background-color: #f7f7f7;
}

.hour-hand, .minute-hand, .second-hand {
  position: absolute;
  width: 3px;
  height: 50%;
  transform-origin: bottom center;
  background-color: #000;
}

.hour-hand {
  bottom: 50%;
  left: 49%;
  transform: rotate(0deg);
}

.minute-hand {
  bottom: 50%;
  left: 49%;
  transform: rotate(0deg);
}

.second-hand {
  bottom: 50%;
  left: 49%;
  width: 1px;
  height: 55%;
  transform: rotate(0deg);
  background-color: red;
}

步骤三:使用 JavaScript 来控制 CSS 动画

使用Web Animations API来控制时针、分针和秒针的旋转。我们可以使用animate()方法来创建一个动画对象,然后通过调用play()方法来启动动画。

//获取时针、分针、秒针的元素
var hourHand = document.querySelector('.hour-hand');
var minuteHand = document.querySelector('.minute-hand');
var secondHand = document.querySelector('.second-hand');

//获取当前时间的小时、分钟、秒数
var now = new Date();
var hours = now.getHours() % 12;
var minutes = now.getMinutes();
var seconds = now.getSeconds();

// 计算时针、分针、秒针的旋转角度
var hourAngle = (hours + minutes / 60) * 30;
var minuteAngle = minutes * 6;
var secondAngle = seconds * 6;

// 使用animate()方法创建一个定时器动画对象
var hourAnimation = hourHand.animate(
  {
    transform: `rotate(${hourAngle}deg)`
  },
  {
    duration: 12 * 60 * 60 * 1000, // 每12小时重复一次
    easing: 'linear',
    iterations: Infinity
  }
);

// 分钟指针
var minuteAnimation = minuteHand.animate(
  {
    transform: `rotate(${minuteAngle}deg)`
  },
  {
    duration: 60 * 60 * 1000, // 每小时重复一次
    easing: 'linear',
    iterations: Infinity
  }
);

// 秒针
var secondAnimation = secondHand.animate(
  {
    transform: `rotate(${secondAngle}deg)`
  },
  {
    duration: 60 * 1000, // 每分钟重复一次
    easing: 'linear',
    iterations: Infinity
  }
);

经过上面三个步骤,我们就可以创建一个精确计时的时钟效果。

下面是一个完整的时钟示例的代码:

<div class="clock">
  <div class="hour-hand"></div>
  <div class="minute-hand"></div>
  <div class="second-hand"></div>
</div>
.clock {
  position: relative;
  width: 200px;
  height: 200px;
  border-radius: 50%;
  background-color: #f7f7f7;
}

.hour-hand, .minute-hand, .second-hand {
  position: absolute;
  width: 3px;
  height: 50%;
  transform-origin: bottom center;
  background-color: #000;
}

.hour-hand {
  bottom: 50%;
  left: 49%;
  transform: rotate(0deg);
}

.minute-hand {
  bottom: 50%;
  left: 49%;
  transform: rotate(0deg);
}

.second-hand {
  bottom: 50%;
  left: 49%;
  width: 1px;
  height: 55%;
  transform: rotate(0deg);
  background-color: red;
}

//获取时针、分针、秒针的元素
var hourHand = document.querySelector('.hour-hand');
var minuteHand = document.querySelector('.minute-hand');
var secondHand = document.querySelector('.second-hand');

//获取当前时间的小时、分钟、秒数
var now = new Date();
var hours = now.getHours() % 12;
var minutes = now.getMinutes();
var seconds = now.getSeconds();

// 计算时针、分针、秒针的旋转角度
var hourAngle = (hours + minutes / 60) * 30;
var minuteAngle = minutes * 6;
var secondAngle = seconds * 6;

// 使用animate()方法创建一个定时器动画对象
var hourAnimation = hourHand.animate(
  {
    transform: `rotate(${hourAngle}deg)`
  },
  {
    duration: 12 * 60 * 60 * 1000, // 每12小时重复一次
    easing: 'linear',
    iterations: Infinity
  }
);

// 分钟指针
var minuteAnimation = minuteHand.animate(
  {
    transform: `rotate(${minuteAngle}deg)`
  },
  {
    duration: 60 * 60 * 1000, // 每小时重复一次
    easing: 'linear',
    iterations: Infinity
  }
);

// 秒针
var secondAnimation = secondHand.animate(
  {
    transform: `rotate(${secondAngle}deg)`
  },
  {
    duration: 60 * 1000, // 每分钟重复一次
    easing: 'linear',
    iterations: Infinity
  }
);

示例2:

再来一个更贴近生活的示例:我们可以利用Web Animations API在页面加载时,创建一个自动播放的幻灯片效果。通过动态控制CSS来切换图片的透明度和坐标。以下是实现的步骤。

步骤一:编写HTML代码

编写一个包含多张图片的div元素。

<div class="slide-show">
  <img src="https://img03.sogoucdn.com/app/a/100520093/3ad8b2c0b219aef-2c6645e8ac4e8b6e-37a6373438c22a029399775a2855558e.jpg" alt="image1">
  <img src="https://img03.sogoucdn.com/app/a/100520093/74c0b8d82b6bb858-14bb24b4aca501b8-74d5cf2d34227a9f7d3d657d1b9260dd.jpg" alt="image2">
  <img src="https://img03.sogoucdn.com/app/a/100520093/be6792d99114db20-3b7d96e73121742c-bc29d9349f0350dd22326f24af9313ea.jpg" alt="image3">
</div>

步骤二:编写CSS代码

使用CSS来定义幻灯片的样式。这里我们使用transform、opacity来控制切换效果。

.slide-show {
  position: relative;
  width: 500px;
  height: 300px;
  overflow: hidden;
}

.slide-show img {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  opacity: 0;
}

步骤三:使用 JavaScript 来控制 CSS 动画

使用Web Animations API来控制幻灯片的动画。我们可以使用animate()方法来创建一个动画对象,然后通过调用play()方法来启动动画。以下是实现代码。

// 获取幻灯片的div和所有的图片
var slideShow = document.querySelector('.slide-show');
var images = slideShow.querySelectorAll('img');
var totalImages = images.length;

// 控制图片的透明度和坐标
var keyframes = [
  { opacity: 0, transform: 'translateX(0px)' },
  { opacity: 1, transform: 'translateX(0px)', offset: 0.33 },
  { opacity: 1, transform: 'translateX(-500px)', offset: 0.67 },
  { opacity: 0, transform: 'translateX(0px)' }
];

// 定义动画选项
var timing = {
  duration: 3000,
  easing: 'ease-in-out',
  iterations: Infinity
};

// 创建一个定时器动画对象
var animations = [];
for (var i = 0; i < totalImages; i++) {
  animations.push(
    images[i].animate(keyframes, timing)
  );
}

// 控制动画的启动时间
var timeOffsets = [0, 2000, 4000];
for (var i = 0; i < totalImages; i++) {
  animations[i].currentTime = timeOffsets[i];
}

经过上面三个步骤,我们就可以创建一个幻灯片效果。

下面是一个完整的幻灯片示例的代码:

<div class="slide-show">
  <img src="https://img03.sogoucdn.com/app/a/100520093/3ad8b2c0b219aef-2c6645e8ac4e8b6e-37a6373438c22a029399775a2855558e.jpg" alt="image1">
  <img src="https://img03.sogoucdn.com/app/a/100520093/74c0b8d82b6bb858-14bb24b4aca501b8-74d5cf2d34227a9f7d3d657d1b9260dd.jpg" alt="image2">
  <img src="https://img03.sogoucdn.com/app/a/100520093/be6792d99114db20-3b7d96e73121742c-bc29d9349f0350dd22326f24af9313ea.jpg" alt="image3">
</div>
.slide-show {
  position: relative;
  width: 500px;
  height: 300px;
  overflow: hidden;
}

.slide-show img {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  opacity: 0;
}

// 获取幻灯片的div和所有的图片
var slideShow = document.querySelector('.slide-show');
var images = slideShow.querySelectorAll('img');
var totalImages = images.length;

// 控制图片的透明度和坐标
var keyframes = [
  { opacity: 0, transform: 'translateX(0px)' },
  { opacity: 1, transform: 'translateX(0px)', offset: 0.33 },
  { opacity: 1, transform: 'translateX(-500px)', offset: 0.67 },
  { opacity: 0, transform: 'translateX(0px)' }
];

// 定义动画选项
var timing = {
  duration: 3000,
  easing: 'ease-in-out',
  iterations: Infinity
};

// 创建一个定时器动画对象
var animations = [];
for (var i = 0; i < totalImages; i++) {
  animations.push(
    images[i].animate(keyframes, timing)
  );
}

// 控制动画的启动时间
var timeOffsets = [0, 2000, 4000];
for (var i = 0; i < totalImages; i++) {
  animations[i].currentTime = timeOffsets[i];
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Web Animations API实现一个精确计时的时钟示例 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • js中数组常用方法总结(推荐)

    让我为您详细地讲解“js中数组常用方法总结(推荐)”。 1. 前言 在JavaScript中,数组是非常常见的一种数据类型。为了更加高效地使用数组,我们需要对JS中数组的常用方法进行学习和总结。 2. 数组常用方法介绍 在JS中数组的常用方法有很多,我们在学习时需要分类讲解。下面是详细的介绍: 2.1 数组的创建方法 在JS中,创建数组有两种方式,一种是使用…

    JavaScript 2023年5月27日
    00
  • JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】

    下面是关于“JS实现的倒计时恢复按钮点击功能”的完整攻略: 一、实现思路 通过JavaScript获取页面上的倒计时元素,并从元素的data-*属性中读取倒计时的时间。 开始倒计时,每秒减少一秒,并将剩余时间更新到页面上。 倒计时结束后,显示恢复按钮,并将按钮设置为可点击状态。 添加按钮的点击事件,点击按钮后重新开始倒计时。 二、实现步骤 HTML结构: &…

    JavaScript 2023年6月10日
    00
  • JS深入浅出Function与构造函数

    JS深入浅出Function与构造函数 什么是Function? 在JavaScript中,函数被看作是对象,函数也可以看作是特殊的对象。每个函数都是Function类型的实例,都有自己的属性和方法。Function类型的构造函数是用来创建函数对象的。 函数的作用是封装一段代码,并可以用来重复使用,降低代码复杂性,方便维护。一个函数可以有0个或多个参数,可以…

    JavaScript 2023年5月27日
    00
  • JS getRandomValues和Math.random方法深入解析

    JS getRandomValues和Math.random方法深入解析 JavaScript中的随机数函数有两种常见的方式:getRandomValues和Math.random,它们在生成随机数方面有不同的适用场景和原理。 1. getRandomValues getRandomValues是Web Cryptography API(W3C)中的方法,用…

    JavaScript 2023年5月28日
    00
  • js获取单元格自定义属性值的代码(IE/Firefox)

    获取单元格自定义属性值的代码需要用到JavaScript的DOM操作,具体步骤如下: 获取单元格元素 首先,我们需要获取单元格元素,可以使用document.getElementById()方法获取单元格的ID,也可以使用document.getElementsByTagName()方法获取所有单元格元素并使用索引访问特定单元格。示例代码如下: var ce…

    JavaScript 2023年6月10日
    00
  • JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)

    在JavaScript中,可以使用new Date(str)语法将一个字符串转换为Date对象,其中str是日期字符串。但是在使用火狐或者IE浏览器时,可能会出现兼容性问题,如果字符串的格式不是标准的ISO格式(YYYY-MM-DDTHH:mm:ss.sssZ),就会出现错误。 以下是两种解决方法: 方法一:使用正则表达式修改日期字符串格式 可以使用正则表达…

    JavaScript 2023年6月10日
    00
  • javascript demo 基本技巧

    首先,我们要了解何谓 JavaScript Demo,这其实是一种基于 JavaScript 语言开发的小型互动演示,它可以运行在浏览器端或 Node.js 等环境中,用于展示和演示某项特定功能或效果。 下面,我将分享一些 JavaScript Demo 开发的基本技巧,帮助大家更好地开发出功能强大且易维护的演示程序。 好的 JavaScript Demo …

    JavaScript 2023年5月27日
    00
  • Javascript Global isNaN() 函数

    以下是关于JavaScript Global对象中isNaN()函数的完整攻略,包括两个示例说明。 JavaScript Global对象中的isNaN()函数 JavaScript Global对象中的isNaN()函数用于判断一个值是否为NaN(Not a Number)。如果一个值是NaN,则返回true,否则返回false。isNaN()函数可以用于…

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