Heim > Web-Frontend > H5-Tutorial > Hauptteil

Tipps zur Verwendung des H5-Timers requestAnimationFrame

php中世界最好的语言
Freigeben: 2018-03-27 11:37:52
Original
3365 Leute haben es durchsucht

Dieses Mal gebe ich Ihnen Tipps zur Verwendung des TimersrequestAnimationFrame von H5 und zu den Vorsichtsmaßnahmen bei der Verwendung des H5-Timer-RequestAnimationFrame. Hier ist ein praktischer Fall, werfen wir einen Blick darauf.

Bevor requestAnimationFrame erschien, verwendeten wir im Allgemeinen setTimeout und setInterval. Warum hat HTML5 also einen neuen requestAnimationFrame hinzugefügt?

Vorteile und Funktionen:

1) requestAnimationFrame konzentriert alle DOM-Operationen in jedem Frame. Es wird in abgeschlossen ein Neuzeichnen oder Umfließen, und das Zeitintervall des Neuzeichnens oder Umfließens folgt eng der Aktualisierungsfrequenz des Browsers

2) In versteckten oder unsichtbaren Elementen wird requestAnimationFrame nicht neu gezeichnet oder umfließen, was natürlich weniger CPU bedeutet, GPU- und Speichernutzung

3) requestAnimationFrame ist eine vom Browser speziell für Animationen bereitgestellte API. Der Browser optimiert den Methodenaufruf automatisch zur Laufzeit. Wenn die Seite nicht aktiv ist, wird die Animation automatisch angehalten CPU-Overhead sparen

In einem Satz: Dieses Ding hat eine hohe Leistung, friert den Bildschirm nicht ein und passt die Bildrate automatisch an verschiedene Browser an. Wenn Sie es nicht verstehen oder nicht verstehen, spielt es keine Rolle. Diese Sache hängt mit dem Browser-Rendering-Prinzip zusammen. Lassen Sie uns zuerst lernen, es zu verwenden!

Wie verwende ich requestAnimationFrame?

wird ähnlich wie der Timer setTimeout verwendet. Der Unterschied besteht darin, dass der Zeitintervallparameter nicht festgelegt werden muss.

     var timer = requestAnimationFrame( function(){
            console.log( '定时器代码' );
        } );
Nach dem Login kopieren

Der Parameter ist eine Callback-Funktion , und der Rückgabewert ist eine Ganzzahl, die verwendet wird, um die Nummer des Timers darzustellen.

<!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>
Nach dem Login kopieren

cancelAnimationFrame wird zum Schließen des Timers verwendet.

Diese Methode muss die Kompatibilität verarbeiten:

Einfache Kompatibilität:

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

Wenn der Browser AnimationFrame nicht erkennt, verwenden Sie setTimeout aus Kompatibilitätsgründen.

Verwenden Sie 3 verschiedene Timer (setTimeout, setInterval, requestAnimationFrame), um das Laden eines zu implementieren Fortschrittsbalken

1. setInterval-Methode:

<!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>
        p{
            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( "p" ),
                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>
    <p>0%</p>
    <p><input type="button" value="ready!Go"></p>
</body>
</html>
Nach dem Login kopieren

2. setTimeout-Methode

<script>
        window.onload = function(){
            var oBtn = document.querySelector( "input" ),
                oBox = document.querySelector( "p" ),
                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>
Nach dem Login kopieren

3. requestAnimationFrame-Methode

 <!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>
        p{
            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( "p" ),
                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>
    <p>0%</p>
    <p><input type="button" value="ready!Go"></p>
</body>
</html>
Nach dem Login kopieren
Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben, achten Sie bitte auf andere Verwandte Artikel auf der chinesischen PHP-Website!

Empfohlene Lektüre:

Ausführliche Erklärung von Drag & Drop in H5

Verwenden von Canvas, um den Sperreffekt in Videos zu erzielen

Das obige ist der detaillierte Inhalt vonTipps zur Verwendung des H5-Timers requestAnimationFrame. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage