Segeja
@Segeja
Дизайнер

Как реализовать загрузчик файла на сайт?

Здравствуйте! У меня есть форма, в которой можно приложить файл. Когда прикладываешь файл (особенно, если он большой), то страница долго грузится, пока файл загрузится и все такое. Я много раз видел, что делают так: чтобы пользователь не смотрел, как грузится страница, у него появляется типа вращающегося колесика, а переходит только тогда, когда страница загрузилась.
Как такое реализовать? Подскажите пожалуйста. Жду с нетерпением Ваших ответов.
  • Вопрос задан
  • 2661 просмотр
Пригласить эксперта
Ответы на вопрос 5
@banderdev
нужно добавить блок (div), которому задать как бэкграунд лоадер (вот тут можно его сгенерировать). Этому блоку в css нужно прописать свойство display:none. При загрузке файла менять display:none на display:block
Ответ написан
@zvorygin
Много способов. Можно использовать готовые библиотеки или поизобретать велосипед.
Я не специалист по библиотекам, но могу предложить использовать HTML5 FileAPI - caniuse.com/#feat=fileapi у 70% пользователей это будет работать.
Ответ написан
Folour
@Folour
Можно использовать для этого jQuery + плагин Form.
Игрался с этим одно время, вот мои наработки)
Пример: 7bo.ru/example.html

<html>
  <head>
    <style>
          progress {
              display: block;
              background-color: #f3f3f3;
              border: 0;
              width: 400px;
              height: 20px;
              border-radius: 9px;
          }

          progress::-webkit-progress-bar {
              background-color: #f3f3f3;
              border-radius: 9px;
          }
          progress::-webkit-progress-value {
              background: #00c900;
              border-radius: 9px;
          }
          progress::-moz-progress-bar {
              background: #00c900;
              border-radius: 9px;
          }
          #progress-text:after {
              content: attr(data-progress);
              width: 400px;
              margin-top: -21px;
              font-weight: bold;
              color: #008800;
              text-align: center;
              display: block;
          }
          #result {
              display: none;
          }
          #label {
              padding: 6px;;
              background-color: #d3d3d3;
              border-radius: 9px;
          }
          input[type="file"] {
              display: none;
          }
    </style>
    <script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
    <script src="http://malsup.github.io/jquery.form.js"></script>
    <script>
        $(document).ready(function() {
            $('#file').on('change', function() {
                $('#form').submit();
            });
            $('#form').submit(function() {
                var progress = $('#progress');
                $(this).ajaxSubmit({
                    beforeSend: function() {
                        $('#result').fadeIn(1000);
                        $('#form').fadeOut(100);
                    },
                    uploadProgress: function(event, position, total, percent) {
                        progress.attr('value', percent);
                        $('#progress-text').attr('data-progress', function() {
                            if(percent == 100) {
                                return 'Файл загружен';
                            }
                            return percent+'%';
                        });
                    }
                });
                return false;
            });
        });
    </script>
  </head>
  <body>
    <form id="form" method="post" action="?" enctype="multipart/form-data">
      <input id="file" type="file" name="file" />
      <label for="file" id="label">Выберите файл...</label>
    </form>
    <div id="result">
      <progress max="100" value="100" id="progress"></progress>
      <div id="progress-text" data-progress="Файл загружен!"></div>
    </div>
  </body>
</html>
Ответ написан
kratkar
@kratkar
web-developer
Попробуй библиотеку plupload.
Ответ написан
Комментировать
KOLANICH
@KOLANICH
Знаю JS, PHP, C++, C#
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы