css 时钟翻转效果

1. html 

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title>时钟翻转</title>
	<link rel="stylesheet" type="text/css" href="./index.css">
</head>
<body>
	<div class="contarner">
		<div data-after="" data-before=""></div>
		<div data-after="" data-before=""></div>
	</div>
</body>
</html>

 2.  less

*{
	padding: 0;
	margin: 0;	
}

// 定义变量
@bybac:#fff;
@conWidth:100px;
@conHeight:150px;
@conbac:#666;

body{
	background:@bybac;
}

.contarner{
	width: @conWidth;
	height:@conHeight;
	// background: @conbac;
	position: absolute;
	inset: 0;
	margin: auto;
	perspective:200px;
	border-radius: 10px;
	&::after{
		content: '';
		position: absolute;
		width: 100%;
		height:1px;
		background: white;
		inset: 0;
		margin: auto;
	}
	div{
		
		position:absolute;
		font-size: @conHeight;
		&::before,&::after{
			display: block;
			width: @conWidth;
			height: (@conHeight / 2);
			text-align: center;
			overflow: hidden;
			background: @conbac;
			border-radius: 10px;
		}
		&::before{
			content: attr(data-before);	
		}
		&::after{
			content: attr(data-after);
		}
	}

	div:nth-child(1){
		&::before{
			line-height: @conHeight;
		}
		&::after{
			line-height: 0;
		}
	}
	div:nth-child(2){
		height:(@conHeight / 2);
		transform-origin:center bottom;
		transform-style: preserve-3d;
		// transition:1s;
		backface-visibility: hidden;
		&::before{
			line-height: 0;
			transform: rotateX(180deg);	
		}
		&::after{
			line-height: @conHeight;
			transform: translateY(-100%);
		}
	}

	// &:hover {
	// 	div:nth-child(2){
	// 		// transform:rotateX(-180deg);
	// 	}
	// }
}

3.  JS 

 

		// 获取元素
		let items = document.querySelectorAll('.contarner div');
		// 当前数 (初次number+1)
		let number = -1;
		// 计时器
		let timer = '';
		// 最大数
		let maxNumber = 3;

		nextTo(number);
		timer = setInterval(function(){
			// 动画
			items[1].style.transition = "1s";
			items[1].style.transform = "rotateX(-180deg)";
		},1000);

		//  监听动画是否完成
		items[1].addEventListener('transitionend', function(){
			// 复位
			items[1].style.transition = "0s";
			items[1].style.transform = "rotateX(0)";
			// 下一个数字
			nextTo();
		});
		// 显示的数字
		function nextTo(){
			if(number < maxNumber){
				number++;
			}else{
				number = 0;
			}
			let baforeNum = number + 1;
			if(baforeNum > maxNumber){
				baforeNum = 0
			}
			for(let i of items){
				i.setAttribute('data-after', number);
				i.setAttribute('data-before', baforeNum);
			}
		}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_最初の心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值