<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>转盘</title> <meta name="viewport" content="width=device-width, maximum-scale=1.0, user-scalable=1"/> <link rel="stylesheet" href="../css/bootstrap.min.css"/> <link rel="stylesheet" href="../css/rotary.css"/> <script src="../js/jquery-2.1.4.min.js"></script></head><body><div class="container-fluid"> <div class="row rotary"> <div class="col-xs-12"> <div class="circle"> <div class="fan1"></div> <div class="fan2"></div> <div class="fan3"></div> <div class="fan4"></div> <div class="fan5"></div> <div class="fan6"></div> <div class="fan7"></div> <div class="fan8"></div> <span class="ct_go">GO</span> </div> </div> </div></div></body><script> $(function(){ //该方法进行了递归调用 function circle(cut,sp,step,amount){ var i=0; //参数cut用于指定执行circle方法转动的圈数(除最后一次) var deg=cut*360; //参数sp表示第一次执行circle方法时的转动间隔时间 //参数step表示下一次执行circle方法时的转动间隔时间是在上一次的基础上加step //即转动间隔时间增量(从而实现越转越慢) //参数amount表示circle方法的递归调用次数 //变量slowest表示最后一次执行circle方法时的转动间隔时间 //主要用于停止递归调用时的判断 var slowest=sp+step*amount; if(sp+step>slowest){ //最后一次执行circle方法时,转动的角度(这是通过随机数计算出的随机角度); deg=(Math.floor(Math.random()*100000)%10)*40+360; } var inter=setInterval(function(){ $(".ct_go").css("transform","rotate("+i+"deg)"); i+=5; //circle方法执行结束的判断 if(i>=deg){ clearInterval(inter); //是否进行递归调用的判断 if(sp+step<=slowest){ circle(cut,sp+step,step); } } },sp); } $(".ct_go").click(function(){ circle(3,3,3,7); }); });</script></html>
@charset "utf-8";body { font-family: 黑体; -webkit-font-smoothing: antialiased; background-color: #f4f4f5;}.container-fluid { padding: 0;}.row { margin: 0;}.col-xs-12 { padding: 0;}@keyframes mycircle { 0% { transform: rotate(0deg); -moz-transform: rotate(0deg); -webkit-transform: rotate(0deg); -o-transform: rotate(0deg); } 10% { transform: rotate(36deg); -moz-transform: rotate(36deg); -webkit-transform: rotate(36deg); -o-transform: rotate(36deg); } 20% { transform: rotate(72deg); -moz-transform: rotate(72deg); -webkit-transform: rotate(72deg); -o-transform: rotate(72deg); } 30% { transform: rotate(108deg); -moz-transform: rotate(108deg); -webkit-transform: rotate(108deg); -o-transform: rotate(108deg); } 40% { transform: rotate(144deg); -moz-transform: rotate(144deg); -webkit-transform: rotate(144deg); -o-transform: rotate(144deg); } 50% { transform: rotate(180deg); -moz-transform: rotate(180deg); -webkit-transform: rotate(180deg); -o-transform: rotate(180deg); } 60% { transform: rotate(216deg); -moz-transform: rotate(216deg); -webkit-transform: rotate(216deg); -o-transform: rotate(216deg); } 70% { transform: rotate(252deg); -moz-transform: rotate(252deg); -webkit-transform: rotate(252deg); -o-transform: rotate(252deg); } 80% { transform: rotate(288deg); -moz-transform: rotate(288deg); -webkit-transform: rotate(288deg); -o-transform: rotate(288deg); } 90% { transform: rotate(324deg); -moz-transform: rotate(324deg); -webkit-transform: rotate(324deg); -o-transform: rotate(324deg); } 100% { transform: rotate(360deg); -moz-transform: rotate(360deg); -webkit-transform: rotate(360deg); -o-transform: rotate(360deg); }}.rotary { margin-top: 50px;}.rotary .col-xs-12 > .circle { border-radius: 100%; border: 15px solid #B2232A; width: 240px; height: 240px; position: relative; margin: 0 auto; z-index: 1000; overflow: hidden;}.rotary .col-xs-12 > .circle div { position: absolute; width: 90px; height: 217.27922061px; border-left: 45px transparent solid; border-right: 45px transparent solid; left: 50%; margin-left: -45px;}.rotary .col-xs-12 > .circle .ct_go { display: block; position: absolute; width: 50px; height: 50px; border-radius: 50%; font-size: 20px; font-weight: normal; color: white; text-align: center; line-height: 40px; border: 4px solid white; top: 80px; left: 50%; margin-left: -25px; background-color: #ff323c;}.rotary .col-xs-12 > .circle .ct_go:after { content: ""; position: absolute; width: 20px; height: 20px; border: 10px solid transparent; border-bottom-color: white; top: -21px; left: 11px;}.rotary .fan1 { border-top: 108.63961031px #fdd89d solid;}.rotary .fan2 { border-top: 108.63961031px #fbb03b solid; transform: rotate(45deg); -moz-transform: rotate(45deg); -webkit-transform: rotate(45deg); -o-transform: rotate(45deg);}.rotary .fan3 { border-top: 108.63961031px #fdd89d solid; transform: rotate(90deg); -moz-transform: rotate(90deg); -webkit-transform: rotate(90deg); -o-transform: rotate(90deg);}.rotary .fan4 { border-top: 108.63961031px #fbb03b solid; transform: rotate(135deg); -moz-transform: rotate(135deg); -webkit-transform: rotate(135deg); -o-transform: rotate(135deg);}.rotary .fan5 { border-top: 108.63961031px #fdd89d solid; transform: rotate(180deg); -moz-transform: rotate(180deg); -webkit-transform: rotate(180deg); -o-transform: rotate(180deg);}.rotary .fan6 { border-top: 108.63961031px #fbb03b solid; transform: rotate(225deg); -moz-transform: rotate(225deg); -webkit-transform: rotate(225deg); -o-transform: rotate(225deg);}.rotary .fan7 { border-top: 108.63961031px #fdd89d solid; transform: rotate(270deg); -moz-transform: rotate(270deg); -webkit-transform: rotate(270deg); -o-transform: rotate(270deg);}.rotary .fan8 { border-top: 108.63961031px #fbb03b solid; transform: rotate(315deg); -moz-transform: rotate(315deg); -webkit-transform: rotate(315deg); -o-transform: rotate(315deg);}