Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: отображение миниатюр

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
kuller
Отправлено: 27 Апреля, 2016 - 05:06:29
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 561
Дата рег-ции: Нояб. 2009  


Помог: 2 раз(а)




разобрался!

(Отредактировано автором: 27 Апреля, 2016 - 05:37:06)

 
 Top
kuller
Отправлено: 28 Апреля, 2016 - 10:36:34
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 561
Дата рег-ции: Нояб. 2009  


Помог: 2 раз(а)




хотя не что не разобрался Огорчение

есть функция которая при выборе фото делает привю

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. var objects = function loadingPreview()
  3. {
  4. var previewWidth = 70, // ширина превью
  5.         previewHeight = 70, // высота превью
  6.         count = 0, // включить максимальное кол-во загружаемых фото. 0 - нет.1 - да
  7.         total = 5, // колько фото разрешено загружать
  8.         maxFileSize = 11 * 1024 * 1024, // (байт) Максимальный размер файла (2мб)
  9.         selectedFiles = {},// объект, в котором будут храниться выбранные файлы
  10.         queue = [],
  11.         image = new Image(),
  12.         imgLoadHandler,
  13.         isProcessing = false,
  14.         errorMsg, // сообщение об ошибке при валидации файла
  15.         previewPhotoContainer = document.querySelector('#preview-photo'); // контейнер, в котором будут отображаться превью
  16.        
  17. // Когда пользователь выбрал файлы, обрабатываем их
  18. $('input[type=file][id=photo]').on('change', function() {
  19.         var newFiles = $(this)[0].files; // массив с выбранными файлами
  20.        
  21.         for(var i = 0; i < newFiles.length; i++)
  22.         {
  23.                 if(count == 1)
  24.                 {
  25.                         if(Object.keys(selectedFiles).length >= total)
  26.                         {
  27.                                 soundError();
  28.                                 $('#error').fadeIn(1000);
  29.                                 $("#error").html('<div style="color: #fff; font: 17px roboto; margin-bottom: 15px; text-align: center;">Загружать можно максимом 5 фотографий</div>');
  30.                                 error();
  31.                                 continue;
  32.                         }
  33.                 }
  34.                
  35.                 var file = newFiles[i];
  36.                
  37.                 // В качестве "ключей" в объекте selectedFiles используем названия файлов
  38.                 // чтобы пользователь не мог добавлять один и тот же файл
  39.                 // Если файл с текущим названием уже существует в массиве, переходим к следующему файлу
  40.                 if(selectedFiles[file.name] != undefined) continue;
  41.                
  42.                 // Валидация файлов (проверяем формат и размер)
  43.                 if(errorMsg = validateFile(file))
  44.                 {
  45.                         soundError();
  46.                         $('#error').fadeIn(1000);
  47.                         $("#error").html('<div style="color: #fff; font: 17px roboto; margin-bottom: 15px; text-align: center;">'+errorMsg+'</div>');
  48.                         error();
  49.                         return;
  50.                 }
  51.  
  52.                 // Добавляем файл в объект selectedFiles
  53.                 selectedFiles[file.name] = file;
  54.                 queue.push(file);
  55.         }
  56.  
  57.         $(this).val('');
  58.         processQueue(); // запускаем процесс создания миниатюр
  59. });
  60.  
  61. // Валидация выбранного файла (формат, размер)
  62. var validateFile = function(file)
  63. {
  64.         if(!file.type.match(/image\/(jpeg|jpg|png|gif)/))
  65.         {
  66.                 return 'Фотография должна быть в формате jpg, png или gif';
  67.         }
  68.  
  69.         if(file.size > maxFileSize)
  70.         {
  71.                 return 'Размер фотографии не должен превышать 10 Мб';
  72.         }
  73. };
  74.  
  75. var listen = function(element, event, fn)
  76. {
  77.         return element.addEventListener(event, fn, false);
  78. };
  79.  
  80. // Создание миниатюры
  81. var processQueue = function()
  82. {
  83.         // Миниатюры будут создаваться поочередно
  84.         // чтобы в один момент времени не происходило создание нескольких миниатюр
  85.         // проверяем запущен ли процесс
  86.         if (isProcessing) { return; }
  87.  
  88.         // Если файлы в очереди закончились, завершаем процесс
  89.         if (queue.length == 0) {
  90.                 isProcessing = false;
  91.                 return;
  92.         }
  93.  
  94.         isProcessing = true;
  95.  
  96.         var file = queue.pop(); // Берем один файл из очереди
  97.        
  98.         var li = document.createElement('LI');
  99.         var span = document.createElement('SPAN');
  100.         var spanDel = document.createElement('SPAN');
  101.         var canvas = document.createElement('CANVAS');
  102.         var ctx = canvas.getContext('2d');
  103.        
  104.         canvas.setAttribute('width', previewWidth);
  105.         canvas.setAttribute('height', previewHeight);
  106.        
  107.         span.setAttribute('class', 'img');
  108.         spanDel.setAttribute('class', 'fa fa-ban delete');
  109.         spanDel.innerHTML = '';
  110.  
  111.         li.appendChild(span);
  112.         li.appendChild(spanDel);
  113.         li.setAttribute('data-id', file.name);
  114.  
  115.         image.removeEventListener('load', imgLoadHandler, false);
  116.  
  117.         // создаем миниатюру
  118.         imgLoadHandler = function()
  119.         {
  120.                 ctx.drawImage(image, 0, 0, previewWidth, previewHeight);
  121.                 URL.revokeObjectURL(image.src);
  122.                 span.appendChild(canvas);
  123.  
  124.                 isProcessing = false;
  125.                 setTimeout(processQueue, 200); // запускаем процесс создания миниатюры для следующего изображения
  126.         };
  127.  
  128.         // Выводим миниатюру в контейнере previewPhotoContainer
  129.         previewPhotoContainer.appendChild(li);
  130.         listen(image, 'load', imgLoadHandler);
  131.         image.src = URL.createObjectURL(file);
  132.        
  133.         // Сохраняем содержимое оригинального файла в base64 в отдельном поле формы
  134.         // чтобы при отправке формы файл был передан на сервер
  135.         var fr = new FileReader();
  136.         fr.readAsDataURL(file);
  137.         fr.onload = (function (file) {
  138.                 return function (e) {
  139.                         $('#preview-photo').append(
  140.                                         '<input type="hidden" name="photos[]" value="' + e.target.result + '" data-id="' + file.name+ '">'
  141.                         );
  142.                 }
  143.         }) (file);
  144. };
  145.  
  146. // Удаление фотографии
  147. $(document).on('click', '#preview-photo li span.delete', function()
  148. {
  149.         var fileId = $(this).parents('li').attr('data-id');
  150.  
  151.         if (selectedFiles[fileId] != undefined) delete selectedFiles[fileId]; // Удаляем файл из объекта selectedFiles
  152.         $(this).parents('li').remove(); // Удаляем превью
  153.         $('input[name^=photo][data-id="' + fileId + '"]').remove(); // Удаляем поле с содержимым файла
  154.  
  155. });
  156. }
  157.  


