2016-01-06 3 views
0

Я работаю с библиотекой jQuery JCrop, я предоставляю предварительный просмотр изображения после загрузки файла с помощью управления файлами HTML.Как настроить предварительный просмотр JQuery JCrop для обрезки после загрузки файла?

вид части (демо-данные)

<input type="file" id="photograph" /> 
<img src="#" id="target" /> 

код Javascript

// for setting img src 
function readURL(input) { 
    console.log("readURL"); 
    if (input.files && input.files[0]) { 
     var reader = new FileReader(); 

     reader.onload = function (e) { 
      $('#target').attr('src', e.target.result); 
      console.log("inside if =>"+e.target.result);  
     } 

     console.log("outside IF"); 
     reader.readAsDataURL(input.files[0]); 

    } 
} 

// for setting pre-selected cropping area 
function setProperties(){ 
    console.log("set properties"); 

    $('#target').Jcrop({   
       setSelect: [0,12,23,43] 
     }); 

} 

// on change event for fileupload 
$("#photograph").change(function(){ 
    console.log("change event called!"); 
    readURL(this); 
    setProperties(); 
}); 

выход

change event called! 
readURL 
outside IF 
set properties 
inside if=>data:image/jpeg;base64,/9j/4gIcSUNDX1BST0ZJTEUAAQEAAAIMbGNtcwIQAABtbnRyUkdC…sXK2t+4UdmuSVl64hb2gMHh1Nhm83DAdQJniIM6eZUxzuYCR2my3FSwGpVbzBdwlgrrc/ 

Я хочу установить некоторые свойства после загрузки файла изображения, но «внутри, если => "[см. вывод, опубликованный выше], вызывается в самом конце. так почему это происходит? и Как мне решить эту проблему?

+0

Это происходит потому, что 'reader.onload' требуется время для загрузки исходного изображения. Set Properties внутри 'onload', поэтому может работать отлично. –

+0

Так что же взлом для решения этой проблемы? – piechuckerr

+1

Вызов 'setProperties()' внутри 'reader.onload'. –

ответ

1

Вы должны вызвать setProperties после изображения source выставиться и изображения loaded

function readURL(input) { 
    console.log("readURL"); 
    if (input.files && input.files[0]) { 
     var reader = new FileReader(); 

     reader.onload = function (e) { 
      $('#target').attr('src', e.target.result); 
      console.log("inside if =>"+e.target.result); 
      // Call after source setted and image file loaded 
      setProperties();  
     } 

     console.log("outside IF"); 
     reader.readAsDataURL(input.files[0]); 

    } 
}