var is_mobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test( navigator.userAgent ); var links = document.querySelectorAll(".link"); var audio, music = [], current_index = -1, typing = false; var active = false; // var comment = document.querySelector("#comment") Array.prototype.slice.apply(links).forEach(function (url) { const href = url.getAttribute("href"); if (!href) return; if (href.match(/\.(mp3|wav|ogg)/i)) { var index = music.length; // if (is_mobile) href = href.replace(/^https/,"http") music.push(url); url.addEventListener("click", function (e) { if (e.ctrlKey || e.altKey || e.metaKey || e.shiftKey) return; e.preventDefault(); play(index); }); } else if (href.match(/(gif|jpe?g|png|bmp)/i)) { // url.innerHTML = "" // url.addEventListener("click", function(e){ // if (e.ctrlKey || e.altKey || e.metaKey || e.shiftKey) return // e.preventDefault() // url.classList.toggle("zoomed") // }) } }); const el = document.querySelector(".player"); const title_el = el.querySelector(".title"); const icon_el = el.querySelector(".icon"); const pos_el = el.querySelector(".pos"); const track_el = el.querySelector(".track"); const dot_el = el.querySelector(".dot"); const time_el = el.querySelector(".time"); const track_width = track_el.offsetWidth; const track_left = pos_el.offsetLeft; if (music.length) { audio = document.createElement("audio"); window.a = audio; audio.setAttribute("controls", true); audio.addEventListener("ended", next); audio.addEventListener("timeupdate", timeupdate); // audio.src = music[0].href // var player = document.querySelector("table") // player.parentNode.insertBefore(audio, player) document.body.addEventListener("keydown", keydown); // comment.addEventListener("focus", focusTextBox) // comment.addEventListener("blur", blurTextBox) } icon_el.addEventListener("click", toggle); if (is_mobile) { pos_el.addEventListener("touchstart", (e) => mousedown(e.touches[0])); pos_el.addEventListener("touchmove", (e) => mousemove(e.touches[0])); window.addEventListener("touchup", mouseup); } else { pos_el.addEventListener("mousedown", mousedown); pos_el.addEventListener("mousemove", mousemove); window.addEventListener("mouseup", mouseup); } var down = false; var mousex = 0; function mousedown(e) { e.preventDefault && e.preventDefault(); down = true; mousex = (e.pageX - track_left) / track_width; } function mousemove(e) { if (!down) return; mousex = Math.min(Math.max(0, (e.pageX - track_left) / track_width), 1); dot_el.style.transform = "translateX(" + mousex * track_width + "px)"; } function mouseup(e) { if (!down) return; down = false; var t = mousex * audio.duration; audio.currentTime = Math.round(t); dot_el.style.transform = "translateX(" + mousex * track_width + "px)"; } function play(index) { if (!active) { active = true; el.classList.add("active"); } // if (index === music.length) return stop(); if (!icon_el.classList.contains("active")) { icon_el.classList.add("active"); } current_index = (index + music.length) % music.length; const a_el = music[current_index]; audio.src = a_el.getAttribute("href"); audio.play(); const header = prevUntil(a_el.parentNode, "h3"); const title = index + 1 + ". " + header.innerText + ": " + a_el.innerText; title_el.innerHTML = title; var playing = document.querySelector(".playing"); if (playing) playing.classList.remove("playing"); music[current_index].classList.add("playing"); } function prev() { play(current_index - 1); } function next() { play(current_index + 1); } function pause() { icon_el.classList.remove("active"); } function stop() { el.classList.remove("active"); var playing = document.querySelector(".playing"); if (playing) playing.classList.remove("playing"); active = false; } function toggle() { if (audio.paused) { icon_el.classList.add("active"); audio.play(); } else { pause(); audio.pause(); } } function timeupdate() { if (down) return; let { currentTime, duration } = audio; let t = currentTime / duration; dot_el.style.transform = "translateX(" + track_width * t + "px)"; time_el.innerHTML = time(currentTime) + " / " + time(duration); } function time(n) { if (!n) return "0:00"; n = Math.floor(n); let s = n % 60; if (s < 10) s = "0" + s; let m = Math.floor(n / 60); return m + ":" + s; } function keydown(e) { if (typing || e.ctrlKey || e.altKey || e.metaKey || e.shiftKey) return; switch (e.keyCode) { case 37: // left prev(); break; case 39: // right next(); break; case 32: // spacebar e.preventDefault(); toggle(); break; } } function prevUntil(elem, selector) { elem = elem.previousElementSibling; while (elem) { if (elem.matches(selector)) break; elem = elem.previousElementSibling; } return elem; } // function focusTextBox (){ typing = true } // function blurTextBox (){ typing = false } document.querySelector(".loading").classList.remove("loading");