эта функция занимается отправкой формы
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. function addObj(form)
  3. {
  4.         var formData = new FormData(form);
  5.         var photo = $('#photo').val();
  6.  
  7.         formData.append('name', $('#name').val());
  8.         formData.append('photo', objects.photo);
  9.        
  10.         ShowLoading('');
  11.         $.ajax({
  12.                 url: "/functions.php",
  13.                 type: "POST",
  14.                 dataType : "json",
  15.                 cache: false,
  16.                 contentType: false,
  17.                 processData: false,                    
  18.                 data: formData, //указываем что отправляем
  19.                 success: function(data)
  20.                 {
  21.                         HideLoading(data);
  22.                         switch(data.ok)
  23.                         {
  24.                                 case 'Y':
  25.                                         $("#IdForm").fadeOut(900);
  26.                                
  27.                                         setTimeout(function()
  28.                                         {
  29.                                                 $(".ResAddObj").html('<div style="font: 23px roboto; text-align: center;">Ваше объявление успешно добавлено. Вам перезвонят ближайшее время!</div>');
  30.                                                 scroll(0,0);
  31.                                         }, 1000);
  32.                                 break;
  33.                                
  34.                                 case '1':
  35.                                         soundError();
  36.                                         $('#error').fadeIn(1000);
  37.                                         $("#error").html('<div style="color: #fff; font: 17px roboto; margin-bottom: 15px; text-align: center;">Некорректно указано имя</div>');
  38.                                         error();
  39.                                 break;
  40.                                
  41.                                 /* вообщем далее отображение ошибок */
  42.                         }
  43.                 }
  44.         });
  45.        
  46.         return false;
  47. }
  48.  


