样式
css 部分
body{background: #000;}
*{margin: 0;padding: 0;}
i{
width: 5px;
height: 50px;
background: #fff;
opacity: 0;
display: block;
border-radius: 2px;
position: absolute;
transition: 1s;
box-shadow: 1px 0px 9px #0dc0e8, 1px 0px 12px #c5f7c2;
}
i.w{width: 57px;height: 5px;}
i:nth-child(2n){transition-delay:0.6s;transition: 0.4s;}
.div{perspective: 4000px;
position: absolute;
width: 100%;
height: 100%;}
.time{display: -webkit-box;
display: -webkit-flex;
display: -moz-flex;
display: -ms-flexbox;
display: flex;
justify-content:space-between;
align-items: center;transition: 0.5s;
width: 1000px;margin: 0 auto;position: fixed;top: 50%;left: 0;margin-top: -119px;right: 0;}
.time .demo{transition: 1.5s;}
.time .demo:hover{transform: scale(1.2);}
.spot span{width: 10px;height: 10px;background: #fff;display: block;margin: 30px 0;animation: myfirst 1s ease-out 0s infinite alternate;box-shadow: 1px 0px 9px #0dc0e8,1px 0px 12px #09D2E8;}
@keyframes myfirst
{
0 {opacity: 1;}
100% {opacity: 0.6;}
}
.demo{position: relative;width: 115px;height: 238px;}
.demo i:nth-child(1){top: 11px;left: 0;}
.demo i:nth-child(3){top: 11px;right: 0;}
.demo i:nth-child(2){top: 62px;left: 0;}
.demo i:nth-child(4){top: 62px;right: 0;}
.demo i:nth-child(5){top: 124px;left: 0;}
.demo i:nth-child(7){top: 124px;right: 0;}
.demo i:nth-child(6){top: 176px;left: 0;}
.demo i:nth-child(8){top: 176px;right: 0;}
.demo i:nth-child(9){top: 0px;left: 0px;}
.demo i:nth-child(10){top: 0px;right: 0px;}
.demo i:nth-child(11){top: 115px;left: 0px;}
.demo i:nth-child(12){top: 115px;right: 0px;}
.demo i:nth-child(13){bottom: 0;left: 0px;}
.demo i:nth-child(14){bottom: 0;right: 0px;}
js部分
arr = {
"arr0" : [1,3,2,4,5,6,7,8,9,10,13,14],
"arr1" : [3,4,7,8],
'arr2' : [3,4,9,10,11,12,13,14,5,6] ,
"arr3" : [9,10,3,4,11,12,7,8,13,14],
"arr4" : [1,2,11,12,3,4,7,8],
"arr5" : [9,10,1,2,11,12,7,8,13,14],
"arr6" : [9,10,1,2,11,12,5,6,7,8,13,14],
"arr7" : [1,2,3,4,7,8,9,10],
"arr8" : [1,2,3,4,5,6,7,8,9,10,11,12,13,14],
"arr9" : [1,2,3,4,9,10,11,12,13,14,7,8],
}
function ss(){
var now = new Date();
var hour = now.getHours();//得到小时
var minu = now.getMinutes();//得到分钟
var sec = now.getSeconds();//得到秒
var s = sec%10
var s10 =parseInt(sec/10)
var s_ar = "arr"+s
var s_ar10 = "arr"+s10
var m = minu%10
var m10 =parseInt(minu/10)
var m_ar = "arr"+m
var m_ar10 = "arr"+m10
var h = hour%10
var h10 =parseInt(hour/10)
var h_ar = "arr"+h
var h_ar10 = "arr"+h10
// console.log(sec,ar)
$(".demo").eq(5).attr("class","demo"+" "+("demo"+s))
$(".demo").eq(4).attr("class","demo"+" "+("demo"+s10))
$(".demo").eq(3).attr("class","demo"+" "+("demo"+s))
$(".demo").eq(2).attr("class","demo"+" "+("demo"+s10))
$(".demo").eq(1).attr("class","demo"+" "+("demo"+h))
$(".demo").eq(0).attr("class","demo"+" "+("demo"+h10))
$(".demo i").css({"opacity":"0","transform":"scale(0.7) translateX(30px)"})
// 秒
for( let s = 0 ; s < arr[s_ar].length ; s++){
$(".demo").eq(5).find("i").eq((arr[s_ar][s]-1)).css({"opacity":"1","transform":"scale(1)"})
console.log()
}
for( let s = 0 ; s < arr[s_ar10].length ; s++){
$(".demo").eq(4).find("i").eq((arr[s_ar10][s]-1)).css({"opacity":"1","transform":"scale(1)"})
console.log()
}
// 分
for( let s = 0 ; s < arr[m_ar].length ; s++){
$(".demo").eq(3).find("i").eq((arr[m_ar][s]-1)).css({"opacity":"1","transform":"scale(1)"})
console.log()
}
for( let s = 0 ; s < arr[m_ar10].length ; s++){
$(".demo").eq(2).find("i").eq((arr[m_ar10][s]-1)).css({"opacity":"1","transform":"scale(1)"})
console.log()
}
// 时
for( let s = 0 ; s < arr[h_ar].length ; s++){
$(".demo").eq(1).find("i").eq((arr[h_ar][s]-1)).css({"opacity":"1","transform":"scale(1)"})
console.log()
}
for( let s = 0 ; s < arr[h_ar10].length ; s++){
$(".demo").eq(0).find("i").eq((arr[h_ar10][s]-1)).css({"opacity":"1","transform":"scale(1)"})
console.log()
}
setTimeout(ss,1000);
}
ss()
$(document).mousemove(function(){
var y = event.screenY
var x = event.screenX
var h = screen.availHeight
var w = $("body").width()
var num1 = -(y - h/2)/(h/2)*100
if(num1 > 30){
num1 = 30
}
if(num1 < -30){
num1 = -30
}
// 控制最大倾斜角度
var num2 = (x - w/2)/(w/2)*100
if(num2 > 8){
num2 = 8
}
if(num2 < -8){
num2 = -8
}
$(".time").css("transform","rotateX("+ num1 +"deg)" +""+"rotateY("+ num2 + "deg)")
}).mouseout(function(){
$(".time").css("transform","rotateX("+0+"deg)"+" "+"rotateY("+0+"deg)")
})
引入jq文件
以下是html部分
<div class="div">
<div class="time">
<!-- 时 -->
<div class="demo">
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i class="w"></i>
<i class="w"></i>
<i class="w"></i>
<i class="w"></i>
<i class="w"></i>
<i class="w"></i>
</div>
<div class="demo">
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i class="w"></i>
<i class="w"></i>
<i class="w"></i>
<i class="w"></i>
<i class="w"></i>
<i class="w"></i>
</div>
<div class="spot">
<span></span>
<span></span>
</div>
<!-- 分 -->
<div class="demo">
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i class="w"></i>
<i class="w"></i>
<i class="w"></i>
<i class="w"></i>
<i class="w"></i>
<i class="w"></i>
</div>
<div class="demo">
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i class="w"></i>
<i class="w"></i>
<i class="w"></i>
<i class="w"></i>
<i class="w"></i>
<i class="w"></i>
</div>
<div class="spot">
<span></span>
<span></span>
</div>
<!-- 秒 -->
<div class="demo">
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i class="w"></i>
<i class="w"></i>
<i class="w"></i>
<i class="w"></i>
<i class="w"></i>
<i class="w"></i>
</div>
<div class="demo">
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i class="w"></i>
<i class="w"></i>
<i class="w"></i>
<i class="w"></i>
<i class="w"></i>
<i class="w"></i>
</div>
</div>
</div>
原理:通过每一秒调用刷新获取当前时间 匹配 json 展示时间样式
倾斜结合鼠标滑动改变 rotate 值
想要看到倾斜效果 用到 css3 perspective 属性调整视角