HTML5 ตรวจสอบว่าเล่นเสียงหรือไม่


คำตอบ:


152
function isPlaying(audelem) { return !audelem.paused; }

แท็กเสียงมีpausedคุณสมบัติ หากไม่หยุดชั่วคราวแสดงว่ากำลังเล่น


เนื่องจากไม่มีการหยุดนี้จึงเป็นวิธีการแก้ปัญหาที่สะอาด
ทอดด์โมเสส

11
จะเกิดอะไรขึ้นถ้ามันไม่เคยเริ่มต้น?
Harry

30
นี่คือคำตอบที่ผิด ฉันแค่ทำงานกับมันและก่อนที่จะเริ่มครั้งแรก. หยุดชั่วคราวเป็นเท็จ
Tomas

2
@ ทอมคุณมี jsbin? ฉันลองแล้วดูเหมือนว่าจะเป็นคำตอบที่ถูกต้อง
Harry

3
@ แฮรี่ฉันเล่นกับมันมากขึ้นและดูเหมือนว่าในเบราว์เซอร์บางตัวจะใช้งานได้และบางอย่างก็ไม่ได้ผล ฉันเดาว่ามันขึ้นอยู่กับการใช้งาน แต่สำหรับการอัปเดตล่าสุดทั้งหมดสำหรับ chrome และ firefox ดูเหมือนว่าจะใช้ได้ดังนั้นคำตอบนี้จึงถูกต้องสำหรับการใช้งานล่าสุด
Tomas

44

คุณสามารถตรวจสอบระยะเวลา กำลังเล่นหากระยะเวลามากกว่า 0 วินาทีและไม่ได้หยุดชั่วคราว

var myAudio = document.getElementById('myAudioID');

if (myAudio.duration > 0 && !myAudio.paused) {

    //Its playing...do your job

} else {

    //Not playing...maybe paused, stopped or never played.

}

2
โดยส่วนตัวผมเชื่อว่า!myAudio.paused||!myAudio.currentTimeจะทำงานได้ดีขึ้น
m93a

11
@ m93a คุณไม่ได้หมายถึง!myAudio.paused || myAudio.currentTime?
MalcolmOcean

5
!myAudio.paused || myAudio.currentTimeใช่ควรจะเป็น ไม่เคยตอบกลับดูเหมือนว่า ...
Parth

16

ในขณะที่ฉันมาสายจริงๆฉันใช้การใช้งานนี้เพื่อดูว่าเสียงกำลังเล่นอยู่หรือไม่:

service.currentAudio = new Audio();

var isPlaying = function () {
    return service.currentAudio
        && service.currentAudio.currentTime > 0
        && !service.currentAudio.paused
        && !service.currentAudio.ended
        && service.currentAudio.readyState > 2;
}

ผมคิดว่าส่วนใหญ่ของธงในองค์ประกอบเสียงที่ชัดเจนนอกเหนือจากรัฐพร้อมที่ซึ่งคุณสามารถอ่านข้อมูลเกี่ยวกับที่นี่: MDN HTMLMediaElement.readyState


ไม่ทำงานหาก iOS หยุดเสียงชั่วคราวโดยอัตโนมัติเมื่อล็อก
shukshin.ivan


5

ลองฟังก์ชั่นนี้! การเล่นเสียงจะไม่ดำเนินการหากตำแหน่งนั้นเป็นจุดเริ่มต้นหรือจุดสิ้นสุด

function togglePause() {
     if (myAudio.paused && myAudio.currentTime > 0 && !myAudio.ended) {
         myAudio.play();
     } else {
         myAudio.pause();
     }
}

0

เพื่อตรวจสอบว่าเสียงที่เป็นจริงที่เริ่มเล่นโดยเฉพาะอย่างยิ่งถ้าคุณมีกระแสจำเป็นต้องตรวจสอบไปaudio.played.length 1จะเป็น 1 ก็ต่อเมื่อเสียงเริ่มดังขึ้นจริงๆ 0มิฉะนั้นจะเป็น มันเหมือนกับการแฮ็ก แต่ก็ยังใช้งานได้แม้ในเบราว์เซอร์มือถือเช่น Safari และ Chrome


0

คุณสามารถใช้เหตุการณ์ onplay

var audio = document.querySelector('audio');
audio.onplay = function() { /* do something */};

หรือ

var audio = document.querySelector('audio');
audio.addEventListener('play', function() { /* do something */ };

0

ฉันใช้รหัส jquery นี้กับปุ่มลากเพื่อเล่นและหยุดปุ่มเล่นคือปุ่มเล่นและเล่น

const help_p = new Audio("audio/help.mp3");//Set Help Audio Name
$('#help_play').click(function() {//pause-Play
if (help_p.paused == false) {
  help_p.pause();//pause if playing
} else {
  help_p.play();//Play If Pausing
}
});

$('#help_stop').click(function() {//Stop Button
  help_p.pause();//pause
  help_p.currentTime = 0; //Set Time 0
});

-2

แม้ว่าจะไม่มีวิธีใดที่เรียกว่า isPlaying หรือสิ่งที่คล้ายกัน แต่ก็มีสองสามวิธีที่จะทำให้สำเร็จได้

วิธีนี้จะได้รับ% ของความคืบหน้าเมื่อเล่นเสียง:

function getPercentProg() {
    var myVideo = document.getElementById('myVideo');
    var endBuf = myVideo.buffered.end(0);
    var soFar = parseInt((endBuf / myVideo.duration) * 100);
    document.getElementById('loadStatus').innerHTML =  soFar + '%';
}

ถ้าเปอร์เซ็นต์มากกว่า 0 และน้อยกว่า 100 แสดงว่ากำลังเล่นมิฉะนั้นจะหยุด


เอิ่มจะเกิดอะไรขึ้นถ้าฉันหยุดเสียงตรงกลาง
Niet the Dark Absolute

1
แล้วมันจะไม่เล่น
ทอดด์โมเสส

ตรวจพบเฉพาะจำนวนที่บัฟเฟอร์ ตัวอย่างเช่นหากองค์ประกอบเสียงเริ่มบัฟเฟอร์ข้อมูล แต่ยังไม่ได้เริ่มเล่นเนื่องจากมีข้อมูลไม่เพียงพอวิธีนี้ยังสามารถคืนค่าจริงได้ หรือหากองค์ประกอบมีการบัฟเฟอร์ข้อมูลเป็นส่วนหนึ่งของการเล่นและต่อมาถูกหยุดชั่วคราว
dhasenan

getElementsByTagName ('myVideo')? ฉันคิดว่ามันควรจะ getElementById ('myVideo')
Lucky Soni

2
เอม ... กลบเกลื่อนทำไม? เป็นความคิดที่ดี แต่เขียนไม่ดี คุณจะตรวจสอบได้อย่างไรว่าเสียงเรียลไทม์ (WebRTC) กำลังเล่นกับ. หยุดชั่วคราวอยู่หรือไม่? ด้วยการตรวจสอบบัฟเฟอร์เท่านั้น ไม่สมควรได้รับการกลบเกลื่อน ฉันโหวต
igorpavlov
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.