<!DOCTYPE html
>
<head
>
    <meta charset
="utf-8">
    <meta name
="viewport" content
="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
    <style
>
        body
{
            margin: 0
;
            padding: 0
;
        }
        .xian
{
            width: 360px
;
            height:600px
;
            margin: 0 auto
;
            position: relative
;
            border: 1px solid black
;
        }
        .fx
{
            display: flex
;
            justify-content:space-around
;
            margin: 50px 0 0 0
;
        }
        .fx div:nth-child
(1
){
            border-right:50px solid rgb
(57, 126, 218
);
            border-left:0
;
            border-top: 30px solid transparent
;
            border-bottom: 30px solid transparent
;
        }
        .fx div:nth-child
(2
){
            border-left:50px solid rgb
(57, 126, 218
);
            border-right:0
;
            border-top: 30px solid transparent
;
            border-bottom: 30px solid transparent
;
        }
        .fx div:nth-child
(3
){
            border-top :50px solid rgb
(57, 126, 218
);
            border-bottom:0
;
            border-left: 30px solid transparent
;
            border-right: 30px solid transparent
;
        }
        .fx div:nth-child
(4
){
            width: 30px
;
            height: 30px
;
            border:15px solid rgb
(57, 126, 218
);
            border-left:15px solid transparent
;
            border-radius: 50%
;
            position: relative
;
        }
        .fx div:nth-child
(4
)::before
{
            content: 
'';
            position: absolute
;
            top:-5px
;
            left:-25px
;
            border-left:20px solid transparent 
;     
            border-right:20px solid transparent 
;
            border-bottom: 20px solid rgb
(57, 126, 218
);
            transform: rotate
(-140deg
);          
        }
        .fx div:nth-child
(5
){
            width: 30px
;
            height: 30px
;
            border:15px solid rgb
(57, 126, 218
);
            border-right:15px solid transparent
;
            border-radius: 50%
;
            position: relative
;
        }
        .fx div:nth-child
(5
)::before
{
            content: 
'';
            position: absolute
;
            top:-3px
;
            left: 16px
;
            border-left:20px solid transparent 
;     
            border-right:20px solid transparent 
;
            border-bottom: 20px solid rgb
(57, 126, 218
);
            transform: rotate
(140deg
);          
        }
        .fx div:nth-child
(6
){
            width: 60px
;
            height: 60px
;
            background-color: rgb
(57, 126, 218
);
            position: relative
;
        }
    </style
>
</head
>
<body
>
    <div class
='xian'>
    </div
>
    <div class
='fx'>
        <div onclick
='zuo()'></div
>
        <div onclick
='you()'></div
>
        <div onclick
='dd(m)'></div
>
        <div onclick
='zn()'></div
>
        <div onclick
='zs()'></div
>
        <div onclick
='ting(ti)'></div
>
    </div
>
    <script
>
        let x 
= document.querySelector
('.xian');
		    function tn
(st
){
		        return +st.slice
(0,-2
)
		    }
        let m 
= true;
        let kk
;
        let ti 
= true;
        let shuzu 
= [[{l:160,t:0
},
{l1:170,t1:0
},
{l2:180,t2:0
},
{l3:190,t3:0
}],
                     
[{l:170,t:0
},
{l1:170,t1:10
},
{l2:170,t2:20
},
{l3:170,t3:30
}],
                     
[{l:170,t:10
},
{l1:180,t1:10
},
{l2:190,t2:10
},
{l3:190,t3:0
}],
                     
[{l:170,t:0
},
{l1:170,t1:10
},
{l2:170,t2:20
},
{l3:180,t3:20
}],
                     
[{l:170,t:10
},
{l1:180,t1:0
},
{l2:170,t2:0
},
{l3:190,t3:0
}],
                     
[{l:170,t:0
},
{l1:180,t1:10
},
{l2:180,t2:0
},
{l3:180,t3:20
}],
                     
[{l:170,t:0
},
{l1:180,t1:10
},
{l2:170,t2:10
},
{l3:190,t3:10
}],
                     
[{l:180,t:0
},
{l1:170,t1:10
},
{l2:170,t2:0
},
{l3:170,t3:20
}],
                     
[{l:170,t:0
},
{l1:180,t1:0
},
{l2:190,t2:0
},
{l3:190,t3:10
}],
                     
[{l:170,t:20
},
{l1:180,t1:0
},
{l2:180,t2:20
},
{l3:180,t3:10
}],
                     
[{l:170,t:10
},
{l1:180,t1:0
},
{l2:180,t2:10
},
{l3:190,t3:10
}],
                     
[{l:180,t:0
},
{l1:180,t1:20
},
{l2:180,t2:10
},
{l3:190,t3:10
}],
                     
[{l:170,t:0
},
{l1:190,t1:0
},
{l2:180,t2:0
},
{l3:180,t3:10
}],
                     
[{l:170,t:10
},
{l1:180,t1:0
},
{l2:180,t2:10
},
{l3:180,t3:20
}],
                     
[{l:170,t:10
},
{l1:170,t1:20
},
{l2:180,t2:10
},
{l3:180,t3:0
}],
                     
[{l:170,t:0
},
{l1:180,t1:0
},
{l2:180,t2:10
},
{l3:190,t3:10
}],
                     
[{l:170,t:0
},
{l1:170,t1:10
},
{l2:180,t2:10
},
{l3:180,t3:20
}],
                     
[{l:170,t:10
},
{l1:180,t1:10
},
{l2:180,t2:0
},
{l3:190,t3:0
}],
                     
[{l:170,t:0
},
{l1:180,t1:0
},
{l2:180,t2:10
},
{l3:170,t3:10
}]];
        let sto 
= document.createEvent
('HTMLEvents');
            sto.initEvent
