Inhaltsverzeichnis
Schauen wir uns zunächst an, wie Sie die einfachste Barrage über CSS implementieren:
Lassen Sie uns zunächst den CSS-Rendering-Prozess klären
Verwenden Sie CSS, um die Hardwarebeschleunigung im Browser zu aktivieren, und verwenden Sie GPU (Graphics Processing Unit), um die Webseitenleistung zu verbessern. Vor diesem Hintergrund können wir die Leistung der GPU nutzen, um die Leistung unserer Website oder Anwendung zu verbessern.
Die zweite Methode besteht darin, einen Weg zu finden, den Wert des linken Attributs vor und nach der Sperranimation nicht zu ändern, sodass kein Reflow erfolgt geschehen.
3. canvas实现弹幕" >3. canvas实现弹幕
4. canva弹幕的扩展功能
Heim Web-Frontend H5-Tutorial Zusammenfassung der Methoden zur Erzielung eines Sperreffekts (CSS und Canvas)

Zusammenfassung der Methoden zur Erzielung eines Sperreffekts (CSS und Canvas)

Jul 25, 2018 pm 12:38 PM
canvas css css3动画

Dieser Artikel stellt hauptsächlich eine Zusammenfassung der Methoden zur Erzielung des Sperreffekts vor. Er hat einen gewissen Referenzwert. Jetzt können Freunde in Not darauf verweisen >Zuvor veröffentlicht in a Auf der Lotterieseite auf dem mobilen Endgerät muss das Anzeigefenster der Lotterieergebnisse in einem Sperrkarussell angezeigt werden. Ich habe bereits einige Fallstricke durchgemacht, und jetzt werde ich zusammenfassen, wie das Frontend erreicht wird Sperrwirkung.

CSS3 implementiert die Beggar-Version von Barrage

CSS3-Barrage-Leistungsoptimierung

Canvas implementiert Barrage

Erweiterte Funktionen von Canvas Barrage

1. Implementieren Sie die Bettlerversion von Barrage mit CSS3

(1) So implementieren Sie Barrage über CSS3

Schauen wir uns zunächst an, wie Sie die einfachste Barrage über CSS implementieren:

Definieren Sie zunächst die Dom-Struktur eines Barrages in HTML:

<p>我是弹幕</p>
Nach dem Login kopieren

Die Bewegung des Barrages kann durch Verschieben dieses Blocks erreicht werden, sodass sich das Barrage von rechts nach links bewegt. Zum Beispiel die Initiale Die Position der Sperre befindet sich auf der äußersten linken Seite des Containers und die Kante ist verdeckt (die äußerste linke Seite der Sperre passt auf die äußerste rechte Seite des Containers. Dies kann durch absolute Positionierung und Transformation erreicht werden:

.block{
   position:absolute;
}
Nach dem Login kopieren

Anfangsposition:

from{
    left:100%;
    transform:translateX(0)
}
Nach dem Login kopieren

Die Endposition, wenn sie ganz nach links verschoben wird, ist (die äußerste rechte Seite des Staudamms passt auf die äußerste linke Seite des Containers):

to{
   left:0;
   transform:translateX(-100%)
}
Nach dem Login kopieren

Die spezifischen Abbildungen der Startposition und Endposition sind wie folgt dargestellt:

Zusammenfassung der Methoden zur Erzielung eines Sperreffekts (CSS und Canvas)Eine vollständige Zwei-Frame-Sperrfeueranimation kann basierend auf der Startposition und Endposition definiert werden:

@keyframes barrage{
   from{
     left:100%;
     transform:translateX(0);
   }
   to{
     left:0;
     transform:translateX(-100%);
   }
}
Nach dem Login kopieren

Gib die Bombe Das Bildschirmelement leitet diese Animation ein:

.block{
  position:absolute;
  /* other decorate style */
  animation:barrage 5s linear 0s;
}
Nach dem Login kopieren

Auf diese Weise können Sie eine Bettlerversion des Sperreffekts erzielen:

Zusammenfassung der Methoden zur Erzielung eines Sperreffekts (CSS und Canvas)(2) Bestandene Mängel der absoluten Positionierung und des linken Sperrfeuers

Lassen Sie uns zunächst den CSS-Rendering-Prozess klären

    I) Generieren Sie ein DOM Baum basierend auf der Struktur von HTML (der DOM-Baum enthält den Knoten display :none)
  • II) Generieren Sie basierend auf dem DOM-Baum einen Renderbaum gemäß den geometrischen Attributen des Knotens ( Rand/Abstand/Breite/Höhe/links usw.)
  • III) Rendern Sie weiterhin Attribute wie Farbe und Schriftart basierend auf dem Renderbaum
  • Was passiert, wenn sich die Attribute in I) und II) beim Reflow (Reflow) ändern? Wenn sich nur die Eigenschaften in III) ändern, erfolgt nur ein Neuzeichnen (Neuzeichnen). Natürlich können wir auch am CSS-Rendering-Prozess erkennen: Reflow muss mit Neuzeichnen einhergehen.

Reflow (Reflow): Wenn sich ein Teil oder der gesamte Renderbaum aufgrund von Größe, Rand usw. ändert, wird der Prozess, der neu erstellt werden muss, als Reflow bezeichnet.

Repaint (Neuzeichnen): Wenn einige Attribute Wenn sich das Element ändert, führt die Hintergrundfarbe des Erscheinungsbilds nicht zu Layoutänderungen und muss erneut gerendert werden. Dies wird als Neuzeichnen bezeichnet.


Reflow (Reflow) wirkt sich auf die Rendering-Geschwindigkeit des Browser-CSS aus, also bei der Optimierung Um die Leistung einer Webseite zu verbessern, ist es notwendig, das Auftreten von Reflows zu reduzieren.

Im ersten Abschnitt haben wir das linke Attribut verwendet, um den Effekt von Barrage Left zu erzielen. Dadurch wird das Layout des Elements geändert, sodass ein Reflow auftritt, der dazu führt, dass die Barrage-Animation auf der mobilen Seite hängen bleibt .

2. CSS3-Sperrleistungsoptimierung

Wir haben herausgefunden, dass die Sperranimation im ersten Abschnitt ein Problem hat und blieb stehen.

(1) Aktivieren Sie die Hardwarebeschleunigung für CSS

Verwenden Sie CSS, um die Hardwarebeschleunigung im Browser zu aktivieren, und verwenden Sie GPU (Graphics Processing Unit), um die Webseitenleistung zu verbessern. Vor diesem Hintergrund können wir die Leistung der GPU nutzen, um die Leistung unserer Website oder Anwendung zu verbessern.

CSS-Animationen, Transformationen und Übergänge aktivieren nicht automatisch die GPU-Beschleunigung, sondern werden von der langsamen Software-Rendering-Engine des Browsers ausgeführt. Wie können wir also in den GPU-Modus wechseln? Viele Browser bieten bestimmte ausgelöste CSS-Regeln.

Der üblichere Weg ist, dass wir die Hardwarebeschleunigung durch 3D-Änderungen aktivieren können (translate3d-Attribut). In Anbetracht dessen ändern wir die Animation wie folgt:

@keyframes barrage{
   from{
     left:100%;
     transform:translate3d(0,0,0);
   }
   to{
     left:0;
     transform:translate3d(-100%,0,0);
   }
}
Nach dem Login kopieren

Auf diese Weise können wir Aktivieren Sie die Hardwarebeschleunigung und optimieren Sie die Webseitenleistung. Diese Methode löst das Problem jedoch nicht grundsätzlich. Gleichzeitig erhöht die Verwendung der GPU die Speichernutzung, was die Akkulaufzeit des Mobilgeräts verkürzt und so weiter.

(2) Das linke Attribut nicht ändern

Die zweite Methode besteht darin, einen Weg zu finden, den Wert des linken Attributs vor und nach der Sperranimation nicht zu ändern, sodass kein Reflow erfolgt geschehen.

Wir wollen die Anfangsposition des Barrage-Knotens nur über TranslateX bestimmen, aber TranslateX(-100%) ist relativ zum Barrage-Knoten selbst, nicht zum übergeordneten Element, also koppeln wir js und css, Get Geben Sie die Breite des übergeordneten Elements an, in dem sich der Sperrknoten in js befindet, und definieren Sie dann die Anfangsposition des Sperrknotens basierend auf der Breite.

