目次
1.css3にbeggar版の弾幕を実装" >1.css3にbeggar版の弾幕を実装
(1) 実装方法css3で連打
(2) 絶対配置と放置による弾幕実現の欠陥
CSS を使用してブラウザでハードウェア アクセラレーションをオンにし、GPU (グラフィックス プロセッシング ユニット) を使用して Web ページのパフォーマンスを向上させます。これを考慮すると、GPU のパワーを利用して、Web サイトやアプリケーションをよりスムーズに実行できます。
2 つ目の方法は、リフローが発生しないように、弾幕アニメーションの前後で left 属性の値を変更しない方法を見つけることです。
3. canvas实现弹幕" >3. canvas实现弹幕
4. canva弹幕的扩展功能
ホームページ ウェブフロントエンド H5 チュートリアル 弾幕効果を実現する方法まとめ(CSSとCanvas)

弾幕効果を実現する方法まとめ(CSSとCanvas)

Jul 25, 2018 pm 12:38 PM
canvas css css3アニメーション

この記事では主に弾幕効果を実現する方法(CSSとキャンバス)をまとめて紹介していますので、必要な方は参考にしてください

, 抽選結果の表示ウィンドウを弾幕カルーセルに表示する必要があります。ここで、フロントエンドの弾幕エフェクトを実現する方法をまとめます。

css3にbeggar版の弾幕を実装

css3の弾幕パフォーマンスの最適化

canvasに弾幕を実装

canvaの弾幕の拡張機能

1.css3にbeggar版の弾幕を実装

(1) 実装方法css3で連打

まず、CSS を介して最も単純な弾幕を実装する方法を見てみましょう:

最初に HTML で弾幕の dom 構造を定義します:

<p>我是弹幕</p>
ログイン後にコピー

弾幕の移動は、右から左に移動する弾幕を次のようにして、このブロックを移動することで実現できます。たとえば、弾幕の初期位置はコンテナの左端にあり、エッジに沿って隠されています (弾幕の左端がコンテナの右端に適合します)。これは絶対配置と変換実装によって実現できます。

.block{
   position:absolute;
}
ログイン後にコピー

初期位置:

from{
    left:100%;
    transform:translateX(0)
}
ログイン後にコピー

左端に移動する終了位置(弾幕の右端がコンテナの左端の位置に収まる):

to{
   left:0;
   transform:translateX(-100%)
}
ログイン後にコピー

開始位置と終了位置の具体的な図は以下のとおりです。以下のように:

弾幕効果を実現する方法まとめ(CSSとCanvas)

開始位置と終了位置に基づいて完全な 2 フレームの弾幕アニメーションを定義できます:

@keyframes barrage{
   from{
     left:100%;
     transform:translateX(0);
   }
   to{
     left:0;
     transform:translateX(-100%);
   }
}
ログイン後にコピー

このアニメーションを弾幕要素に導入します:

.block{
  position:absolute;
  /* other decorate style */
  animation:barrage 5s linear 0s;
}
ログイン後にコピー

このようにして、乞食バージョンが作成されます。弾幕効果の実現可能:

弾幕効果を実現する方法まとめ(CSSとCanvas)

(2) 絶対配置と放置による弾幕実現の欠陥

まず、CSS レンダリングのプロセスを明確にしましょう

  • I) 以下に従って DOM ツリーを生成しますHTML の構造 (DOM ツリーには display:none ノードが含まれます)

  • II) DOM ツリーに基づいて、ノードの幾何学的属性 (マージン/パディング/幅/高さ/左、等)

  • III) レンダーツリーに基づいて色やフォントなどの属性をレンダリングし続けます

I)とII)の属性が変更された場合、III)の属性のみが発生します。変更すると、再描画のみが発生します。明らかに、CSS レンダリング プロセスからもわかります。リフローには再描画が伴う必要があります。

リフロー (リフロー): サイズやマージンなどによりレンダー ツリーの一部または全体が変更される場合、再構築する必要があるプロセスはリフローと呼ばれます。
リペイント (再描画): 要素の一部の属性が変更される場合。レイアウトの変更が発生し、再描画が必要になる処理をリフロー(リフロー)と呼びますが、Web ページのパフォーマンスを最適化する場合は、この処理を減らす必要があります。リフローの。

最初のセクションでは、弾幕の効果を実現するために left 属性を使用しました。Left により要素のレイアウトが変更されるため、リフローが発生し、モバイル ページで弾幕アニメーションがフリーズします。

2. CSS3 弾幕パフォーマンスの最適化

最初のセクションの弾幕アニメーションにスタックの問題があることがわかりました。スタックしたアニメーションを解決する方法を見てみましょう。

(1) CSS でハードウェア アクセラレーションをオンにします

CSS を使用してブラウザでハードウェア アクセラレーションをオンにし、GPU (グラフィックス プロセッシング ユニット) を使用して Web ページのパフォーマンスを向上させます。これを考慮すると、GPU のパワーを利用して、Web サイトやアプリケーションをよりスムーズに実行できます。

CSS アニメーション、変換、トランジションは、GPU アクセラレーションを自動的にオンにしませんが、ブラウザーの遅いソフトウェア レンダリング エンジンによって実行されます。では、どうすれば GPU モードに切り替えることができるのでしょうか? 多くのブラウザは、特定のトリガーによる CSS ルールを提供しています。

より一般的な方法は、3D 変更 (translate3d 属性) を通じてハードウェア アクセラレーションをオンにすることです。これを考慮して、アニメーションを次のように変更します。

@keyframes barrage{
   from{
     left:100%;
     transform:translate3d(0,0,0);
   }
   to{
     left:0;
     transform:translate3d(-100%,0,0);
   }
}
ログイン後にコピー

このようにして、ハードウェアをオンにすることで Web ページのパフォーマンスを最適化できます。加速度。ただし、この方法では問題が根本的に解決されるわけではありません。同時に、GPU を使用するとメモリ使用量が増加し、モバイル デバイスなどのバッテリー寿命が短くなります。

(2) left 属性を変更しない

2 つ目の方法は、リフローが発生しないように、弾幕アニメーションの前後で left 属性の値を変更しない方法を見つけることです。

translateX のみを通じて弾幕ノードの初期位置を決定したいのですが、translateX(-100%) は親要素ではなく弾幕ノード自体に対して相対的であるため、js と css を組み合わせて js で取得します。弾幕ノードが配置されている親要素の幅を指定し、その幅に基づいて弾幕ノードの初期位置が定義されます。

親要素をボディとして例に挙げます:

//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);
ログイン後にコピー

jsを結合して親要素の幅を計算し、弾幕ノードの初期位置を決定することに加えて、ここで弾幕ノードでは初期位置がずれないようにする必要があります。表示されないようにする:hidden 属性を追加しました。初期位置が決定される前に、弾幕ノードが親コンテナに表示されないようにします。弾幕は、初期位置からスクロールを開始した場合にのみ表示されます。

但是这种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进行重绘,就可以实现动态的弹幕效果。
ログイン後にコピー
  • 清除绘制内容

    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(); 弹幕数组所对应的弹幕移动速度数组
ログイン後にコピー

定时的重绘弹幕函数为:

_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="弾幕効果を実現する方法まとめ(CSSと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>
ログイン後にコピー

以上が弾幕効果を実現する方法まとめ(CSSとCanvas)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

VueでBootstrapの使用方法 VueでBootstrapの使用方法 Apr 07, 2025 pm 11:33 PM

vue.jsでBootstrapを使用すると、5つのステップに分かれています。ブートストラップをインストールします。 main.jsにブートストラップをインポートしますブートストラップコンポーネントをテンプレートで直接使用します。オプション:カスタムスタイル。オプション:プラグインを使用します。

HTML、CSS、およびJavaScriptの役割:コアの責任 HTML、CSS、およびJavaScriptの役割:コアの責任 Apr 08, 2025 pm 07:05 PM

HTMLはWeb構造を定義し、CSSはスタイルとレイアウトを担当し、JavaScriptは動的な相互作用を提供します。 3人はWeb開発で職務を遂行し、共同でカラフルなWebサイトを構築します。

HTML、CSS、およびJavaScriptの理解:初心者向けガイド HTML、CSS、およびJavaScriptの理解:初心者向けガイド Apr 12, 2025 am 12:02 AM

webdevelopmentReliesOnhtml、css、andjavascript:1)htmlStructuresContent、2)cssStylesit、および3)Javascriptaddsinteractivity、形成、

ブートストラップにスプリットラインを書く方法 ブートストラップにスプリットラインを書く方法 Apr 07, 2025 pm 03:12 PM

ブートストラップスプリットラインを作成するには2つの方法があります。タグを使用して、水平方向のスプリットラインを作成します。 CSS Borderプロパティを使用して、カスタムスタイルのスプリットラインを作成します。

ブートストラップのフレームワークをセットアップする方法 ブートストラップのフレームワークをセットアップする方法 Apr 07, 2025 pm 03:27 PM

Bootstrapフレームワークをセットアップするには、次の手順に従う必要があります。1。CDNを介してブートストラップファイルを参照してください。 2。独自のサーバーでファイルをダウンロードしてホストします。 3。HTMLにブートストラップファイルを含めます。 4.必要に応じてSASS/LESSをコンパイルします。 5。カスタムファイルをインポートします(オプション)。セットアップが完了したら、Bootstrapのグリッドシステム、コンポーネント、スタイルを使用して、レスポンシブWebサイトとアプリケーションを作成できます。

ブートストラップに写真を挿入する方法 ブートストラップに写真を挿入する方法 Apr 07, 2025 pm 03:30 PM

ブートストラップに画像を挿入する方法はいくつかあります。HTMLIMGタグを使用して、画像を直接挿入します。ブートストラップ画像コンポーネントを使用すると、レスポンシブ画像とより多くのスタイルを提供できます。画像サイズを設定し、IMG-Fluidクラスを使用して画像を適応可能にします。 IMGボーダークラスを使用して、境界線を設定します。丸い角を設定し、IMGラウンドクラスを使用します。影を設定し、影のクラスを使用します。 CSSスタイルを使用して、画像をサイズ変更して配置します。背景画像を使用して、背景イメージCSSプロパティを使用します。

ブートストラップボタンの使用方法 ブートストラップボタンの使用方法 Apr 07, 2025 pm 03:09 PM

ブートストラップボタンの使用方法は?ブートストラップCSSを導入してボタン要素を作成し、ブートストラップボタンクラスを追加してボタンテキストを追加します

ブートストラップのサイズを変更する方法 ブートストラップのサイズを変更する方法 Apr 07, 2025 pm 03:18 PM

Bootstrapの要素のサイズを調整するには、次のものを含むDimensionクラスを使用できます。

See all articles