user5348fh8y5 user5348fh8y5 - 4 days ago 6
CSS Question

Can not upload images due to javascript conflict

we were giving an option to upload image using this code : https://jsfiddle.net/bwdzha94/ , it was working fine.

later we decided to display some canvas image , so we used : https://jsfiddle.net/pmeb1uhm/1/

now i merge both codes as here : jsfiddle.net/r22oka49/ [or below code snippet] , i cant upload images now.



var canvas = new fabric.Canvas('canvas');
document.getElementById('file').addEventListener("change", function (e) {
var file = e.target.files[0];
var reader = new FileReader();
reader.onload = function (f) {
var data = f.target.result;
fabric.Image.fromURL(data, function (img) {
// var oImg = img.set({left: 0, top: 0, angle: 00,width:100, height:100}).scale(0.9);
var oImg = img.set({left: 0, top: 0, angle: 00, width: canvas.getWidth(), height: canvas.getHeight()});
canvas.add(oImg).renderAll();
var a = canvas.setActiveObject(oImg);
var dataURL = canvas.toDataURL({format: 'png', quality: 0.8});
});
};
reader.readAsDataURL(file);
});


var img = new Image();
img.onload = function() {
//draw after loading
canvas = document.getElementById('case_canvas');
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, img.naturalWidth, img.naturalHeight);
}

img.src = "http://i.stack.imgur.com/xgNw7.png";
//^^ this will start loading the image

/*.canvas-container {
background: url("http://i.stack.imgur.com/xgNw7.png") no-repeat fixed center;
}
*/


#canvas
{
border: 1px solid black;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://rawgit.com/kangax/fabric.js/master/dist/fabric.min.js"></script>
<input type="file" id="file"><br />
<canvas id="canvas" width="450" height="450" ></canvas>

<div class="canvas-container" style="width: 300px; height: 500px; position: relative; -webkit-user-select: none;">
<canvas id="case_canvas" width="300" height="500" class="lower-canvas" style="position: absolute; width: 300px; height: 500px; left: 0px; top: 0px; -webkit-user-select: none;"></canvas>
<canvas class="upper-canvas " width="300" height="500" style="position: absolute; width: 300px; height: 500px; left: 0px; top: 0px; -webkit-user-select: none; cursor: default;"></canvas>
</div>




Answer

You are missing var in the img.onload() which overwrites the fabric canvas.

img.onload = function() {
  //draw after loading
  var canvas = document.getElementById('case_canvas');
  //^^ create local variable instead of using the global one
  var ctx = canvas.getContext("2d");
  ctx.drawImage(img, 0, 0, img.naturalWidth, img.naturalHeight);
}

Updated JSfiddle

Comments