JS+CSS实现滚动数字时钟效果


Posted in Javascript onDecember 25, 2017

本篇内容我们用js配合css样式表来实现一个滚动时钟的动画效果,这个效果一般都是用在网页开场动画以及区域的时间显示中,非常好看,动画效果也很个性,我们先来看下运行后的效果:

JS+CSS实现滚动数字时钟效果

下面就是这个滚动时钟动画的全部代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>CSS3+JS滚动数字时钟代码-三水点靠木</title>
<style>
body{text-align: center;background-color: #0e141b;color: rgba(224, 230, 235, 0.89);font-family: 'Roboto Condensed', sans-serif;font-weight: 300;overflow: hidden;}
.column,.colon{display: inline-block;vertical-align: top;font-size: 86px;line-height: 86px;}
.column{-webkit-transition: -webkit-transform 300ms;transition: -webkit-transform 300ms;transition: transform 300ms;transition: transform 300ms, -webkit-transform 300ms;}
.colon{-webkit-transition: -webkit-transform 300ms;transition: -webkit-transform 300ms;transition: transform 300ms;transition: transform 300ms, -webkit-transform 300ms;-webkit-transform: translateY(calc(50vh - 43px));transform: translateY(calc(50vh - 43px));}
.colon:after{content: ':';}
.num{-webkit-transition: opacity 500ms, text-shadow 100ms;transition: opacity 500ms, text-shadow 100ms;opacity: 0.025;}
.num.visible{opacity: 1.0;text-shadow: 1px 1px 0px #336699;}
.num.close{opacity: 0.35;}
.num.far{opacity: 0.15;}
.num.distant{opacity: 0.1;}
</style>
</head>
<body>
<div class="column">
 <div class="num">0</div>
 <div class="num">1</div>
 <div class="num">2</div>
</div>
<div class="column">
 <div class="num">0</div>
 <div class="num">1</div>
 <div class="num">2</div>
 <div class="num">3</div>
 <div class="num">4</div>
 <div class="num">5</div>
 <div class="num">6</div>
 <div class="num">7</div>
 <div class="num">8</div>
 <div class="num">9</div>
</div>
<div class="colon"></div>
<div class="column">
 <div class="num">0</div>
 <div class="num">1</div>
 <div class="num">2</div>
 <div class="num">3</div>
 <div class="num">4</div>
 <div class="num">5</div>
</div>
<div class="column">
 <div class="num">0</div>
 <div class="num">1</div>
 <div class="num">2</div>
 <div class="num">3</div>
 <div class="num">4</div>
 <div class="num">5</div>
 <div class="num">6</div>
 <div class="num">7</div>
 <div class="num">8</div>
 <div class="num">9</div>
</div>
<div class="colon"></div>
<div class="column">
 <div class="num">0</div>
 <div class="num">1</div>
 <div class="num">2</div>
 <div class="num">3</div>
 <div class="num">4</div>
 <div class="num">5</div>
</div>
<div class="column">
 <div class="num">0</div>
 <div class="num">1</div>
 <div class="num">2</div>
 <div class="num">3</div>
 <div class="num">4</div>
 <div class="num">5</div>
 <div class="num">6</div>
 <div class="num">7</div>
 <div class="num">8</div>
 <div class="num">9</div>
</div>
<script>
'use strict';
var size = 86;
var columns = Array.from(document.getElementsByClassName('column'));
var d = undefined,
 c = undefined;
var classList = ['visible', 'close', 'far', 'far', 'distant', 'distant'];
var use24HourClock = true;
function padClock(p, n) {
	return p + ('0' + n).slice(-2);
}
function getClock() {
	d = new Date();
	return [use24HourClock ? d.getHours() : d.getHours() % 12 || 12, d.getMinutes(), d.getSeconds()].reduce(padClock, '');
}
function getClass(n, i2) {
	return classList.find(function (class_, classIndex) {
		return i2 - classIndex === n || i2 + classIndex === n;
	}) || '';
}

var loop = setInterval(function () {
	c = getClock();

	columns.forEach(function (ele, i) {
		var n = +c[i];
		var offset = -n * size;
		ele.style.transform = 'translateY(calc(50vh + ' + offset + 'px - ' + size / 2 + 'px))';
		Array.from(ele.children).forEach(function (ele2, i2) {
			ele2.className = 'num ' + getClass(n, i2);
		});
	});
}, 200 + Math.E * 10);
</script>
</body>
</html>

注意:其中最上面的是CSS样式内容,大家可以在其中进行调整颜色字体等

<style>
body{text-align: center;background-color: #0e141b;color: rgba(224, 230, 235, 0.89);font-family: 'Roboto Condensed', sans-serif;font-weight: 300;overflow: hidden;}
.column,.colon{display: inline-block;vertical-align: top;font-size: 86px;line-height: 86px;}
.column{-webkit-transition: -webkit-transform 300ms;transition: -webkit-transform 300ms;transition: transform 300ms;transition: transform 300ms, -webkit-transform 300ms;}
.colon{-webkit-transition: -webkit-transform 300ms;transition: -webkit-transform 300ms;transition: transform 300ms;transition: transform 300ms, -webkit-transform 300ms;-webkit-transform: translateY(calc(50vh - 43px));transform: translateY(calc(50vh - 43px));}
.colon:after{content: ':';}
.num{-webkit-transition: opacity 500ms, text-shadow 100ms;transition: opacity 500ms, text-shadow 100ms;opacity: 0.025;}
.num.visible{opacity: 1.0;text-shadow: 1px 1px 0px #336699;}
.num.close{opacity: 0.35;}
.num.far{opacity: 0.15;}
.num.distant{opacity: 0.1;}
</style>

JS代码主要就是控制动画的滚动效果,CSS用来控制数字的大小等内容。

本篇内容是三水点靠木的原创,转载请留网址,感谢你对三水点靠木的支持。

Javascript 相关文章推荐
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
Feb 23 Javascript
button没写type=button会导致点击时提交
Mar 06 Javascript
JavaScript实现MIPS乘法模拟的方法
Apr 17 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
Dec 17 Javascript
原生js实现手风琴功能(支持横纵向调用)
Jan 13 Javascript
Angular2 http jsonp的实例详解
Aug 31 Javascript
javascript数据类型中的一些小知识点(推荐)
Apr 18 Javascript
Layui数据表格跳转到指定页的实现方法
Sep 05 Javascript
JS计算斐波拉切代码实例
Sep 12 Javascript
js函数柯里化的方法和作用实例分析
Apr 11 Javascript
快速解决element的autofocus失效问题
Sep 08 Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
Nov 06 Javascript
Vue.js通用应用框架-Nuxt.js的上手教程
Dec 25 #Javascript
微信小程序录音与播放录音功能
Dec 25 #Javascript
利用vue + element实现表格分页和前端搜索的方法
Dec 25 #Javascript
VueRouter导航守卫用法详解
Dec 25 #Javascript
基于zTree树形菜单的使用实例
Dec 25 #Javascript
利用jQuery+localStorage实现一个简易的计时器示例代码
Dec 25 #jQuery
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
Dec 25 #Javascript
You might like
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
2014/05/08 PHP
php支付宝系列之电脑网站支付
2018/05/30 PHP
php-fpm中max_children的配置
2019/03/15 PHP
javascript下string.format函数补充
2010/08/24 Javascript
jquery跟js初始化加载的多种方法及区别介绍
2014/04/02 Javascript
jQuery 删除/替换DOM元素的几种方式
2014/05/20 Javascript
js实现遍历含有input的table实例
2015/12/07 Javascript
JavaScript Math.round() 方法
2015/12/18 Javascript
jQuery+css实现的切换图片功能代码
2016/01/27 Javascript
angular forEach方法遍历源码解读
2017/01/25 Javascript
Vue应用部署到服务器的正确方式
2017/07/15 Javascript
vue一个页面实现音乐播放器的示例
2018/02/06 Javascript
关于node-bindings无法在Electron中使用的解决办法
2018/12/18 Javascript
使用mixins实现elementUI表单全局验证的解决方法
2019/04/02 Javascript
[49:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第二场 3月4日
2021/03/11 DOTA
Python工程师面试必备25条知识点
2018/01/17 Python
Python实现读写INI配置文件的方法示例
2018/06/09 Python
对Pyhon实现静态变量全局变量的方法详解
2019/01/11 Python
python实现抽奖小程序
2020/04/15 Python
python小程序实现刷票功能详解
2019/07/17 Python
简单了解Python3 bytes和str类型的区别和联系
2019/12/19 Python
tensorflow实现在函数中用tf.Print输出中间值
2020/01/21 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
2020/02/18 Python
css3过渡_动力节点Java学院整理
2017/07/11 HTML / CSS
如何用canvas实现在线签名的示例代码
2018/07/10 HTML / CSS
美国殿堂级滑板、冲浪、滑雪服装品牌:Volcom(钻石)
2017/04/20 全球购物
June Jacobs尊积帕官网:知名的spa水疗护肤品牌
2019/03/21 全球购物
毕业生求职简历的自我评价
2013/10/07 职场文书
教育专业自荐书范文
2013/12/17 职场文书
上课迟到检讨书
2014/01/19 职场文书
革命先烈的英雄事迹材料
2014/02/15 职场文书
2014年政风行风评议工作总结
2014/10/21 职场文书
应届生求职自荐信范文
2015/03/04 职场文书
刑事上诉状范文
2015/05/22 职场文书
不会写演讲稿,快来看看这篇文章!
2019/08/06 职场文书
vue前端工程的搭建
2021/03/31 Vue.js