HTML5 カスタマイズを使用してプレーヤー コード共有を実現する

巴扎黑
リリース: 2018-05-14 13:51:03
オリジナル
4989 人が閲覧しました

この記事では、カスタム HTML5 プレーヤーをゼロから実装するためのサンプル コードを主に紹介します。編集者が非常に優れていると考えたので、参考として共有します。エディターをフォローして見てみましょう

この共有は、HTML5 タグに基づいたカスタムビデオプレーヤーです。再生の一時停止、進行中のドラッグ、音量調整、全画面表示などの機能を実装します。

エフェクトのプレビュー

ここをクリックしてソース コード ウェアハウスを表示します。

核となるアイデア

カスタムプレーヤーの作成に一度も触れたことのない子供たちの靴もきっとあり、タグの理解はここで止まっていると思います。

<video controls="controls" autoplay="autoplay">
  <source src="movie.ogg" type="video/ogg" />
</video>
ログイン後にコピー

controls 属性を設定すると、ブラウザーに付属のコントロール バーがインターフェイスに表示されます。 UI の要件がない場合は、内蔵コントローラーでほとんどのニーズをすでに満たすことができます。もちろん、その場合、この共有 = は表示されません。 =

コントロールバーを非表示にしてシミュレートします

カスタム関数を使用してプレーヤーを実装するための鍵は、非表示にした後、以下の同じ位置で HTML と CSS を通じてシミュレートすることです。 style は、js を使用して vedio タグによって公開されるインターフェイス関数とプロパティを呼び出し、ユーザーの操作動作を検出して、UI とビデオ再生データの対応する変更を同期的にシミュレートします。

いくつかのコア関数と属性の使用

myVid=document.getElementById("video1");
//控制视频开关
myVid.play() //播放
myVid.pause() //暂停
//模拟视频进度条
myVid.currentTime=5; //返回或设定当前视频播放位置
myVid.duration // 返回视频总长度
//模拟视频音量
myVid.volume //音量
//获取视频当前状态后判断何时从loading切换为播放
myVid.readyState
//0 = HAVE_NOTHING - 没有关于音频/视频是否就绪的信息
//1 = HAVE_METADATA - 关于音频/视频就绪的元数据
//2 = HAVE_CURRENT_DATA - 关于当前播放位置的数据是可用的,但没有足够的数据来播放下一帧/毫秒
//3 = HAVE_FUTURE_DATA - 当前及至少下一帧的数据是可用的
//4 = HAVE_ENOUGH_DATA - 可用数据足以开始播放
ログイン後にコピー

すべての実装における重要なポイントは、進行状況バーのシミュレーションです。 video タグの currentTime 属性とduration 属性を使用して、合計再生時間に対する現在の再生時間の比率を通じて、全長に対するプログレス バーの位置を計算できます。同時に、プログレスバーをドラッグしてユーザーが最後に設定した長さを使用して、現時点でビデオが再生される位置を逆計算することもできます。

ドラッグコードのアイデア

//核心代码示例
var dragDis = 0
var processWidth = xxx //拖拽条总长
$(&#39;body&#39;).mousedown(function(e) {
    startX = e.clientX
    dragDis = startX - leftInit //leftInit为拖拽条起始点巨屏幕左侧的距离
    dragTarget.css({ //拖拽按钮
        left: dragDis
    })
    dragProcess.css({ //进度条(蓝色进度条)
        width: dragDis
    }) // 令进度条和拖拽按钮渲染在同一位置
    videoSource.pause()
}).mousemove(function(e) {
    moveX = e.clientX
    disX = moveX - startX
    var left = dragDis + disX
    if(left > processWidth) {
        left = processWidth
    } else if(left < 0) {
        left = 0
    }
    dragTarget.css({
        left: left
    })
    dragProcess.css({
        width: left
    })
}).mouseup(function(e) {
    videoSource.play()
    videoSource.currentTime = $(&#39;蓝色拖拽条&#39;).width() / processWidth * duration //拖拽后计算视频的正确播放位置
})
ログイン後にコピー

同様に、ボリュームコントロールも基本的に上記の動作と同じなので、ソースコードでは、作成者は異なる要素を使用して、進行状況またはボリュームドラッグコントロールを実行するかどうかを決定します。

ビデオストリームのステータスをクエリすることで、再生前のローディングアニメーションを制御します

function ifState() {
    var state = videoSource.readyState
    if(state === 4) { //状态为4即可播放
        videoPlayer()
    } else {
        $(&#39;.play-sym-wrapper&#39;).remove()
        $(&#39;body&#39;).append(&#39;<p class="play-sym-wrapper"><img class="play-sym" src="./images/loading.gif"></p>&#39;)
        //添加loading动画
        setTimeout(ifState, 10)
    }
}
setTimeout(ifState, 10)
ログイン後にコピー

興味のある学生は、ソースコードのHTMLをクリックして再生することができます。一時停止、音量の保存など。ビデオプレーヤー全体の基本機能はかなりよく実装されています。

以上がHTML5 カスタマイズを使用してプレーヤー コード共有を実現するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート