Как создать форму загрузки на jQuery, CSS3, HTML5 и PHP

В этой статье мы создадим форму загрузки файлов. Нам понадобится Plupload API. Plupload позволяет загружать файлы с помощью HTML5 Gears, Silverlight, Flash, BrowserPlus, что обеспечивает ряд уникальных функций, таких как индикатор загрузки, изменение размера изображения и разбитие на несколько частей. Таким образом, мы можем создать очень мощную форму загрузки совместимой со всеми браузерами.

Сложность

форма загрузки

Шаг 1 - Файловая структура

Файловая структура очень проста. Для начала нужно скачать Plupload API и JQuery Progressbar UI. Затем создайте все необходимые папки и скопируйте в них файлы, упомянутые ниже.

  • css – для .css файлов.
  • img – для изображений.
  • js – для скриптов.
  • uploads – для сохранения загруженных файлов.
-css 
  -style.css 
-img 
  -images files here 
-js 
   -jquery-progressbar.min.js 
   -plupload.full.js 
   -plupload.flash.swf 
   -plupload.silverlight.xap 
-uploads 
   -uploaded files goes here
 -index.html 
-upload.php

Шаг 2 - HTML разметка

Создайте контейнер <div> с классом upload-form и идентификатором uploader. Затем нужно добавить заголовок, кнопки закрытия, текст, кнопки загрузки и выбора, контейнер в который мы добавим загруженные файлы, прогресс-бар и закрытие формы.

<div class="upload-form" id="uploader">
        <!-- Form Heading -->
<h1 class="replace-text">Upload Form</h1>
<a href="#" class="close" title="Close Window"><img src="/img/close-button.png" alt="Close"></a>         <p>Laos, alongside many of its Southeast Asian neighbours, is well known for producing.</p>         <!-- Select & Upload Button -->
<div>
<a class="button" id="pickfiles" href="#">Select</a>
<a class="button" id="uploadfiles" href="#">Upload</a>
</div>         <!-- File List -->
<div id="filelist" class="cb"></div>         <!-- Progress Bar -->
<div id="progressbar"></div>         <!-- Close After Upload -->
<div id="closeAfter">
<span class="checkbox">
<input type="checkbox" name="checkbox" id="checkbox">
<label for="checkbox">Close window after upload</label>
</span>
</div> </div>

форма загрузки html

Шаг 3 - Добавление файлов со скриптами

Далее мы добавим JS скрипты, которые мы используем в будущей форме загрузки. Начнем с добавления JQueryAPI, для этого я использовал Google CDN, вы можете скачать jQuery с официального сайта и разместить на собственном сервере. Далее добавим файлы plupload.full.js и JQuery-progressbar.min.js. Добавьте все эти скрипты, в секцию <head> вашей страницы.

<head>
 <meta charset="utf-8">
 <title>Upload Form</title>
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="/js/plupload.full.js"></script>
<script src="/js/jquery-progressbar.min.js"></script>
<script>
/* Upload Form Configuration Here */
</script>
</head>

Шаг 4 - Конфигурация формы загрузки

На этом шаге мы добавим функциональность формы. Без этого кода она не будет работать. Я прокомментировал каждую часть кода. Для использования дополнительных настроек конфигурации вы можете прочитать документацию Plupload.

<script type="text/javascript">// <![CDATA[
// Форма загрузки
$(function() {
// Настройки ////////////////////////////////////////////////
var uploader = new plupload.Uploader({
runtimes : 'html5,flash,silverlight', // Установка времени ожидания, используем HTML5, если не поддерживается то Flash
browse_button : 'pickfiles', // Установка идентификатора на кнопку выбора файлов
multi_selection: false, // Разрешение на выбор только одного файла
container : 'uploader', // Идентификатор контейнера формы загрузки
max_file_size : '100kb', // Максимальный размер загружаемого файла
url : 'upload.php', // Путь к файлу upload.php
flash_swf_url : 'js/plupload.flash.swf', // Путь к flash файлу
silverlight_xap_url : 'js/plupload.silverlight.xap', // Путь к файлу silverlight
filters : [ {title : "Image files", extensions : "jpg,gif,png"} ] //Фильтрация файлов, которые будут отображаться в окне выбора файлов
}); // Начало загрузки ////////////////////////////////////////////
// При нажатии на кнопки с идентификатором "#uploadfiles", начнется загрузка файла
$('#uploadfiles').click(function(e) {
uploader.start();
e.preventDefault();
}); uploader.init(); // Инициализация экземпляра загрузчика и добавление обработчиков // Выбор файлов //////////////////////////////////////////
// Когда пользователь выбирает файл, он будет присваиваться контейнеру "addedFile" с идентификатором "#filelist".
// Данный контейнер будет содержать информацию о файле и кнопку удаления
uploader.bind('FilesAdded', function(up, files) {
$.each(files, function(i, file) {
$('#filelist').append(' <div class="addedFile" id="' + file.id + '">' + file.name + '<a href="#" id="' + file.id + '" class="removeFile"></a>' + '</div> ');
});
up.refresh(); // Смена Flash/Silverlight
}); // Сообщение об ошибке /////////////////////////////////////////////
// Если возникнет ошибка, появиться всплывающее окно с кодом и сообщением ошибки
// Пример: превышение размера файла
uploader.bind('Error', function(up, err) {
alert("Error: " + err.code + ", Message: " + err.message + (err.file ? ", File: " + err.file.name : "") + "");
up.refresh(); // Смена Flash/Silverlight
}); // Кнопка удаления файла //////////////////////////////////////
// При нажатии удалить файл из очереди
$('a.removeFile').live('click', function(e) {
uploader.removeFile(uploader.getFile(this.id));
$('#'+this.id).remove();
e.preventDefault();
}); // Прогресс бар ////////////////////////////////////////////
// Добавление прогресс бара при запуске загрузки
// Добавляет подсказку с процентом загрузки
uploader.bind('UploadProgress', function(up, file) {
var progressBarValue = up.total.percent;
$('#progressbar').fadeIn().progressbar({
value: progressBarValue
});
$('#progressbar .ui-progressbar-value').html('<span class="progressTooltip">' + up.total.percent + '%</span>');
}); // Закрытие окна после загрузки ///////////////////////////////
// Чекбокс закрытия окна после загрузки
uploader.bind('UploadComplete', function() {
if ($('.upload-form #checkbox').attr('checked')) {
$('.upload-form').fadeOut('slow');
}
}); // Закрытие окна ////////////////////////////////////////////
// При нажатии на кнопку закрывать окно
$('.upload-form .close').on('click', function(e) {
$('.upload-form').fadeOut('slow');
e.preventDefault();
}); }); // конец конфигурации формы загрузки
// ]]></script>

Шаг 5 – Стиль формы

Перейдем к стилю нашей формы. Сначала произведем сброс стилей всех элементов, которые мы будем использовать. Затем добавим стиль для контейнера: добавим фон и сверху CSS3 градиент, установим ширину в 200px (250px с отступами), минимальную высоту в 180px (270px с отступами), мы должны установить минимальную высоту, т.к. при добавлении файла для формы загрузки, окно должно быть больше, также добавим скругленные углы.

/* Сброс */
.upload-form,
.upload-form div,
.upload-form span,
.upload-form input,
.upload-form a,
.upload-form h1,
.upload-form p {
    margin: 0;
    padding: 0;
    border: none;
    outline: none;
}

/* Контейнер */
.upload-form {
    position: relative;
    z-index: 100;
    cursor: default;
    width: 200px;
    min-height: 180px;
    padding: 25px 25px 65px 25px;

    -webkit-border-radius: 3px;
    -moz-border-radius: 3px;
    border-radius: 3px;

    background: url(../img/upload-bg.png);
    background: -webkit-linear-gradient(top, rgba(255,255,255,0.1) 0%, rgba(0,0,0,0.1) 100%), url(../img/upload-bg.png);
    background: -moz-linear-gradient(top, rgba(255,255,255,0.1) 0%, rgba(0,0,0,0.1) 100%), url(../img/upload-bg.png);
    background: -o-linear-gradient(top, rgba(255,255,255,0.1) 0%, rgba(0,0,0,0.1) 100%), url(../img/upload-bg.png);
    background: -ms-linear-gradient(top, rgba(255,255,255,0.1) 0%, rgba(0,0,0,0.1) 100%), url(../img/upload-bg.png);
    background: linear-gradient(top, rgba(255,255,255,0.1) 0%, rgba(0,0,0,0.1) 100%), url(../img/upload-bg.png);
}

.upload-form .cb { clear: both; }

форма загрузки PHP

Шаг 6 – заголовок, кнопка закрытия и текст

Для заголовка настроим шрифт, размер, цвет и т. д. Я добавил изображение для заголовка, поэтому я создал новый класс replace-text, чтобы заменить текст изображения, мы спрячем текст с помощью text-indent и добавим изображение в качестве фона. Для кнопки закрытия, настроим ширину и высоту и разместим её на форме. В завершение, добавим некоторые основные стили для текста.

