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获得选中文本内容的方法
Dec 02 Javascript
浅谈tudou土豆网首页图片延迟加载的效果
Jun 23 Javascript
跨域请求之jQuery的ajax jsonp的使用解惑
Oct 09 Javascript
分享Javascript中最常用的55个经典小技巧
Nov 29 Javascript
js调试工具Console命令详解
Oct 21 Javascript
JavaScript设计模式之外观模式介绍
Dec 28 Javascript
深入浅析JavaScript中的arguments对象(强力推荐)
Jun 03 Javascript
canvas雪花效果核心代码分享
Feb 19 Javascript
Vue中定义全局变量与常量的各种方式详解
Aug 23 Javascript
React Native之prop-types进行属性确认详解
Dec 19 Javascript
JavaScript复制内容到剪贴板的两种常用方法
Feb 27 Javascript
koa2的中间件功能及应用示例
Mar 05 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
无线电波是什么?它是怎样传输的?
2021/03/01 无线电
非常好的php目录导航文件代码
2006/10/09 PHP
PHP解决中文乱码
2017/04/28 PHP
PHP 实现缩略图
2021/03/09 PHP
由prototype_1.3.1进入javascript殿堂-类的初探
2006/11/06 Javascript
jQuery下通过replace字符串替换实现大小图片切换
2012/05/22 Javascript
jQuery使用fadeout实现元素渐隐效果的方法
2015/03/27 Javascript
详谈javascript中的cookie
2015/06/03 Javascript
js实现的简单radio背景颜色选择器代码
2015/08/18 Javascript
javascript事件委托的用法及其好处简析
2016/04/04 Javascript
AngularJS辅助库browserTrigger用法示例
2016/11/03 Javascript
浅析JavaScript中var that=this
2017/02/17 Javascript
理解 javascript 中的函数表达式与函数声明
2017/07/07 Javascript
VUE2实现事件驱动弹窗示例
2017/10/21 Javascript
vue加载自定义的js文件方法
2018/03/13 Javascript
原生JS实现获取及修改CSS样式的方法
2018/09/04 Javascript
jQuery实现聊天对话框
2020/02/08 jQuery
[58:09]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第三场 6.2
2018/06/03 DOTA
pycharm 使用心得(七)一些实用功能介绍
2014/06/06 Python
Python的Django框架中从url中捕捉文本的方法
2015/07/20 Python
Python制作爬虫采集小说
2015/10/25 Python
Python复制Word内容并使用格式设字体与大小实例代码
2018/01/22 Python
pycharm 在windows上编辑代码用linux执行配置的方法
2018/10/27 Python
Python3按一定数据位数格式处理bin文件的方法
2019/01/24 Python
Django Haystack 全文检索与关键词高亮的实现
2020/02/17 Python
GitHub上值得推荐的8个python 项目
2020/10/30 Python
Python实现简单的2048小游戏
2021/03/01 Python
html5 input元素新特性_动力节点Java学院整理
2017/07/06 HTML / CSS
ziaja齐叶雅官方海外旗舰店:来自波兰的天然护肤品牌
2017/01/02 全球购物
西班牙最大的在线滑板和街头服饰商店:Fillow.net
2019/04/15 全球购物
临床护理求职信
2014/04/26 职场文书
防灾减灾宣传标语
2014/10/07 职场文书
2015年销售助理工作总结
2015/05/11 职场文书
合同纠纷调解书
2015/05/20 职场文书
2016教师节问候语
2015/11/10 职场文书
JS如何实现基于websocket的多端桥接平台
2021/05/14 Javascript