を含み、次の手順を実行します。
- ビデオ要素を非表示にする
- `canvas.getContext(「2D」)とのcanvas要素のコンテキストを取得しても、どこか
- 図面を作成することを保存し、どこか
- これを保存し、その高さ/幅のマッチvideo要素canvas要素を作成します。関数
- この描画関数では、を使用します。ここで、
src
は、ビデオの現在のフレームの編集済みバージョンです。その描画機能で
- 、再び
を自分自身を呼び出すために使用再帰私はあなたにこのなさ(およびコンテンツ管理システムに使用できる)ことの2つの例を与えることができます
最初はここにある:https://jsfiddle.net/yywL381w/19/
SDLという会社は、ビデオをホストするMedia Managerというツールを作ります。あなたが見ているのは、data-*
からそのパラメータを受け取り、Media Manager Rest APIからリクエストし、ビデオを作成し、data*
属性に完全に基づいてエフェクトを追加するjQueryプラグインです。そのプラグインは、他のソースから呼び出されたビデオを扱うために簡単に調整することができます。使用方法の詳細についてはrepoをご覧ください。
もう一つの例はここにある:http://codepen.io/paceaux/pen/egLOeR jQueryプラグインではありません
。代わりにES6クラスです。あなたは、画像/動画を作成し、これにクロップ効果適用することができます:あなたが観察します
let imageModule = new ImageCanvasModule(module);
imageModule.createCanvas();
imageModule.drawOnCanvas();
imageModule.hideOriginal();
を、ImageCanvasModule
クラスでは、この方法:
drawFrame() {
if (this.isVideo && this.media.paused) return false;
let x = 0;
let width = this.media.offsetWidth;
let y = 0;
this.imageFrames[this.module.dataset.imageFrame](this.backContext);
this.backContext.drawImage(this.media, x, y, width, this.canvas.height);
this.context.drawImage(this.backCanvas, 0, 0);
if (this.isVideo) {
window.requestAnimationFrame(()=>{
this.drawFrame();
});
}
}
クラスは、第二のキャンバスを作成しました、描画に使うそのキャンバスは表示されません。ブラウザを心から救うだけのものです。コンテンツ管理可能である
「操作」を「フレーム」this.imageFrames[this.module.dataset.imageFrame](this.backContext);
です(CMSでテンプレートで出力することができる)画像/動画に保存されている属性です。これはimageFrameの名前を取得し、それを一致する関数として実行します。また、コンテキストで送信します(必要に応じて、バックキャンバスまたはメインキャンバスの描画を切り替えることができます)
次にthis.backContext.drawImage(this.media, x, y, width, this.canvas.height);
はバックコンテキストでイメージを描画します。
最後に、これはメインキャンバスにthis.context.drawImage(this.backCanvas, 0, 0);
と表示されています。バックキャンバスを取り、メインキャンバスに描画します。したがって、表示されるキャンバスの操作量は最小限に抑えられます。
最後に、これは動画であるため、新しいフレームを描画したいと考えています。だから我々は、関数呼び出し自体を持っている:
if (this.isVideo) {
window.requestAnimationFrame(()=>{
this.drawFrame();
});
この全体のセットアップは、私たちは、出力にユーザが画像の周りに描かれることを望んで、フレームの種類を含むdata-*
属性をCMSを使用することができます。 JavaScriptはその画像またはビデオのキャンバス化バージョンを生成します。サンプルのマークアップは、次のようになります。
<video muted loop autoplay data-image-frame="wedgeTop">