/* Заголовок */
.upload-form h1 {
    font-family: 'Trebuchet MS', sans-serif;
    font-weight: bold;
    text-transform: uppercase;
    font-size: 18px;
    color: #f6f6f6;
    text-shadow: 0px 1px 1px rgba(0,0,0, .65);
    padding-bottom: 2px;
    border-bottom: 1px solid #7a7b80;
}

/* Смена текста на изображение */
.upload-form h1.replace-text {
    display: block;
    width: 100%;
    height: 17px;
    padding-bottom: 7px;
    text-indent: -9999px;
    background: url(../img/title.png) no-repeat left center;
}

/* Кнопка закрытия */
.upload-form .close {
    position: absolute;
    display: block;
    width: 12px;
    height: 12px;
    top: 28px;
    right: 24px;
}

/* Параграф */
.upload-form p {
    padding: 10px 0;
    font-family: sans-serif;
    font-size: 12px;
    color: #a4a5a8;
}

upload form

Шаг 7 – Кнопки выбора и загрузки

На данном этапе мы настроим стиль кнопок. Начнем с добавления стилей (CSS3 градиенты, шрифт, размер и цвет, и т.д.). Для кнопки выбора: установим ширину 99px; сделаем левый угол скругленным, добавим правую рамку. Для кнопки загрузки мы установим ширину в 100px и сделаем скругленные углы.

