कैसे बताएं कि कोई <video> तत्व वर्तमान में चल रहा है?


85

मुझे लगता है कि देख MediaElement इंटरफ़ेस उजागर की तरह जिम्मेदार बताते हैं paused, seeking, और ended। हालांकि, सूची से गायब है playing

मैं जानता हूँ कि देखते हैं playingघटनाओं है कि आग एक तत्व जब शुरू होता है खेल, और timeupdateघटनाओं खेलते समय समय-समय पर की घटनाओं, लेकिन मैं निर्धारित करने के लिए एक वीडियो के चलते कि क्या एक तरह से तलाश कर रहा हूँ अभी । क्या यह निर्धारित करने का एक आसान तरीका है?

मेरे पास जो निकटतम है वह है:

!(video.paused || video.ended || video.seeking || video.readyState < video.HAVE_FUTURE_DATA)

जवाबों:


89

यह एक लंबा समय रहा है लेकिन यहां एक शानदार टिप है। आप .playingसभी मीडिया तत्वों के लिए एक कस्टम प्रॉपर्टी के रूप में परिभाषित कर सकते हैं और जरूरत पड़ने पर इसे एक्सेस कर सकते हैं। यहां कैसे:

Object.defineProperty(HTMLMediaElement.prototype, 'playing', {
    get: function(){
        return !!(this.currentTime > 0 && !this.paused && !this.ended && this.readyState > 2);
    }
})

अब आप इसे इस तरह <video>या <audio>तत्वों पर उपयोग कर सकते हैं :

if(document.querySelector('video').playing){ // checks if element is playing right now
    // Do anything you want to
}

85

कोई विशिष्ट विशेषता नहीं है जो यह बताएगी कि MediaElementवर्तमान में खेल रहा है या नहीं। हालाँकि, आप इसे अन्य विशेषताओं की स्थिति से निकाल सकते हैं। अगर:

  • currentTime शून्य से अधिक है, और
  • paused गलत है, और
  • ended गलत है

तब तत्व वर्तमान में खेल रहा है।

readyStateत्रुटियों के कारण मीडिया बंद हो गया या नहीं, यह देखने के लिए आपको जांच की आवश्यकता हो सकती है । शायद कुछ इस तरह:

const isVideoPlaying = video => !!(video.currentTime > 0 && !video.paused && !video.ended && video.readyState > 2);

यह धारणा IE में पकड़ नहीं लगती है। जबकि उपयोगकर्ता चाह रहा है (और वीडियो इस प्रकार अभी नहीं चल रहा है), वर्तमान समय 0 से अधिक हो सकता है और एक ही समय में समाप्त = समाप्त = गलत हो सकता है।
बजरके

करंट टाइम मुझे सेकंड में वीडियो की अवधि सफारी में एक फ्लोट के रूप में देता है अगर वीडियो अभी तक खेलना शुरू नहीं हुआ है।
क्यू कारन

10
var video = $('selector').children('video');

var videoElement = video.get(0);

if (!videoElement.paused) {} 

Jquery का उपयोग करते हुए इसे करने का एक तरीका


यह सबसे अच्छा तरीका है। Acc एक भी बोझिल है
Bariq Dharmawan

2

मेरी प्रतिक्रिया यहाँ देखें: HTML5 वीडियो टैग, जावास्क्रिप्ट खेल स्थिति का पता लगाने के लिए?

मूल रूप से, जैसा कि पहले कहा गया है कि जाँच करने के लिए कोई एकल संपत्ति नहीं है, लेकिन कल्पना के अनुसार यह शर्तों का एक संयोजन है।


1

मैं उसी समस्या का सामना कर रहा था। समाधान बहुत सरल और सीधे आगे है:

// if video status is changed to "ended", then change control button to "Play Again"
video.onended = function() {
    $("#play_control_button").text("Play Again");
};

// if video status is changed to "paused", then change control button to "Continue Play"
video.onpause = function() {
    $("#play_control_button").text("Continue Play");
};

// if video status is changed to "playing", then change control button to "Stop"
video.onplaying = function() {
    $("#play_control_button").text("Stop");
};

क्या आप इन संपत्तियों के प्रलेखन से जुड़ सकते हैं?
ब्रासोफिलो

@brasofilo मुझे लगता है कि नीचे दिए गए लिंक जावास्क्रिप्ट के साथ वीडियो को नियंत्रित करने के लिए पर्याप्त जानकारी प्रदान करेंगे: w3schools.com/tags/ref_av_dom.asp
Haolin Zhang
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.