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 相关文章推荐
JavaScript 放大镜 放大倍率和视窗尺寸
May 09 Javascript
基于JQuery的抓取博客园首页RSS的代码
Dec 01 Javascript
浅谈Javascript事件模拟
Jun 27 Javascript
jquery中EasyUI实现异步树
Mar 01 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
Dec 04 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
Dec 15 Javascript
浅谈Javascript中的12种DOM节点类型
Aug 19 Javascript
JavaScript ES6中CLASS的使用详解
Nov 22 Javascript
微信小程序 开发之全局配置
May 05 Javascript
vue.js template模板的使用(仿饿了么布局)
Aug 13 Javascript
Vue使用mixin分发组件的可复用功能
Sep 01 Javascript
node.js 如何监视文件变化
Sep 01 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上传图片重命名的6种解决方法的详细介绍
2013/04/28 PHP
基于PHP创建Cookie数组的详解
2013/07/03 PHP
php中array_slice和array_splice函数解析
2016/10/18 PHP
php格式化时间戳
2016/12/17 PHP
php利用fsockopen GET/POST提交表单及上传文件
2017/05/22 PHP
jquery中的mouseleave和mouseout的区别 模仿下拉框效果
2012/02/07 Javascript
js获得鼠标的坐标值的方法
2013/03/13 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
JavaScript实现文字与图片拖拽效果的方法
2015/02/16 Javascript
json实现添加、遍历与删除属性的方法
2016/06/17 Javascript
JavaScript实现图片切换效果
2017/08/12 Javascript
JS函数内部属性之arguments和this实例解析
2018/10/07 Javascript
Koa代理Http请求的示例代码
2018/10/10 Javascript
layer.alert回调函数执行关闭弹窗的实例
2019/09/11 Javascript
Angular8引入百度Echarts进行图表分析的实现代码
2019/11/27 Javascript
js实现详情页放大镜效果
2020/10/28 Javascript
vue 授权获取微信openId操作
2020/11/13 Javascript
jquery实现淡入淡出轮播图效果
2020/12/13 jQuery
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
浅析python中numpy包中的argsort函数的使用
2018/08/30 Python
使用Python的networkx绘制精美网络图教程
2019/11/21 Python
浅谈Python访问MySQL的正确姿势
2020/01/07 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
2020/02/17 Python
python 获取谷歌浏览器保存的密码
2021/01/06 Python
定义css设备类型-Media Queries图表简介及使用方法
2013/01/21 HTML / CSS
奥地利网上书店:Weltbild
2017/07/14 全球购物
西班牙语在线票务市场:SuperBoletería
2019/06/10 全球购物
WatchShop法国:英国排名第一的独立手表零售商
2020/02/17 全球购物
自我鉴定 电子商务专业
2014/01/30 职场文书
2014年创先争优活动总结
2014/05/04 职场文书
2015新年寄语大全
2014/12/08 职场文书
2015年春节标语口号
2014/12/09 职场文书
初中生考试作弊检讨书
2014/12/14 职场文书
2015年试用期工作总结范文
2015/05/28 职场文书
大学三好学生主要事迹范文
2015/11/03 职场文书
一起来学习Python的元组和列表
2022/03/13 Python