/* Select & Upload Buttons */
.upload-form .button {
    display: inline-block;
    height: 30px;
    margin: 15px 0;

    font-family: sans-serif;
    font-size: 14px;
    color: #777;

    text-decoration: none;
    text-transform: uppercase;
    text-align: center;
    line-height: 30px;

    background: #ffffff;
    background: -webkit-linear-gradient(top, #ffffff 0%, #f6f6f6 100%);
    background: -moz-linear-gradient(top, #ffffff 0%, #f6f6f6 100%);
    background: -o-linear-gradient(top, #ffffff 0%, #f6f6f6 100%);
    background: -ms-linear-gradient(top, #ffffff 0%, #f6f6f6 100%);
    background: linear-gradient(top, #ffffff 0%, #f6f6f6 100%);
}

.upload-form .button:hover {
    background: #f2f2f2;
    background: -webkit-linear-gradient(top, #f2f2f2 0%, #eaeaea 100%);
    background: -moz-linear-gradient(top, #f2f2f2 0%, #eaeaea 100%);
    background: -o-linear-gradient(top, #f2f2f2 0%, #eaeaea 100%);
    background: -ms-linear-gradient(top, #f2f2f2 0%, #eaeaea 100%);
    background: linear-gradient(top, #f2f2f2 0%, #eaeaea 100%);
}

.upload-form #pickfiles {
    width: 99px;
    float: left;
    border-right: 1px solid #999;

    -webkit-border-radius: 3px 0 0 3px;
    -moz-border-radius: 3px 0 0 3px;
    border-radius: 3px 0 0 3px;
}

.upload-form #uploadfiles {
    width: 100px;
    float: right;

    -webkit-border-radius: 0 3px 3px 0;
    -moz-border-radius: 0 3px 3px 0;
    border-radius: 0 3px 3px 0;
}

upload form html

Шаг 8 - Выбор файлов

Далее настраивать стиль списка файлов, которые пользователь добавил в очередь формы загрузки. Установим некоторые основные стили (фон, оформление, размер и т.д.). Также настроим стиль кнопки "удалить файл из очереди ".

/* Добавление файлов */
.upload-form .addedFile {
    position: relative;
    display: block;
    overflow: hidden;
    word-break: break-all;
    margin-bottom: 5px;
    padding: 0 0 0 25px;
    height: 30px;

    font-family: sans-serif;
    font-size: 12px;
    line-height: 30px;
    color: #646464;

    background: #f6f6f6 url(../img/file.png) no-repeat 5px center;

    -webkit-border-radius: 3px;
    -moz-border-radius: 3px;
    border-radius: 3px;
}

/* Кнопка удаления файлов */
.upload-form a.removeFile {
    position: absolute;
    display: block;
    width: 10px;
    height: 10px;
    top: 10px;
    right: 10px;
    background: url(../img/remove-file.png);
}

upload form php

Шаг 9 – Индикатор формы загрузки

Перейдем к стилю индикатора загрузки. Для этого мы будем использовать библиотеку JQuery. Установим высоту в 4px и скругленные углы в 1px. Затем зададим цвет фона по умолчанию и добавим тени. После этого настроим стиль индикатора загрузки, для этого используем CSS3 градиент зеленого цвета. В завершение мы добавим стиль для подсказок с процентом загрузки.

/* Progress Bar */
.upload-form .ui-progressbar,
.upload-form .ui-progressbar-value {
    position: relative;
    height: 4px;

    -webkit-border-radius: 1px;
    -moz-border-radius: 1px;
    border-radius: 1px;
}

.upload-form .ui-progressbar {
    cursor: pointer;
    margin: 15px 0 20px 0;
    background: #242424;

    -webkit-box-shadow: 0px 1px 0px rgba(255,255,255, .1);
    -moz-box-shadow: 0px 1px 0px rgba(255,255,255, .1);
    box-shadow: 0px 1px 0px rgba(255,255,255, .1);
}

.upload-form .ui-progressbar-value {
    background: #82d344;
    background: -webkit-linear-gradient(top, #82d344 0%, #51af34 100%);
    background: -moz-linear-gradient(top, #82d344 0%, #51af34 100%);
    background: -o-linear-gradient(top, #82d344 0%, #51af34 100%);
    background: -ms-linear-gradient(top, #82d344 0%, #51af34 100%);
    background: linear-gradient(top, #82d344 0%, #51af34 100%);
}

.upload-form .ui-progressbar-value span.progressTooltip {
    position: absolute;
    display: block;
    width: 36px;
    height: 14px;
    padding: 5px 0 4px 0;
    top: 10px;
    right: -18px;

    font-family: sans-serif;
    font-weight: bold;
    line-height: 14px;
    text-align: center;
    font-size: 12px;
    color: #646464;

    background: transparent url(../img/tooltip.png) no-repeat;
}

создание формы загрузки

Шаг 10 – Кнопка проверки

Сначала кнопка будет скрыта, затем обновим её при помощи jQuery.

Поскольку у некоторых пользователей, отключен JavaScript, добавим резервный код - дополнительный класс js. Таким образом, стиль кнопки будут видеть только те пользователи, у которых включен JavaScript.

.upload-form #closeAfter {
    position: absolute;
    bottom: 25px;
    left: 25px;
}

.js .upload-form span.checkbox input[type=checkbox] {
    position: fixed;
    left: -99px;
}

.upload-form span.checkbox {
    position: relative;
    margin-top: 15px;
    float: left;
}

.js .upload-form span.checkbox {
    width: 21px;
    height: 21px;
    cursor: pointer;
    background: url(../img/checkbox.png) no-repeat 0 -21px;
}

.js .upload-form span.checked { background-position: 0 0; }

.upload-form span.checkbox label {
    position: absolute;
    top: 3px;
    left: 31px;
    font-family: sans-serif;
    font-weight: bold;
    font-size: 12px;
    color: #e4e4e4;
    white-space: nowrap;
}

make upload form

Шаг 11 - Скрипт кнопки проверки

При загрузке, добавим класс js, а также отметку "checked".

<script>
// Стиль Check Box
$(document).ready(function() { var checkbox = $('.upload-form span.checkbox'); // Проверка JavaScript
$('body').addClass('js');< // Установка статуса cheked при загрузке
checkbox.addClass('checked').children('input').attr('checked', true); // Обработчик
checkbox.on('click', function() { if ($(this).children('input').attr('checked')) {
$(this).children('input').attr('checked', false);
$(this).removeClass('checked');
} else {
$(this).children('input').attr('checked', true);
$(this).addClass('checked');
} }); });
</script>

php форма загрузки

Шаг 12 - upload.php

Откройте файл upload.php и закомментируйте следующую строку $targetDir = ini_get("upload_tmp_dir") . DIRECTORY_SEPARATOR . "plupload", уберите комментарий с этой строки $targetDir = 'uploads';.

Пример:

// Settings
//$targetDir = ini_get("upload_tmp_dir") . DIRECTORY_SEPARATOR . "plupload";
$targetDir = 'uploads';

Перевод статьи How to Create an Upload Form using jQuery, CSS3, HTML5 and PHP

Тэги: PHPform

Вход

Уважаемый пользователь! Мы обнаружили, что вы используете AdBlock и вынуждены скрыть часть материалов на нашем сайте. Siteacademy существует и развивается за счет доходов от рекламы. Просим внести наш сайт в список исключений или отключить Блокировщик рекламы на нашем сайте.