Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Кропинг Jquery в слайдере (https://javascript.ru/forum/dom-window/39944-kroping-jquery-v-slajjdere.html)

imediasun1 18.07.2013 01:48

Кропинг Jquery в слайдере
 
Есть замечательный простой кропинг который и центрует изображение и правильно его обрезает
<script src="/js/jquery.resizecrop-1.0.3.min.js"></script>
<script>
  
  $(document).ready(function(){
    $('.slide').resizecrop({
      width:320,
      height:320,
      vertical:"top"
    });  
  });  

</script>


Но вот проблема как его правильно прикрутить к слайдеру, в слайдере не хочет работать слайдер формируется из заранее выбранных изображений на клиенте на этой же странице следующим образом,
<script>
$(function()
	   {
	     $(".image").change(showPreviewImage_click);
   }
	 )
	 var num = 0;
	 function showPreviewImage_click(e) {
	   var $input = $(this);
	   var inputFiles = this.files;
	   if(inputFiles == undefined || inputFiles.length == 0) return;
	   for (var i = 0; i<inputFiles.length; i++) {
	     var id = 'id'+ ++num;
	     var input = $('<input/>', {'type': "radio", 'name': "slide_switch", 'id': id,'checked':"checked"});
	     input.appendTo($('.slider'));
	     var label = $('<label/>', {'for': id});
		
	     var img_min = $('<img/>', {'class': 'min'});
	     img_min.appendTo(label);
		 label.appendTo($('.slider'));
		
	     var inputFile = inputFiles[i];
	     var img = $('<img/>', {'class': 'slide'});
		 
	     img.appendTo($('.slider'));
	     var reader = new FileReader();
	 
	     reader.onload = (function (img1, img2)
	       {
	         return function(event) {
	           img1.attr("src", event.target.result);
	           img2.attr("src", event.target.result);
	         };
	       }
	     )(img_min, img)
	 
	     reader.onerror = function(event) {
	       alert("I AM ERROR: " + event.target.error.code);
	     };
	 
	     reader.readAsDataURL(inputFile);}
	 }
</script>

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

рони 18.07.2013 04:41

imediasun1,
зачем плодить новые темы ? и можно же подумать раз плагин работает с уже загруженными изображениями то и подключать его надо после загрузки изображения - после каждого изображения -- строка 32 дальше я думаю сами сообразите.

и вот это что то бессмысленное
Цитата:

Сообщение от imediasun1
'checked':"checked"});

10 "radio" будет выбран только один последний - нафига присваивать всем - присвойте последнему

imediasun1 18.07.2013 12:30

'checked':"checked"}); - для того чтобы слайд сразу отображался в слайдере без этого не отображается, а плагин прикрутить все таки не получается, напишите пожалуйста как это сделать, спасибо большое дело в том что слайдер перестает функционировать как слайдер если я уже на слайдер накладываю плагин кропинга, нужно как то сохранить наверное в переменную кропированное изображение и передавать его в слайдер, помогите пожалуйста до конца, может даже сохраняя на сервере как измененное изображение, я очень слаб в js пока что, я думаю вы успели заметить это спасибо

рони 18.07.2013 13:39

imediasun1,
resizecrop подключить к картинкам можно но что вы называите слайдером понятия неимею
Цитата:

Сообщение от imediasun1
слайдер перестает функционировать как слайдер


imediasun1 18.07.2013 15:04

Эти картинки составляют слайдер, может быть конфликтует с resizecrope вот этот плагин, но скорее всего я думаю я к картинкам не правильно resizecrop подключаю, напишите как вы бы подключили пожалуйста
работу самого слайдера можно посмотреть здесьhttp://thecodeplayer.com/walkthrough...zed-thumbnails

рони 18.07.2013 15:05

imediasun1,
:cray:
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
  <script src="http://resize-crop.googlecode.com/files/jquery.resizecrop-1.0.3.js"></script>
  <style type="text/css">

  .min {
    width: 45px;
  }

  </style>


</head>

<body>
 <input type="file" name="my-pic" id="file-field" class="image" multiple=""/>
 <div class="slider" ></div>
 <script>
 $(function()
   {
     $(".image").change(showPreviewImage_click);
   }
 )
 var num = 0;
 function showPreviewImage_click(e) {
   var $input = $(this);
   var inputFiles = this.files;
   if(inputFiles == undefined || inputFiles.length == 0) return;
   for (var i = 0; i<inputFiles.length; i++) {
     var id = 'id'+ ++num;
     var input = $('<input/>', {'type': "radio", 'name': "slide_switch", 'id': id});
     input.appendTo($('.slider'));
     var label = $('<label/>', {'for': id});
     var img_min = $('<img/>', {'class': 'min'});
     img_min.appendTo(label);
     label.appendTo($('.slider'));
     var inputFile = inputFiles[i];
     var img = $('<img/>', {'class': 'slide'});
     img.appendTo($('.slider'))
     var reader = new FileReader();

     reader.onload = (function (img1, img2)
       {
         return function(event) {
           img1.attr("src", event.target.result);
           img2.attr("src", event.target.result);
           img2.resizecrop({
           width:320,
           height:320,
           vertical:"top"
    });
         };
       }
     )(img_min, img)

     reader.onerror = function(event) {
       alert("I AM ERROR: " + event.target.error.code);
     };

     reader.readAsDataURL(inputFile);}
     input.prop({'checked': true})

 }
 </script>
