1. 演示效果
2. 分析思路
先编写动画,让风扇先转起来。 使用 js 控制动画的持续时间。 监听按钮的点击事件,在事件中修改元素的animation-duration
属性。
3. 代码实现
< ! DOCTYPE html>
< html lang= "en" >
< head>
< meta charset= "UTF-8" / >
< meta name= "viewport" content= "width=device-width, initial-scale=1.0" / >
< title> 手持小风扇< / title>
< style>
html,
body {
padding : 0px;
margin : 0px;
width : 100 % ;
height : 100 % ;
display : flex;
justify- content: center;
align- items: center;
}
. box {
position : relative;
width : 220px;
height : 420px;
}
. top- part {
width : 220px;
height : 220px;
box- sizing: border- box;
position : relative;
}
. top- part . left- box {
width : 220px;
height : 220px;
box- sizing: border- box;
border- radius: 50 % ;
border : 8px solid #333 ;
animation : myRotate infinite linear;
}
@keyframes myRotate {
0 % {
transform : rotate ( 0 ) ;
}
100 % {
transform : rotate ( 360deg) ;
}
}
. top- part . left- box . leaf {
position : absolute;
top : 50 % ;
left : 50 % ;
width : 50px;
height : 100px;
margin- left: - 25px;
border- radius: 50 % ;
background- color: rgb ( 106 , 106 , 235 ) ;
margin- top: - 100px;
}
. top- part . left- box . leaf: nth- child ( 2 ) {
transform : rotate ( 120deg) ;
transform- origin: 50 % 100 % ;
}
. top- part . left- box . leaf: nth- child ( 3 ) {
transform : rotate ( 240deg) ;
transform- origin: 50 % 100 % ;
}
. line- box . line {
position : absolute;
top : 50 % ;
left : 0px;
width : 212px;
height : 2px;
background- color: #333 ;
z- index: 10 ;
}
. line- box . line: nth- child ( 2 ) {
transform : rotate ( 30deg) ;
}
. line- box . line: nth- child ( 3 ) {
transform : rotate ( 60deg) ;
}
. line- box . line: nth- child ( 4 ) {
transform : rotate ( 90deg) ;
}
. line- box . line: nth- child ( 5 ) {
transform : rotate ( 120deg) ;
}
. line- box . line: nth- child ( 6 ) {
transform : rotate ( 150deg) ;
}
. line- box . mid- dot {
position : absolute;
top : 50 % ;
left : 50 % ;
width : 50px;
height : 50px;
margin- left: - 25px;
margin- top: - 25px;
background- color: #333 ;
z- index: 11 ;
border- radius: 50 % ;
}
. bom- part {
width : 50px;
height : 200px;
background- color: #333 ;
position : absolute;
top : 215px;
left : 50 % ;
margin- left: - 25px;
}
. bom- part . item {
color : white;
width : 22px;
height : 22px;
background- color: rgb ( 106 , 106 , 235 ) ;
border- radius: 50 % ;
font- size: 13px;
display : flex;
justify- content: center;
align- items: center;
margin : 0px auto;
margin- top: 15px;
cursor : pointer;
}
< / style>
< / head>
< body>
< div class = "box" >
< div class = "top-part" >
< div class = "line-box" >
< div class = "line" > < / div>
< div class = "line" > < / div>
< div class = "line" > < / div>
< div class = "line" > < / div>
< div class = "line" > < / div>
< div class = "line" > < / div>
< div class = "mid-dot" > < / div>
< / div>
< div class = "left-box" >
< div class = "leaf" > < / div>
< div class = "leaf" > < / div>
< div class = "leaf" > < / div>
< / div>
< / div>
< div class = "bom-part" >
< div class = "item" onclick= "run(1)" > 1 < / div>
< div class = "item" onclick= "run(0.5)" > 2 < / div>
< div class = "item" onclick= "run(0.2)" > 3 < / div>
< div class = "item" onclick= "run(0)" > 关< / div>
< / div>
< / div>
< script>
function run ( num ) {
document. querySelector ( ".left-box" ) . style. animationDuration = num + "s" ;
}
< / script>
< / body>
< / html>