10

これはお勧めできません。しかし、まだこの機能を実装する必要があります。onseeking、onseeked からメディア コントローラーまですべてを試しました。何も機能しませんでした。シークを無効にする外部ライブラリはありますか。カスタム コントロールの使用方法に関するいくつかの指針があれば役に立ちます。

4

8 に答える 8

34

質問はかなり古いですが、まだ関連性があるので、ここに私の解決策があります:

var video = document.getElementById('video');
var supposedCurrentTime = 0;
video.addEventListener('timeupdate', function() {
  if (!video.seeking) {
        supposedCurrentTime = video.currentTime;
  }
});
// prevent user from seeking
video.addEventListener('seeking', function() {
  // guard agains infinite recursion:
  // user seeks, seeking is fired, currentTime is modified, seeking is fired, current time is modified, ....
  var delta = video.currentTime - supposedCurrentTime;
  if (Math.abs(delta) > 0.01) {
    console.log("Seeking is disabled");
    video.currentTime = supposedCurrentTime;
  }
});
// delete the following event handler if rewind is not required
video.addEventListener('ended', function() {
  // reset state in order to allow for rewind
    supposedCurrentTime = 0;
});

Jsフィドル

プレーヤーに依存せず、デフォルトのコントロールが表示されている場合でも機能し、コンソールにコードを入力しても回避できません。

于 2015-12-20T18:26:59.863 に答える
3

@svetlin-mladenov からの回答を拡張して、次のことを実行して、ユーザーがまだ視聴されていないビデオの部分を探すのを防ぐことができます。これにより、ユーザーは巻き戻して、以前に視聴したビデオの任意の部分を探すこともできます。

var timeTracking = {
                    watchedTime: 0,
                    currentTime: 0
                };
                var lastUpdated = 'currentTime';

                video.addEventListener('timeupdate', function () {
                    if (!video.seeking) {
                        if (video.currentTime > timeTracking.watchedTime) {
                            timeTracking.watchedTime = video.currentTime;
                            lastUpdated = 'watchedTime';
                        }
                        //tracking time updated  after user rewinds
                        else {
                            timeTracking.currentTime = video.currentTime;
                            lastUpdated = 'currentTime';
                        }
                    }


                });
                // prevent user from seeking
                video.addEventListener('seeking', function () {
                    // guard against infinite recursion:
                    // user seeks, seeking is fired, currentTime is modified, seeking is fired, current time is modified, ....
                    var delta = video.currentTime - timeTracking.watchedTime;
                    if (delta > 0) {
                        video.pause();
                        //play back from where the user started seeking after rewind or without rewind
                        video.currentTime = timeTracking[lastUpdated];
                        video.play();
                    }
                });
于 2016-09-28T18:15:44.353 に答える
0

video.jsのような HTML5 ビデオ プレーヤーを使用し、CSS を使用してシーク バーを非表示にすることができます。

または、HTML5 ビデオ用の独自のコントロールを構築することもできます。

また、探しているイベントは「seeking」です。(新しいjqueryイベントバインディングを使用)のように:

$(myVideoElement).on('seeking', function(){
  // do something to stop seeking
})
于 2012-08-10T17:11:30.933 に答える
-1

通常の HTML5 バージョンの代わりにビデオ js をビデオ プレーヤーとして使用する場合:

.vjs-default-skin .vjs-progress-holder {
  height: 100%;
  pointer-events: none;
}
于 2015-07-22T13:58:41.577 に答える