Nehmen Sie als Beispiel das übergeordnete Element als Körper:

//css
 .block{
  position:absolute;
  left:0;
  visibility:hidden;
  /* other decorate style */
  animation:barrage 5s linear 0s;
}
//js
let style = document.createElement('style');
document.head.appendChild(style);
let width = window.innerWidth;
let from = `from { visibility: visible; -webkit-transform: translateX(${width}px); }`;
let to = `to { visibility: visible; -webkit-transform: translateX(-100%); }`;
style.sheet.insertRule(`@-webkit-keyframes barrage { ${from} ${to} }`, 0);
Nach dem Login kopieren

Zusätzlich zur Kopplung von js wird die Breite des übergeordneten Elements berechnet, um die Anfangsposition des Sperrknotens zu bestimmen, hier im Staudamm Knoten wir Um zu verhindern, dass die Anfangsposition angezeigt wird, wird das Attribut „visibility:hidden“ hinzugefügt. Verhindern Sie, dass Sperrknoten im übergeordneten Container angezeigt werden, bevor die Anfangsposition bestimmt wird. Das Sperrfeuer wird erst sichtbar, wenn es von seiner Ausgangsposition aus zu scrollen beginnt.

但是这种css的实现方式,在实现弹幕的扩展功能方面比较麻烦,比如如何控制弹幕暂停等等。

3. canvas实现弹幕

除了通过css实现弹幕的方法之外,通过canvas也可以实现弹幕。

通过canvas实现弹幕的原理就是时时的重绘文字,下面来一步步的实现。

  • 获取画布

    let canvas = document.getElementById('canvas');
      let ctx = canvas.getContext('2d');

  • 绘制文字

ctx.font = '20px Microsoft YaHei';          
ctx.fillStyle = '#000000';                
ctx.fillText('canvas 绘制文字', x, y);

上面的fillText就是实现弹幕效果的主要api,其中x表示横方向的坐标,y表示纵方向的坐标,只要时时的改变x,y进行重绘,就可以实现动态的弹幕效果。
Nach dem Login kopieren
  • 清除绘制内容

    ctx.clearRect(0, 0, width, height);

  • 具体实现

通过定时器,定时改变x,y,每次改变之前先进性清屏,然后根据改变后的x,y进行重绘。当存在多条弹幕的情况下,定义:

let colorArr=_this.getColor(color);  弹幕数组多对应的颜色数组
let numArrL=_this.getLeft();  弹幕数组所对应的x坐标位置数组
let numArrT=_this.getTop();  弹幕数组所对应的y坐标位置数组
let speedArr=_this.getSpeed(); 弹幕数组所对应的弹幕移动速度数组
Nach dem Login kopieren

定时的重绘弹幕函数为:

_this.timer=setInterval(function(){
    ctx.clearRect(0,0,canvas.width,canvas.height);
    ctx.save();
    for(let j=0;j<barragelist.length><p>实现的效果为:</p>
<p><span class="img-wrap"><img src="/static/imghw/default1.png" data-src="https://img.php.cn//upload/image/655/667/209/1532493329346452.gif" class="lazy" title="1532493329346452.gif" alt="Zusammenfassung der Methoden zur Erzielung eines Sperreffekts (CSS und Canvas)"></span></p>
<h2 id="canva弹幕的扩展功能">4. canva弹幕的扩展功能</h2>
<p>通过canvas实现弹幕的方式,很方便做比如暂停弹幕滚动等扩展功能,此外,也可以给弹幕增加头像,给每条弹幕增加边框等等功能,以后再补充。</p>
<p>相关推荐:</p>
<p><a href="http://www.php.cn/html5-tutorial-406922.html" target="_blank" title="H5微信支付之引入微信的js-sdk包失败的解决方法">H5微信支付之引入微信的js-sdk包失败的解决方法</a></p>
<p><a href="http://www.php.cn/html5-tutorial-406614.html" target="_blank" title="使用h5 canvas实现时钟的动态效果">使用h5 canvas实现时钟的动态效果</a></p>
<div></div></barragelist.length>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonZusammenfassung der Methoden zur Erzielung eines Sperreffekts (CSS und Canvas). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So verwenden Sie Bootstrap in Vue So verwenden Sie Bootstrap in Vue Apr 07, 2025 pm 11:33 PM

Die Verwendung von Bootstrap in Vue.js ist in fünf Schritte unterteilt: Startstrap installieren. Bootstrap in main.js. Verwenden Sie die Bootstrap -Komponente direkt in der Vorlage. Optional: benutzerdefinierter Stil. Optional: Verwenden Sie Plug-Ins.

Die Rollen von HTML, CSS und JavaScript: Kernverantwortung Die Rollen von HTML, CSS und JavaScript: Kernverantwortung Apr 08, 2025 pm 07:05 PM

HTML definiert die Webstruktur, CSS ist für Stil und Layout verantwortlich, und JavaScript ergibt eine dynamische Interaktion. Die drei erfüllen ihre Aufgaben in der Webentwicklung und erstellen gemeinsam eine farbenfrohe Website.

So schreiben Sie geteilte Zeilen auf Bootstrap So schreiben Sie geteilte Zeilen auf Bootstrap Apr 07, 2025 pm 03:12 PM

Es gibt zwei Möglichkeiten, eine Bootstrap -Split -Zeile zu erstellen: Verwenden des Tags, das eine horizontale Split -Linie erstellt. Verwenden Sie die CSS -Border -Eigenschaft, um benutzerdefinierte Style Split -Linien zu erstellen.

HTML, CSS und JavaScript verstehen: Ein Anfängerhandbuch HTML, CSS und JavaScript verstehen: Ein Anfängerhandbuch Apr 12, 2025 am 12:02 AM

WebdevelopmentRelieSonHtml, CSS und JavaScript: 1) HtmlStructuresContent, 2) CSSstylesit und 3) JavaScriptaddssinteraktivität, Bildung von TheBasisofModerernwebexperiences.

So ändern Sie Bootstrap So ändern Sie Bootstrap Apr 07, 2025 pm 03:18 PM

Um die Größe der Elemente in Bootstrap anzupassen, können Sie die Dimensionsklasse verwenden, einschließlich: Einstellbreite:.

So fügen Sie Bilder auf Bootstrap ein So fügen Sie Bilder auf Bootstrap ein Apr 07, 2025 pm 03:30 PM

Es gibt verschiedene Möglichkeiten, Bilder in Bootstrap einzufügen: Bilder direkt mit dem HTML -IMG -Tag einfügen. Mit der Bootstrap -Bildkomponente können Sie reaktionsschnelle Bilder und weitere Stile bereitstellen. Legen Sie die Bildgröße fest und verwenden Sie die IMG-Fluid-Klasse, um das Bild anpassungsfähig zu machen. Stellen Sie den Rand mit der img-beliebten Klasse ein. Stellen Sie die abgerundeten Ecken ein und verwenden Sie die IMG-Rund-Klasse. Setzen Sie den Schatten, verwenden Sie die Schattenklasse. Größen Sie die Größe und positionieren Sie das Bild im CSS -Stil. Verwenden Sie mit dem Hintergrundbild die CSS-Eigenschaft im Hintergrund.

So verwenden Sie die Bootstrap -Taste So verwenden Sie die Bootstrap -Taste Apr 07, 2025 pm 03:09 PM

Wie benutze ich die Bootstrap -Taste? Führen Sie Bootstrap -CSS ein, um Schaltflächenelemente zu erstellen, und fügen Sie die Schaltfläche "Bootstrap" hinzu, um Schaltflächentext hinzuzufügen

So richten Sie das Framework für Bootstrap ein So richten Sie das Framework für Bootstrap ein Apr 07, 2025 pm 03:27 PM

Um das Bootstrap -Framework einzurichten, müssen Sie die folgenden Schritte befolgen: 1. Verweisen Sie die Bootstrap -Datei über CDN; 2. Laden Sie die Datei auf Ihrem eigenen Server herunter und hosten Sie sie. 3.. Fügen Sie die Bootstrap -Datei in HTML hinzu; 4. Kompilieren Sie Sass/weniger bei Bedarf; 5. Importieren Sie eine benutzerdefinierte Datei (optional). Sobald die Einrichtung abgeschlossen ist, können Sie die Grid -Systeme, -Komponenten und -stile von Bootstrap verwenden, um reaktionsschnelle Websites und Anwendungen zu erstellen.

See all articles