</body>
</html>

imediasun1 18.07.2013 15:11

Спасибо, я так уже пробовал но не ресайзит

рони 18.07.2013 16:49

Цитата:

Сообщение от imediasun1
не ресайзит

то есть картинки неквадратные после загрузки?
зачем там скрипт непонятно -- всё на css в слайдере том

рони 18.07.2013 16:59

загружаем с Shift или Ctrl несколько фото и смотрим
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
  <script src="http://resize-crop.googlecode.com/files/jquery.resizecrop-1.0.3.js"></script>

  <style type="text/css">
  /*Time for the CSS*/
* {margin: 0; padding: 0;}
body {background: #ccc;}

.slider{
	width: 640px; /*Same as width of the large image*/
	position: relative;
	/*Instead of height we will use padding*/
	padding-top: 320px; /*That helps bring the labels down*/
	margin: 100px auto;
	/*Lets add a shadow*/
	box-shadow: 0 10px 20px -5px rgba(0, 0, 0, 0.75);
}


/*Last thing remaining is to add transitions*/
.slider > img{
    max-height: 320px;
    min-width: 640px;
    position: absolute;
	left: 0; top: 0;
	transition: all 0.5s;
}

.slider input[name='slide_switch'] {
	display: none;
}

.slider label {
	/*Lets add some spacing for the thumbnails*/
	margin: 18px 0 0 18px;
	border: 3px solid #999;

	float: left;
	cursor: pointer;
	transition: all 0.5s;

	/*Default style = low opacity*/
	opacity: 0.6;
}

.slider label img{
	display: block;
    height: 45px;
}

/*Time to add the click effects*/
.slider input[name='slide_switch']:checked+label {
	border-color: #666;
	opacity: 1;
}
/*Clicking any thumbnail now should change its opacity(style)*/
/*Time to work on the main images*/
.slider input[name='slide_switch'] ~ img {
	opacity: 0;
		-moz-transform: scale(1.1); /* Для Firefox */
    -ms-transform: scale(1.1); /* Для IE */
    -webkit-transform: scale(1.1); /* Для Safari, Chrome, iOS */
    -o-transform: scale(1.1); /* Для Opera */
    transform: scale(1.1);
}
/*That hides all main images at a 110% size
On click the images will be displayed at normal size to complete the effect
*/
.slider input[name='slide_switch']:checked+label+img {
	opacity: 1;
    -moz-transform: scale(1); /* Для Firefox */
    -ms-transform: scale(1); /* Для IE */
    -webkit-transform: scale(1); /* Для Safari, Chrome, iOS */
    -o-transform: scale(1); /* Для Opera */
    transform: scale(1);

}
/*Clicking on any thumbnail now should activate the image related to it*/

/*We are done :)*/


</style>


</head>

<body>
 <input type="file" name="my-pic" id="file-field" class="image" multiple=""/>
 <div class="slider" ></div>
 <script>
 $(function()
   {
     $(".image").change(showPreviewImage_click);
   }
 )
 var num = 0;
 function showPreviewImage_click(e) {
   var $input = $(this);
   var inputFiles = this.files;
   if(inputFiles == undefined || inputFiles.length == 0) return;
   for (var i = 0; i<inputFiles.length; i++) {
     var id = 'id'+ ++num;
     var input = $('<input/>', {'type': "radio", 'name': "slide_switch", 'id': id});
     input.appendTo($('.slider'));
     var label = $('<label/>', {'for': id});
     var img_min = $('<img/>', {'class': 'min'});
     img_min.appendTo(label);
     label.appendTo($('.slider'));
     var inputFile = inputFiles[i];
     var img = $('<img/>', {'class': 'slide'});
     img.appendTo($('.slider'))
     var reader = new FileReader();

     reader.onload = (function (img1, img2)
       {
         return function(event) {
           img1.attr("src", event.target.result);
           img2.attr("src", event.target.result);


         };
       }
     )(img_min, img)

     reader.onerror = function(event) {
       alert("I AM ERROR: " + event.target.error.code);
     };

     reader.readAsDataURL(inputFile);}
     input.prop({'checked': true});
   }
 </script>
</body>
</html>

imediasun1 18.07.2013 23:32

а где ресайз, мне надо чтобы загружаемые фотки были с кропом 320 на 320

imediasun1 18.07.2013 23:44

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

рони 19.07.2013 02:23

imediasun1,
всё что вы хотите и слайдер и кропи ресайз -- делается в ваших скриптах с помощью ксс настраивайте на свой лад стили -- тоже самое делают ваши скрипты только автоматом - у меня и 320px квадрат и слайдер работают без дополнительных скриптов -- просто отрегулировал ксс.

imediasun1 20.07.2013 13:02

Вложений: 1
выложите пожалуйста окончательный код с ксс, рони, очень не хочется через сервер кроп делать, спасибо

рони 20.07.2013 19:37

Показ загружаемых картинок в виде слайдера
 
imediasun1,
думаю что настоящую обрезку можно сделать только на сервере, в скрипт добавил настройку показа фото сейчас берётся середина...
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
  <style type="text/css">*{
    margin:0;
    padding:0;
  }

  body{
    background:#ccc;
  }

  .slider{
    width:320px;
    position:relative;
    padding-top:320px;
    margin:100px auto;
    box-shadow:0 10px 20px -5px rgba(0,0,0,0.75);
    overflow:hidden;
    padding-bottom:20px;
  }

  .sp img{
    position:absolute;
    left:0;
    top:0;
  }

  .slider input[name='slide_switch']{
    display:none;
  }

  .slider label{
    margin:18px 0 0 18px;
    border:3px solid #999;
    float:left;
    cursor:pointer;
    transition:all 0.5s;
    opacity:0.6;
  }

  .slider label img{
    display:block;
    height:45px;
  }

  .slider input[name='slide_switch']:checked+label{
    border-color:#666;
    opacity:1;
  }

  .slider input[name='slide_switch']~span{
    opacity:0;
    -moz-transform:scale(1.1);
    -ms-transform:scale(1.1);
    -webkit-transform:scale(1.1);
    -o-transform:scale(1.1);
    transform:scale(1.1);
  }

  .slider input[name='slide_switch']:checked+label+span{
    opacity:1;
    -moz-transform:scale(1);
    -ms-transform:scale(1);
    -webkit-transform:scale(1);
    -o-transform:scale(1);
    transform:scale(1);
  }

  span{
    width:320px;
    position:absolute;
    left:0;
    top:0;
    height:320px;
    overflow:hidden;
    transition:all 0.5s;
  }
  </style>


</head>

<body>
 <input type="file" name="my-pic" id="file-field" class="image" multiple=""/><br>
 <div class="slider" ></div>
 <script>
 $(function () {
     $(".image").change(showPreviewImage_click);
 })
 var num = 0;

 function showPreviewImage_click(e) {
     var $input = $(this);
     var inputFiles = this.files;
     if (inputFiles == undefined || inputFiles.length == 0) return;
     for (var i = 0; i < inputFiles.length; i++) {
         var id = 'id' + ++num;
         var input = $('<input/>', {
             'type': "radio",
             'name': "slide_switch",
             'id': id
         });
         input.appendTo($('.slider'));
         var label = $('<label/>', {
             'for': id
         });
         var img_min = $('<img/>', {
             'class': 'min'
         });
         img_min.appendTo(label);
         label.appendTo($('.slider'));
         var inputFile = inputFiles[i];
         var img = $('<img/>', {
             'class': 'slide'
         });
         var span = $('<span/>', {
             'class': 'sp'
         })
         img.appendTo(span)
         span.appendTo($('.slider'))
         var reader = new FileReader();
         reader.onload = (function (img1, img2) {
             return function (event) {
                 img1.attr("src", event.target.result);
                 img2.load(function () {
                     var w = this.width;
                     var h = this.height;
                     w > h ? (this.height = 320, w = 320 * w / h, this.width = w, h = 320) : (this.width = 320, h = 320 * h / w, this.height = h, w = 320);
                     img2.css({
                         left: -(w - 320) / 2,//лево -> убрать в left /2  или право весь убрать весь left ->  left : -(h-320)/2, для горизонтальных картинок
                         top: -(h - 320) / 2  //низ -> убрать в top /2  или верх весь убрать весь top ->  ,top : -(h-320)/2 для вертикальных картинок
                     })
                 });
                 img2.attr("src", event.target.result);
             };
         })(img_min, img)
         reader.onerror = function (event) {
             alert("I AM ERROR: " + event.target.error.code);
         };
         reader.readAsDataURL(inputFile);
     }
     input.prop({
         'checked': true
     });
 }
 </script>
</body>
</html>

imediasun1 20.07.2013 19:54

Спасибо большое вам, Рони, у меня на сайте стаяла задача именно без сервера на определенном этапе показать в слайдере обрезанные изображения, вы очень помогли, все работает, приятного программирования


Часовой пояс GMT +3, время: 21:29.