("stop", false, false
);
        class e 
{
            constructor
(l,t
){
                this.a 
= document.createElement
('div');
                this.a.style
=`width:8px;height:8px;border:1px solid rgb(229, 229, 245);background:black;position:absolute;left:${l}px;top:${t}px`;
                this.a.live 
= true;
                x.appendChild
(this.a
);
            }
            shan
(){
                x.removeChild
(this.a
);
            }
       }
		class k 
{
			constructor
([{l,t
},
{l1,t1
},
{l2,t2
},
{l3,t3
}]) {
				this.st
=true
;
			    this.ab
=new e
(l,t
);
			    this.ab1
=new e
(l1,t1
);
			    this.ab2
=new e
(l2,t2
);
			    this.ab3
=new e
(l3,t3
);
			    this.ss
=[this.ab,this.ab1,this.ab2,this.ab3
];		
			}
			panduan
(t
) {				
				this.s 
= setInterval
(()=>{				
                    this.ss.forEach
(xx
=>{
                            xx.b 
= xx.a.offsetTop+10
;
                            if (xx.b
>590
) {
                                this.st
=false
;
                            }
                            let y 
= x.querySelectorAll
('div');
                            y.forEach
(z
=>{
                                    if (!z.live
&&xx.a.offsetLeft
==z.offsetLeft
) {
                                        if
(xx.b 
== z.offsetTop
){
                                            this.st
=false
;
                                        }
                                    }
                                }
                            )
                        }                  
                    )
                    if (this.st
) {
                        this.ss.forEach
(xy
=>{xy.a.style.top
=xy.b+
'px'})                                
                    }
                    if (!this.st
) {
                        this.stop
();
                        this.ss.forEach
(aa
=>{aa.a.live
=false
})
                     } 
                },t
);
			}
			run
() {
                this.panduan
(500
)
			}
			runs
() {
                clearInterval
(this.s
)
                this.panduan
(50
)
			}
			stop
(){
                let y 
= x.querySelectorAll
('div');
                clearInterval
(this.s
);
                this.ss.forEach
(
                    x
=>{let s
=[]
                        y.forEach
(
                            q 
=>{
                                if (q.offsetTop 
== x.offsetTop
){
                                    s.push
(q
)
                                }
                            })
                    if (s.length
=36
) {
                        s.forEach
(w
=>w.remove
());
                        y.forEach
(t
=>{
                            if (t.offsetTop
<x.offsetTop
) {
                                t.style.top 
= t.offsetTop+10+
'px'
                            }
                            
                        })
                    }
                });
                x.dispatchEvent
(sto
)		                	    
			}
			zhuann
(){
                let y 
= x.querySelectorAll
('div');
                let zh 
= true;
				this.ss.forEach
(x
=>{
						let l 
= this.ab2.a.offsetLeft + x.a.offsetTop - this.ab2.a.offsetTop
;					
                        let t 
= this.ab2.a.offsetTop - x.a.offsetLeft + this.ab2.a.offsetLeft
;
                        y.forEach
(
                                z
=>{
                                    if (l 
== z.offsetTop
||l
<0
||l
>350
||t
>590
) {
                                        zh
=false
;
                                    }
                                }
                            )
                        if (zh
) {
                            x.a.style.left 
= l + 
'px';
						    x.a.style.top 
= t + 
'px'   
                        }   
					})
            }
            zhuans
(){
                let y 
= x.querySelectorAll
('div');
                let zh 
= true;
				this.ss.forEach
(x
=>{
						let l 
= this.ab2.a.offsetLeft - x.a.offsetTop + this.ab2.a.offsetTop
;					
						let t 
= x.a.offsetLeft - this.ab2.a.offsetLeft + this.ab2.a.offsetTop
;
                        y.forEach
(
                                z
=>{
                                    if (l 
== z.offsetTop
||l
<0
||l
>350
||t
>590
) {
                                        zh
=false
;
                                    }
                                }
                            )
                        if (zh
) {
                            x.a.style.left 
= l + 
'px';
						    x.a.style.top 
= t + 
'px'   
                        } 
					})
            }
		}
        function zuo
(){
                let y 
= x.querySelectorAll
('div');
                let zh 
= true;
				kk.ss.forEach
(x
=>{		
                        let l 
= x.a.offsetLeft - 10
;
                        y.forEach
(
                                z
=>{
                                    if (l
<0
) {
                                        zh
=false
;
                                    }
                                }
                            )
                        if (zh
) {
                            x.a.style.left 
= l + 
'px';   
                        }   
					})
            }
        function you
(){
            let y 
= x.querySelectorAll
('div');
            let zh 
= true;
            kk.ss.forEach
(x
=>{		
                    let l 
= x.a.offsetLeft + 10
;
                    y.forEach
(
                            z
=>{
                                if (l
>350
) {
                                    zh
=false
;
                                }
                            }
                        )
                    if (zh
) {
                        x.a.style.left 
= l + 
'px';
                    }   
                })
        }
        function ting
(t
) {
                if (t
) {
                    clearInterval
(kk.s
)
                    ti
=!t
                
}
                else {
                    kk.run
()
                    ti
=!t
                
}
            }
        function suiji
() {
            let r 
= Math.floor
(Math.random
()*19
);
            return new k
(shuzu
[r
])  
        }
		function n
() {
            kk 
= suiji
()
            kk.run
();
        }
        n
();
        x.addEventListener
('stop',n,false
)
		function zn
() {
			kk.zhuann
();
        }
        function zs
() {
			kk.zhuans
();
		}
		function dd
(a
) {
			if
(a
){
				kk.runs
();
				m
=!a
			
}
			else
{
				clearInterval
(kk.s
)
				m
=!a
			
}
		}
    </script
>
</body
>