加载效果
代码
<! DOCTYPE html >
< html lang = " en" > < head> < meta charset = " UTF-8" > < meta name = " viewport" content = " width=device-width, initial-scale=1.0" > < title> 加载效果</ title> < link rel = " stylesheet" href = " https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" integrity = " sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin = " anonymous" > < script src = " https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js" integrity = " sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin = " anonymous" > </ script> < style> * { margin : 0; padding : 0; } body { background : #2980b9; } .loading { height : 40px; position : absolute; top : 50%; left : 50%; display : flex; transform : translate ( -50%, -50%) ; align-items : center; } .object { width : 6px; height : 40px; background : white; margin : 0 3px; border-radius : 10px; animation : loading 0.8s infinite; animation-play-state : paused; } .xyBtn { position : absolute; top : 60%; left : 50%; transform : translate ( -40%, -50%) ; } .object:nth-child(2) { animation-delay : 0.1s; } .object:nth-child(3) { animation-delay : 0.2s; } .object:nth-child(4) { animation-delay : 0.3s; } .object:nth-child(5) { animation-delay : 0.4s; } .object:nth-child(6) { animation-delay : 0.5s; } .object:nth-child(7) { animation-delay : 0.6s; } .object:nth-child(8) { animation-delay : 0.7s; } @keyframes loading { 0% { height : 0; } 50% { height : 40px; } 100% { height : 0; } } .animate { animation-play-state : running; } .paused { animation-play-state : paused; } </ style>
</ head> < body> < div class = " loading" > < div class = " object" > </ div> < div class = " object" > </ div> < div class = " object" > </ div> < div class = " object" > </ div> < div class = " object" > </ div> < div class = " object" > </ div> < div class = " object" > </ div> < div class = " object" > </ div> </ div> < button type = " button" class = " btn btn-info xyBtn" id = " toggleButton" > 开始动画</ button> < script> var toggleButton = document. getElementById ( "toggleButton" ) ; var objectElements = document. getElementsByClassName ( "object" ) ; var animationState = false ; toggleButton. addEventListener ( "click" , function ( ) { animationState = ! animationState; if ( animationState) { for ( var i = 0 ; i < objectElements. length; i++ ) { objectElements[ i] . classList. add ( "animate" ) ; objectElements[ i] . classList. remove ( "paused" ) ; } toggleButton. textContent = "暂停动画" ; } else { for ( var i = 0 ; i < objectElements. length; i++ ) { objectElements[ i] . classList. add ( "paused" ) ; objectElements[ i] . classList. remove ( "animate" ) ; } toggleButton. textContent = "开始动画" ; } } ) ; </ script>
</ body> </ html>
创意视频球特效
代码
<! DOCTYPE html >
< html lang = " en" > < head> < meta charset = " UTF-8" > < meta name = " viewport" content = " width=device-width, initial-scale=1.0" > < title> 创意视频球特效</ title> < style> * { margin : 0; padding : 0; } body { overflow : hidden; } section { position : absolute; top : -100px; left : -100px; right : -100px; bottom : -100px; display : flex; justify-content : center; align-items : center; } section video { position : absolute; top : 0; left : 0; width : 100%; height : 100%; object-fit : cover; filter : blur ( 35px) ; } section .sphere { position : relative; width : 600px; height : 600px; border-radius : 50%; z-index : 10; } section .sphere::before { content : "" ; position : absolute; top : 0; left : 0; width : 100%; height : 100%; z-index : 100; border-radius : 50%; box-shadow : inset 0 100px 100px rgba ( 255, 255, 255, 0.5) , inset 0 -100px 100px rgba ( 0, 0, 0, 1) , inset 0 0 100px rgba ( 0, 0, 0, 1) ; } section .sphere::after { content : "" ; position : absolute; top : 550px; left : -50px; width : 700px; height : 100px; z-index : -1; border-radius : 50%; background : black; background : radial-gradient ( black, transparent, transparent) ; } section .sphere video { width : 100%; height : 100%; position : absolute; top : 0; left : 0; object-fit : cover; border-radius : 50%; filter : blur ( 0) ; } section .controls { position : absolute; bottom : 100px; left : 50%; transform : translateX ( -50%) ; display : flex; align-items : center; } section .controls button { background : none; border : none; outline : none; cursor : pointer; color : white; font-size : 20px; margin-right : 10px; font-family : 'Times New Roman' , Times, serif; } section .controls input[type="range"] { width : 800px; margin-right : 10px; } section .controls span { color : white; font-size : 18px; font-family : 'Times New Roman' , Times, serif; } </ style>
</ head> < body> < section> < video id = " backgroundVideo" src = " ../Videos/1-“挑 战 B 站 画 质 上 限”-4K 超清-AVC.mp4" > </ video> < div class = " sphere" > < video id = " sphereVideo" src = " ../Videos/1-“挑 战 B 站 画 质 上 限”-4K 超清-AVC.mp4" > </ video> </ div> < div class = " controls" > < button id = " playPauseButton" > 播放</ button> < input type = " range" id = " progressBar" min = " 0" step = " 0.001" > < span id = " currentTime" > 00:00</ span> < span> /</ span> < span id = " duration" > 00:00</ span> </ div> </ section> < script> document. addEventListener ( "DOMContentLoaded" , function ( ) { var backgroundVideo = document. getElementById ( "backgroundVideo" ) ; var sphereVideo = document. getElementById ( "sphereVideo" ) ; var playPauseButton = document. getElementById ( "playPauseButton" ) ; var progressBar = document. getElementById ( "progressBar" ) ; var currentTime = document. getElementById ( "currentTime" ) ; var duration = document. getElementById ( "duration" ) ; backgroundVideo. pause ( ) ; sphereVideo. pause ( ) ; progressBar. value = 0 ; playPauseButton. addEventListener ( "click" , function ( ) { if ( backgroundVideo. paused) { backgroundVideo. play ( ) ; sphereVideo. play ( ) ; playPauseButton. textContent = "暂停" ; } else { backgroundVideo. pause ( ) ; sphereVideo. pause ( ) ; playPauseButton. textContent = "播放" ; } } ) ; backgroundVideo. addEventListener ( "timeupdate" , function ( ) { var progress = ( backgroundVideo. currentTime / backgroundVideo. duration) * 100 ; progressBar. value = progress; currentTime. textContent = formatTime ( backgroundVideo. currentTime) ; } ) ; progressBar. addEventListener ( "input" , function ( ) { var progressTime = ( progressBar. value / 100 ) * backgroundVideo. duration; backgroundVideo. currentTime = progressTime; sphereVideo. currentTime = progressTime; currentTime. textContent = formatTime ( progressTime) ; } ) ; function formatTime ( time ) { var minutes = Math. floor ( time / 60 ) ; var seconds = Math. floor ( time % 60 ) ; return ( minutes < 10 ? "0" : "" ) + minutes + ":" + ( seconds < 10 ? "0" : "" ) + seconds; } backgroundVideo. addEventListener ( "loadedmetadata" , function ( ) { duration. textContent = formatTime ( backgroundVideo. duration) ; } ) ; backgroundVideo. addEventListener ( "ended" , function ( ) { playPauseButton. textContent = "播放" ; progressBar. value = 0 ; currentTime. textContent = "00:00" ; } ) ; } ) ; </ script>
</ body> </ html>