В каком виде сейчас выложен код не создаются привю изображений после выбора. Пробовал делать из двух функций объекты. В этом случае превю создаются, но не получается отправить файл. (пример кода вложении)
Помогите пожалуйста сделать.... времени нету уже разбираться с этим, да и не знаю уже в какую сторону копать
Скачать файл: javascript.txt
Скачан раз: 66
 
 Top
kuller
Отправлено: 28 Апреля, 2016 - 14:17:41
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 561
Дата рег-ции: Нояб. 2009  


Помог: 2 раз(а)




не понимаю не чего Огорчение Огорчение Огорчение

даже если менять саму суть вызова функции предрпросмотра, тогда уже сразу начинает либо нее создавать прет просмотр , либо не грузит файл Огорчение

так вот не грузит файл
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. test = function loadingPreview()
  3. {
  4.  // код
  5. }
  6.  

CODE (html):
скопировать код в буфер обмена
  1.  
  2. <input type="file" multiple="true" id="photo" name="photo[]" class="f_input" onclick="window['test']();">
  3.  


если сделать так
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. test = { loadingPreview: function()
  3. {
  4.  
  5. }}
  6.  


а в html не что не меняем, тогда загрузит файл, но не покажет прет просмотр изображения. Ну и понятно что предпросмотр не показывает т.к. функция вызывается не правильно. Если же опять подправить вызов функции в html

CODE (html):
скопировать код в буфер обмена
  1. <input type="file" multiple="true" id="photo" name="photo[]" class="f_input" onclick="test['loadingPreview']();">


тогда опять идентичный результат. прет просмотр работает, файл не грузить Огорчение как же сделать это?
 
 Top
IllusionMH
Отправлено: 28 Апреля, 2016 - 14:46:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




kuller, это вообще в 1 обработчике события. смотрели что в objects.photo? там точно File/Blob?
 
 Top
kuller
Отправлено: 28 Апреля, 2016 - 15:24:26
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 561
Дата рег-ции: Нояб. 2009  


Помог: 2 раз(а)




IllusionMH пишет:
kuller, это вообще в 1 обработчике события. смотрели что в objects.photo? там точно File/Blob?


сейчас посмотрел... и вообще не фига не понимаю. Не зависимо работает предпросмотрп или нет alert(objects.photo); показал undefined

попробовал сделать так сейчас. Результат опять не изменился заместо objects.photo передать objects['loadingPreview'] тоже в одном случае грузит, в другом нет.

может быть ли проблема зависит в том что функция loadingPreview срабатывает только при первом вызове, а при втором уже не работает? сделал такой вывод т.к. если в инпут писать objects3['loadingPreview'](); - ошибка т.к. objects3 нет. и файл грузит, а вот так objects['loadingPreview'](); нет.

(Отредактировано автором: 28 Апреля, 2016 - 15:48:41)

 
 Top
kuller
Отправлено: 29 Апреля, 2016 - 00:48:26
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 561
Дата рег-ции: Нояб. 2009  


Помог: 2 раз(а)




похоже нашел в чем проблема.... но вот додумать не могу. сделал две простые именованные функции.

часть кода до проблемного участка
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. function loadingPreview()
  3. {
  4.         var previewWidth = 70, // ширина превью
  5.         previewHeight = 70, // высота превью
  6.         count = 0, // включить максимальное кол-во загружаемых фото. 0 - нет.1 - да
  7.         total = 5, // колько фото разрешено загружать
  8.         maxFileSize = 11 * 1024 * 1024, // (байт) Максимальный размер файла (2мб)
  9.         selectedFiles = {},// объект, в котором будут храниться выбранные файлы
  10.         queue = [],
  11.         image = new Image(),
  12.         imgLoadHandler,
  13.         isProcessing = false,
  14.         errorMsg, // сообщение об ошибке при валидации файла
  15.         previewPhotoContainer = document.querySelector('#preview-photo'); // контейнер, в котором будут отображаться превью
  16.        
  17. // Когда пользователь выбрал файлы, обрабатываем их
  18. $('input[type=file][id=photo]').on('change', function() {
  19.  


изменил change на click в результате код будет запускаться только по второму клику (вызову) соответственно предпросмотр будет показан по второму клику.
Если сделать так
по первому клику выбираем фото
при втором клике, первое фото отобразится, и выбираем второе фото.

после отправляем форму, в результате получаем. первое фото не загрузилось, второе загрузилось. Что здесь изменить не понимаю Разнесу! Я никому не нужен Плач
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB