Объем ProgressBar, OffsetX не определен - PullRequest
1 голос
/ 23 апреля 2019

Я создал аудиоплеер в javascript / jquery.Настольная версия работает хорошо, но на мобильных телефонах я не могу использовать индикатор прогресса громкости.

Сначала у меня были те же проблемы с кнопкой воспроизведения / паузы, но теперь это исправлено.

Я обнаружил, что offsetX, похоже, не работает с мобильными устройствами.

Я пробовал pageX и clientX, но не исправил это.

Я абсолютный новичок сjavascript, поэтому я надеюсь, что кто-то может помочь.

function updateVolumeProgressBar(audio) {
    let volume = audio.volume * 100;
    $(".volumeBar .progress").css("width", volume + "%");
}
this.audio.addEventListener("volumechange", function() {
        updateVolumeProgressBar(this);
    });

$(".volumeBar .progressBar").on("mousedown touchstart", function() {
            mouseDown = true;
          console.log("test4");
        });

        $(".volumeBar .progressBar").on("mousemove", function(e) {
            if(mouseDown === true) {
                let percentage = e.offsetX / $(this).width();
            console.log(e.offsetX);
                if(percentage >= 0 && percentage <= 1) {
                    audioElement.audio.volume = percentage;
                }
            }
        });
$(".volumeBar .progressBar").on("mouseup", function(e) {
            let percentage = e.offsetX / $(this).width();
            if(percentage >= 0 && percentage <= 1) {
                audioElement.audio.volume = percentage;
            }
        });


        $(".volumeBar .progressBar").on("touchend", function(e) {
          var orig = e.originalEvent;
            let percentage = (orig.offsetX) / $(this).width();
          console.log(orig.offsetX);
            if(percentage >= 0 && percentage <= 1) {
                audioElement.audio.volume = percentage;
            }
        });
$(document).mouseup(function() {
            mouseDown = false;
        });

        $(document).on("touchend", function() {
            mouseDown = false;
        });

ОБНОВЛЕНИЕ: Мой Javascript изменился

function initProgressBar(audio) {

    var length = audio.duration;
    var current_time = audio.currentTime;

    // calculate total length of value
    var totalLength = calculateRemainingTime();
    jQuery(".progressTime.remaining").text(totalLength);

    // calculate current value time
    var currentTime = calculateCurrentValue(current_time);
    jQuery(".progressTime.current").text(currentTime);

    var progressbar = document.getElementById('timeSeek');
    progressbar.value = (audio.currentTime / audio.duration);
    $(progressbar).on("vclick", seek);


    function seek(evt) {
        var seekto = audio.duration * (progressbar.value / 100);
        var percent = evt.offsetX / this.offsetWidth;
        audio.currentTime = percent * audio.duration;
        progressbar.value = percent / 100;
    }

}



function Audio() {

    this.currentlyPlaying;
    this.audio = document.createElement('audio');

    this.audio.addEventListener("ended", function() {
        nextSong();
    });


    this.audio.addEventListener("timeupdate", function(){
        if(this.duration) {
            initProgressBar(this);
        }
    });

    this.audio.addEventListener("volumechange", function() {
        updateVolumeProgressBar(this);
    });

    this.setTrack = function(track) {
        this.currentlyPlaying = track;
        this.audio.src = track.path;
    };

    this.play = function() {
        this.audio.play();
    };

    this.pause = function() {
        this.audio.pause();
    };

}

HTML-часть

<div class="playbackBar">

        <span class="progressTime current">0:00</span>

        <div class="progressBar">
                <div class="progressBarBg">
                        <progress id="timeSeek" value="0" max="1"></progress>
                </div>
        </div>

        <span class="progressTime remaining">0.00</span>


</div>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...