Blog. Just Blog

Вставка изображения из буфера обмена на JavaScript

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Web-мастеру и не только | Автор: ManHunter
Вставка изображения из буфера обмена на JavaScript
Вставка изображения из буфера обмена на JavaScript

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

Начнем как всегда с небольшой теории. Для работы с буфером обмена в JavaScript имеется специальный интерфейс Clipboard API. Но для доступа к его методам требуется выполнение нескольких условий: web-страница должна быть открыта по протоколу https или должна хоститься на localhost, а также она должна находиться в активной вкладке браузера. Конечно же не стоит забывать о поддержке браузерами этих методов.

Для упрощения кода я приведу лишь саму вставку изображений на страницу, плюс небольшое стилевое оформление добавленных изображений. Верстка и стили простейшие.
  1. <div id="image_row"></div>
  1. <style type="text/css">
  2. .upload_img {
  3.     margin1px 2px 1px 2px;
  4.     float:left;
  5.     displayflex;
  6.     justify-contentcenter;
  7.     border-radius5px;
  8.     border2px solid #909090;
  9.     padding2px;
  10. }
  11.  
  12. .upload_img img  {
  13.     height250px;
  14.     border-radius5px;
  15. }
  16. </style>
Для реальных задач, естественно, область вставки изображений и их стили будут другие. Теперь главное - код обработчика вставки из буфера обмена.
  1. <script type="text/javascript">
  2. if (window.Clipboard) {
  3.   // Установить обработчик вставки
  4.   window.addEventListener("paste"pasteHandler);
  5.  
  6.   function pasteHandler(e) {
  7.     if (e.clipboardData) {
  8.       // Родительский элемент для вставки картинок
  9.       var parent_row=document.getElementById('image_row');
  10.  
  11.       // Получаем все содержимое буфера обмена
  12.       var items=e.clipboardData.items;
  13.       if (items) {
  14.         // Перебираем список на предмет изображений
  15.         for (var i=0i<items.lengthi++) {
  16.           // Это изображение?
  17.           if (items[i].type.indexOf('image')!==-1) {
  18.             // Получаем изображение в виде файла
  19.             var file=items[i].getAsFile();
  20.  
  21.             var reader = new FileReader();
  22.  
  23.             // Добавить изображение на страницу
  24.             reader.onloadend = function(evt) {
  25.               if (evt.target.readyState == FileReader.DONE) {
  26.                 var new_div=document.createElement('div');
  27.                 new_div.className='upload_img';
  28.                 var new_img=document.createElement('img');
  29.                 new_img.src evt.target.result;
  30.                 new_div.appendChild(new_img);
  31.                 parent_row.appendChild(new_div);
  32.               }
  33.             };
  34.  
  35.             // Кроссбраузерная загрузка изображения
  36.             var blob;
  37.             if (file.slice) {
  38.               blob=file.slice(0file.size);
  39.             }
  40.             else if (file.webkitSlice) {
  41.               blob=file.webkitSlice(0file.size);
  42.             }
  43.             else if (file.mozSlice) {
  44.               blob=file.mozSlice(0file.size);
  45.             }
  46.             reader.readAsDataURL(blob);
  47.           }
  48.         }
  49.       }
  50.     }
  51.   }
  52. }
  53. </script>
Код максимально упрощен, но в него легко добавить, например, проверку размера файла и размеров изображения, проверку количества загружаемых картинок, или, например, сделать предварительную фильтрацию типов файлов, которые вроде и относятся к картинкам, а на деле не нужны вам при загрузке. Варианты решений ограничены только рамками задачи и простором вашей фантазии.

Проверяя типы данных, которые содержатся в буфере обмена, можно обрабатывать не только картинки, но и файлы других типов, а также, например, текстовую информацию. Ну а непосредственно отправлять на сервер изображение со страницы можно при помощи кода, который представлен в одной из предыдущих статей. Изменения будут минимальные.

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

Поделиться ссылкой ВКонтакте
Просмотров: 129 | Комментариев: 0

Комментарии

Отзывы посетителей сайта о статье
Комментариeв нет

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.1 сек. / MySQL: 2 (0.0039 сек.) / Память: 4.5 Mb
Наверх