Использование пути к файлу из входных данных

#javascript #jquery #html

#javascript #jquery #HTML

Вопрос:

У меня проблема. Когда я добавляю новый элемент в свой маркированный список:

 <input id="wejscie" type="file" accept="video/*"/>
<ol id="playlist">
    <li movieurl="http://html5videoformatconverter.com/data/images/happyfit2.mp4">Happy Fit</li>
    <li movieurl="http://grochtdreis.de/fuer-jsfiddle/video/sintel_trailer-480.mp4">Sintel</li>          
    <li movieurl="http://html5example.net/static/video/html5_Video_VP8.webm">Resident Evil</li>      
    <li movieurl="http://www.ioncannon.net/examples/vp8-webm/big_buck_bunny_480p.webm">Big Buck    Bunny</li>
</ol>
 

с помощью этой функции:

 $(function() {
    $("#wejscie").on("change", function() {
        var URL = window.URL || window.webkitURL
        var file = this.files[0];
        var fileURL = URL.createObjectURL(file);
        var fileName = '';
        function getName(s) {
            return s.replace(/^.*[\/]/, '');
        }
        fileName = getName(fileURL);
        $("ol").append('<li movieurl="'   fileURL   '">'   fileName   '</li>'); 
    });
});
 

когда я переключаю видео на одно из значений по умолчанию и обратно на добавленное, оно не будет воспроизводиться.
Для воспроизведения видео я использую эту функцию:

 $(function() {
            $("#playlist li").on("click", function() {
                $("#videoarea").attr({
                    "src": $(this).attr("movieurl"),
                    "poster": "",
                    "autoplay": "autoplay"
                });
            });
            $("#videoarea").attr({
                "src": $("#playlist li").eq(0).attr("movieurl"),
                "poster": $("#playlist li").eq(0).attr("moviesposter")
            });
        });
 

Также мое имя файла — это просто набор случайных букв и цифр. Можете ли вы сказать мне, что я делаю не так?

Комментарии:

1. Вы не делаете ничего плохого с именем файла. По соображениям безопасности браузеры не позволяют получать фактическое имя или путь к файлу с помощью javascript.

2. Итак, есть ли какая-либо возможность воспроизвести видео с сохраненным fileURL в разделе <li movieurl> после щелчка?

3. Вам нужно загрузить его на сервер, получить и затем воспроизвести

Ответ №1:

Я полагаю, что эта проблема, с которой вы столкнулись, связана с тем, что видео, которые вы добавляете с помощью ввода файла, не привязаны к обработчику события click. Вам нужно делегировать этот прослушиватель. Я внес несколько изменений в код, который у вас был, но главное — $("#playlist").on("click", "li", function () { убедиться, что у li файлов, которые вы добавляете динамически, все еще прослушивается событие щелчка. Я добавил демонстрационную версию, которая также работает.

ОБНОВЛЕНИЕ: я обновил код так, чтобы при li нажатии на #videoarea an получался .data индекс, на который li был нажат. После этого я добавил прослушиватель ended событий #videoarea . Теперь, когда видео будет воспроизведено, оно получит li только что законченное видео, затем захватит .next li , а затем запустит click следующее li .

 $("#wejscie").on("change", function () {
    var URL = window.URL || window.webkitURL,
        file = this.files[0],
        fileURL = URL.createObjectURL(file),
        fileName = file.name.replace(/^.*//ig, '');

    $("ol").append('<li movieurl="'   fileURL   '">'   fileName   '</li>');
});


$("#playlist").on("click", "li", function () {
    var i = $('#playlist li').index(this);

    $("#videoarea").data('i', i).attr({
        "src": $(this).attr("movieurl"),
        "poster": "",
        "autoplay": "autoplay"
    });
});

$("#videoarea").on('ended', function(){
    var i = $(this).data('i'),
        $nextvid = $('#playlist li:eq(' i ')').next();

    if(!!$nextvid.length){
        $nextvid.trigger('click');
    }
});
 

ДЕМОНСТРАЦИЯ

Комментарии:

1. Спасибо! Может быть, вы также знаете, как заставить автоматически воспроизводить следующее видео после окончания предыдущего видео?:)

2. @KorWojci позвольте мне провести небольшое исследование и вернуться к вам

3. @KorWojci я обновил свой ответ, чтобы добиться того, чего вы хотели в комментарии.

4. Ты БОГ! Большое спасибо!