반응형
<!DOCTYPE html> |
<html lang="en"> |
<head> |
<meta charset="UTF-8"> |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
<meta http-equiv="X-UA-Compatible" content="ie=edge"> |
<title>Document</title> |
</head> |
<body> |
<video id="video" width="320" height=""> |
<source src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/485050/movie.mp4" type="video/mp4"> |
</video> |
<button type="button" id="play" class="btn_play">재생</button> |
<button type="button" id="pause" class="btn_pause" style="display:none">일시정지</button> |
<button type="button" id="stop" class="btn_stop">정지</button> |
<button type="button" id="mute" class="btn_mute">음소거</button> |
<button type="button" id="unmute" class="btn_vm" style="display:none">볼륨있음</button> |
<button type="button" id="vmup" class="btn_vmup">볼륨UP</button> |
<button type="button" id="vmdown" class="btn_vmdown">볼륨DOWN</button> |
<button type="button" id="full" class="btn_fullscreen">전체화면</button> |
<div id="currentTime" class="current_time">00:00</div> |
<div id="totalTime" class="total_time">00:00</div> |
<div id="progress" class="progress" style="width:300px; height:10px; background-color: #000;"> |
<div class="bar" id="progressBar" style="width:0%; height:100%; background-color: blue;"></div> |
</div> |
<script> |
/* 버튼 */ |
var video = document.getElementById("video"); |
var play = document.getElementById("play"); |
var pause = document.getElementById("pause"); |
var stop = document.getElementById("stop"); |
var timeCurrent = document.getElementById("currentTime"); |
var timeTotal = document.getElementById("totalTime"); |
var mute = document.getElementById("mute"); |
var unmute = document.getElementById("unmute"); |
var vmup = document.getElementById("vmup"); |
var vmdown = document.getElementById("vmdown"); |
var full = document.getElementById("full"); |
var progress = document.getElementById("progress"); |
var progressBar = document.getElementById("progressBar"); |
video.volume = 1; |
/** |
플레이어 함수 |
**/ |
//재생일시정지함수 |
function playPause() { |
if (video.paused) { |
video.play(); |
play.style.display = "none"; |
pause.style.display = "inline-block"; |
} else { |
video.pause(); |
play.style.display = "inline-block"; |
pause.style.display = "none"; |
} |
} |
//정지함수 |
function stopPlayer() { |
video.pause(); |
video.currentTime = 0; |
} |
//음소거토글함수 |
function mutePlayer(state) { |
if (state == "mute") { |
video.volume = 0; |
mute.style.display = "none"; |
unmute.style.display = "inline-block"; |
} else if (state == "unmute") { |
video.volume = 1; |
mute.style.display = "inline-block"; |
unmute.style.display = "none"; |
} |
} |
//볼륨updown |
function volumeUpDown(dir) { |
if (dir == "up") { |
if (video.volume == 1) { |
return false; |
} |
var change = video.volume + 0.1; |
change = change.toFixed(1); |
video.volume = parseFloat(change); |
//console.log(video.volume); |
} else if (dir == "down") { |
if (video.volume == 0) { |
mute.style.display = "none"; |
unmute.style.display = "inline-block"; |
return false; |
} |
var change = video.volume - 0.1; |
change = change.toFixed(1); |
video.volume = parseFloat(change); |
//console.log(video.volume); |
} |
} |
//전체화면 |
function fullScreen() { |
if (video.requestFullscreen) { |
video.requestFullscreen(); |
} else if (video.mozRequestFullScreen) { |
video.mozRequestFullScreen(); |
} else if (video.webkitRequestFullscreen) { |
video.webkitRequestFullscreen(); |
} else if (video.msRequestFullscreen) { |
video.msRequestFullscreen(); |
} |
} |
//재생시간함수 |
function playTime() { |
//총재생시간 |
video.addEventListener("durationchange", function () { |
var duration = video.duration; |
var durationmin = Math.floor(duration / 60); |
var durationsec = Math.floor(duration - (durationmin * 60)); |
if (durationmin < 10) { |
durationmin = "0" + durationmin; |
} |
if (durationsec < 10) { |
durationsec = "0" + durationsec; |
} |
var durationTotal = durationmin + ":" + durationsec; |
timeCurrent.innerHTML = durationTotal; |
}); |
//현재재생시간 |
video.addEventListener("timeupdate", function () { |
if (video.duration == video.currentTime) { |
play.style.display = "inline-block"; |
pause.style.display = "none"; |
} |
var current = video.currentTime; |
var currentmin = Math.floor(current / 60); |
var currentsec = Math.floor(current - (currentmin * 60)); |
if (currentmin < 10) { |
currentmin = "0" + currentmin; |
} |
if (currentsec < 10) { |
currentsec = "0" + currentsec; |
} |
var currentTotal = currentmin + ":" + currentsec; |
timeTotal.innerHTML = currentTotal; |
}); |
} |
//프로그레스바 |
function progressPlayer() { |
video.addEventListener("timeupdate", function () { |
var max = Math.floor(video.duration); |
var current = Math.floor(video.currentTime); |
var percent = 100 * (current / max); |
progressBar.style.width = percent + "%"; |
}); |
} |
//프로그레스바 seek |
function seek(event) { |
var seekTotal = parseInt(progress.style.width); |
var seekX = event.offsetX; |
var seekPercent = 100 * (seekX / seekTotal); |
progressBar.style.width = seekPercent + "%"; |
var seekMove = (seekPercent / 100) * Math.floor(video.duration); |
video.currentTime = seekMove; |
} |
/* 함수실행 */ |
playTime(); |
progressPlayer(); |
/* 파이어폭스 이벤트 크로스브라우징코드 */ |
if (navigator.userAgent.indexOf("Firefox") >= 0) { |
var eventNames = ["mousedown", "mouseover", "mouseout", "mousemove", "mousedrag", "click", "dbclick", "keydown", "keypress", "keyup"]; |
for (var i = 0; i < eventNames.length; i++) { |
window.addEventListener(eventNames[i], function (e) { |
window.event = e; |
}, true); |
} |
} |
/* 이벤트 */ |
play.addEventListener("click", function () { |
playPause(); |
});//재생 |
pause.addEventListener("click", function () { |
playPause(); |
});//일시정지 |
stop.addEventListener("click", function () { |
stopPlayer(); |
});//정지 |
mute.addEventListener("click", function () { |
mutePlayer("mute") |
});//음소거 |
unmute.addEventListener("click", function () { |
mutePlayer("unmute") |
})//볼륨있음 |
vmup.addEventListener("click", function () { |
volumeUpDown("up"); |
});//볼륨업 |
vmdown.addEventListener("click", function () { |
volumeUpDown("down"); |
});//볼륨다운 |
full.addEventListener("click", function () { |
fullScreen(); |
});//풀스크린 |
progress.addEventListener("click", function () { |
seek(event); |
});//seek |
</script> |
</body> |
</html> |
728x90
반응형
'web > javascript & jquery' 카테고리의 다른 글
[펌]글자 타이핑 효과 (0) | 2020.08.26 |
---|---|
모바일 가로 화면 감지 (0) | 2020.06.05 |
html 에 수학 수식을 사용해보자 (0) | 2020.05.18 |
슬라이딩 메뉴 , 드롭다운메뉴 (0) | 2019.12.24 |
간단 GNB html (0) | 2019.12.19 |