亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > HTML > 正文

html5新增的定時器requestAnimationFrame實現進度條功能

2024-08-26 00:20:01
字體:
來源:轉載
供稿:網友

在requestAnimationFrame出現之前,我們一般都用setTimeout和setInterval,那么html5為什么新增一個requestAnimationFrame,他的出現是為了解決什么問題?

優勢與特點:

1)requestAnimationFrame會把每一幀中的所有DOM操作集中起來,在一次重繪或回流中就完成,并且重繪或回流的時間間隔緊緊跟隨瀏覽器的刷新頻率

2)在隱藏或不可見的元素中,requestAnimationFrame將不會進行重繪或回流,這當然就意味著更少的CPU、GPU和內存使用量

3)requestAnimationFrame是由瀏覽器專門為動畫提供的API,在運行時瀏覽器會自動優化方法的調用,并且如果頁面不是激活狀態下的話,動畫會自動暫停,有效節省了CPU開銷

一句話就是:這玩意性能高,不會卡屏,根據不同的瀏覽器自動調整幀率。如果看不懂或者不理解,也沒有什么關系,這玩意跟瀏覽器渲染原理有關。我們先學會使用它!

如何使用requestAnimationFrame?

使用方式跟定時器setTimeout差不多,不同之處在于,他不需要設置時間間隔參數

     var timer = requestAnimationFrame( function(){            console.log( '定時器代碼' );        } );

參數是一個回調函數,返回值是一個整數,用來表示定時器的編號.

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <meta http-equiv="X-UA-Compatible" content="ie=edge">    <title>Document</title>    <script>        window.onload = function(){            var aInput = document.querySelectorAll( "input" ),                timer = null;            aInput[0].onclick = function(){                timer = requestAnimationFrame( function say(){                    console.log( 1 );                    timer = requestAnimationFrame( say );                } );            };            aInput[1].onclick = function(){                cancelAnimationFrame( timer );            }        }    </script></head><body>    <input type="button" value="開啟">    <input type="button" value="關閉"></body></html>

cancelAnimationFrame用來關閉定時器

這個方法需要處理兼容:

 簡單的兼容:

 window.requestAnimFrame = (function(){  return  window.requestAnimationFrame       ||          window.webkitRequestAnimationFrame ||          window.mozRequestAnimationFrame    ||          function( callback ){            window.setTimeout(callback, 1000 / 60);          };})();

如果瀏覽器都不認識AnimationFrame,就用setTimeout兼容.

運用3種不同的定時器(setTimeout, setInterval, requestAnimationFrame)實現一個進度條的加載

一、setInterval方式:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <meta http-equiv="X-UA-Compatible" content="ie=edge">    <title>Document</title>    <style>        div{            width:0px;            height:40px;            border-radius:20px;            background:#09f;            text-align:center;            font:bold 30px/40px '微軟雅黑';            color:white;        }    </style>    <script>        window.onload = function(){            var oBtn = document.querySelector( "input" ),                oBox = document.querySelector( "div" ),                timer = null, curWidth = 0,                getStyle = function( obj, name, value ){                    if( obj.currentStyle ) {                        return obj.currentStyle[name];                    }else {                        return getComputedStyle( obj, false )[name];                    }                };            oBtn.onclick = function(){                clearInterval( timer );                oBox.style.width = '0';                timer = setInterval( function(){                    curWidth = parseInt( getStyle( oBox, 'width' ) );                    if ( curWidth < 1000 ) {                        oBox.style.width = oBox.offsetWidth + 10 + 'px';                        oBox.innerHTML = parseInt( getStyle( oBox, 'width' ) ) / 10 + '%';                    }else {                        clearInterval( timer );                    }                }, 1000 / 60 );            }        }    </script></head><body>    <div>0%</div>    <p><input type="button" value="ready!Go"></p></body></html>

html5,requestAnimationFrame,進度條

二、setTimeout方式

<script>        window.onload = function(){            var oBtn = document.querySelector( "input" ),                oBox = document.querySelector( "div" ),                timer = null, curWidth = 0,                getStyle = function( obj, name, value ){                    if( obj.currentStyle ) {                        return obj.currentStyle[name];                    }else {                        return getComputedStyle( obj, false )[name];                    }                };            oBtn.onclick = function(){                clearTimeout( timer );                oBox.style.width = '0';                timer = setTimeout( function go(){                    curWidth = parseInt( getStyle( oBox, 'width' ) );                    if ( curWidth < 1000 ) {                        oBox.style.width = oBox.offsetWidth + 10 + 'px';                        oBox.innerHTML = parseInt( getStyle( oBox, 'width' ) ) / 10 + '%';                        timer = setTimeout( go, 1000 / 60 );                    }else {                        clearInterval( timer );                    }                }, 1000 / 60 );            }        }    </script>

    三、requestAnimationFrame方式   

 <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <meta http-equiv="X-UA-Compatible" content="ie=edge">    <title>Document</title>    <style>        div{            width:0px;            height:40px;            border-radius:20px;            background:#09f;            text-align:center;            font:bold 30px/40px '微軟雅黑';            color:white;        }    </style>    <script>        window.onload = function(){            var oBtn = document.querySelector( "input" ),                oBox = document.querySelector( "div" ),                timer = null, curWidth = 0,                getStyle = function( obj, name, value ){                    if( obj.currentStyle ) {                        return obj.currentStyle[name];                    }else {                        return getComputedStyle( obj, false )[name];                    }                };            oBtn.onclick = function(){                cancelAnimationFrame( timer );                oBox.style.width = '0';                timer = requestAnimationFrame( function go(){                    curWidth = parseInt( getStyle( oBox, 'width' ) );                    if ( curWidth < 1000 ) {                        oBox.style.width = oBox.offsetWidth + 10 + 'px';                        oBox.innerHTML = parseInt( getStyle( oBox, 'width' ) ) / 10 + '%';                        timer = requestAnimationFrame( go );                    }else {                        cancelAnimationFrame( timer );                    }                } );            }        }    </script></head><body>    <div>0%</div>    <p><input type="button" value="ready!Go"></p></body></html>

 


注:相關教程知識閱讀請移步到HTML教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人午夜两性视频| 91精品国产高清自在线看超| 最好看的2019的中文字幕视频| 国产精品扒开腿做| 久久精品国产96久久久香蕉| 人人澡人人澡人人看欧美| 国产精品情侣自拍| 欧美激情视频一区二区三区不卡| 欧美影院在线播放| 亚洲国产成人在线播放| 奇门遁甲1982国语版免费观看高清| 欧日韩不卡在线视频| 久久久久久综合网天天| 日韩精品免费在线视频观看| 91国内精品久久| 日韩在线精品一区| 色先锋资源久久综合5566| 性欧美办公室18xxxxhd| 狠狠综合久久av一区二区小说| 国产精品国产自产拍高清av水多| 日韩www在线| 97香蕉超级碰碰久久免费的优势| 欧美黑人巨大精品一区二区| 性色av一区二区三区红粉影视| 欧美日韩国产一区二区三区| 成人深夜直播免费观看| 欧美性在线视频| 日韩毛片在线观看| 国产精品视频免费观看www| 国产精品专区h在线观看| 日本精品视频网站| 91精品久久久久久综合乱菊| 96精品久久久久中文字幕| 一区二区三区国产在线观看| 中文字幕av一区| 国产999视频| 国产精品视频久久久| 蜜臀久久99精品久久久无需会员| 日本精品视频网站| 国产噜噜噜噜久久久久久久久| 亚洲电影免费观看高清完整版在线| 色偷偷88888欧美精品久久久| 日韩成人在线电影网| 国产成人福利网站| 欧美老少做受xxxx高潮| 欧美性猛交99久久久久99按摩| 国产精品久久久久秋霞鲁丝| 揄拍成人国产精品视频| 狠狠操狠狠色综合网| 亚洲开心激情网| 成人免费视频xnxx.com| 欧美精品电影免费在线观看| 亚洲精品久久在线| 亚洲人av在线影院| 久久久久久久久国产精品| 91久久在线播放| 成人性生交大片免费观看嘿嘿视频| 亚洲视频一区二区三区| 日本精品久久电影| 国内精品国产三级国产在线专| 久久中文精品视频| 亚洲女人被黑人巨大进入| 91高潮在线观看| 性欧美亚洲xxxx乳在线观看| 欧美午夜xxx| 丝袜美腿亚洲一区二区| 中文字幕久久精品| 久久久亚洲影院你懂的| 久久免费视频这里只有精品| 91精品在线国产| 欧美有码在线观看视频| 性亚洲最疯狂xxxx高清| 日韩中文字幕网站| 亚洲 日韩 国产第一| 97超级碰在线看视频免费在线看| 国产精品日日摸夜夜添夜夜av| 在线观看欧美日韩国产| 久久在精品线影院精品国产| 日韩亚洲一区二区| 亚洲人精品午夜在线观看| 欧美国产在线视频| 亚洲香蕉成视频在线观看| 这里只有精品在线观看| 日韩欧美极品在线观看| 69久久夜色精品国产69| 一个人看的www欧美| 伊人一区二区三区久久精品| 成人免费福利在线| 日本a级片电影一区二区| 欧洲精品毛片网站| 国产成人免费av电影| 欧美另类极品videosbestfree| 亚洲欧洲自拍偷拍| 清纯唯美亚洲综合| 午夜精品久久久久久久久久久久久| www.日韩av.com| 亚洲天堂免费视频| 97视频国产在线| 欧美视频在线观看免费| 日韩欧美精品免费在线| 亚洲视频网站在线观看| 亚洲第一精品久久忘忧草社区| 中文字幕在线观看日韩| 日韩有码在线观看| 奇米四色中文综合久久| 久久中文字幕在线| 在线观看成人黄色| 国产精品欧美激情在线播放| 中文字幕亚洲欧美一区二区三区| 久久久国产精彩视频美女艺术照福利| 亚洲国产天堂久久综合网| 91av视频导航| 琪琪亚洲精品午夜在线| 伊人久久免费视频| 久久久久一本一区二区青青蜜月| 午夜精品久久久久久久男人的天堂| 韩国三级日本三级少妇99| 欧美日韩一区二区三区在线免费观看| 久久精品国产清自在天天线| 国产成人精彩在线视频九色| 国产欧美精品一区二区三区-老狼| 2019最新中文字幕| 国产激情久久久| 成人免费黄色网| 精品国产福利视频| 亚洲成成品网站| 中文国产成人精品久久一| 91精品国产综合久久久久久久久| 国产午夜精品视频免费不卡69堂| 久久久国产影院| 成人网在线免费看| 538国产精品视频一区二区| 黑人巨大精品欧美一区二区三区| 欧美成人国产va精品日本一级| 久久99国产精品自在自在app| 国产黑人绿帽在线第一区| 精品无人国产偷自产在线| 亚洲欧美中文日韩v在线观看| 91久久精品国产91性色| 日韩精品在线免费| 欧美国产日韩在线| 国产精品精品视频一区二区三区| 欧美精品18videosex性欧美| 亚洲激情视频网站| 欧美激情影音先锋| 国产成人av网| 97免费中文视频在线观看| 国产精品久久久久99| 欧美日韩aaaa| 成人久久精品视频| 日韩在线资源网| 精品小视频在线| 日韩视频免费在线| 亚洲精品www久久久久久广东| 日本精品免费观看| 亚洲无限乱码一二三四麻| 91在线观看免费网站| 在线视频欧美性高潮| 欧美性猛交xxxx免费看漫画| 成人有码视频在线播放| 久久久91精品国产一区不卡| 国产99视频在线观看| 亚洲成人精品视频在线观看| 色综合久久久久久中文网|