Правильный способ - использовать .stopPropagation
,
var Component = React.createClass({
handleParentClick: function() {
console.log('handleParentClick');
},
handleChildClick: function(e) {
e.stopPropagation();
console.log('handleChildClick');
},
render: function() {
return
Child
;
}
});
Ваши обработчики событий будут переданы экземплярами SyntheticEvent, кросс-браузерной оболочки вокруг собственного события браузера. Он имеет тот же интерфейс, что и собственное событие браузера, включая stopPropagation () и preventDefault (), за исключением того, что события работают одинаково во всех браузерах.
blockquote>Event System
Предполагаю, вы имеете в виду, чтобы загрузить изображение в холст и не загружать изображение с холста.
Возможно, было бы неплохо прочитать все материалы холста, которые у них есть здесь https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Canvas_tutorial/Using_images
Но в основном то, что вы хотите сделать, это создать изображение в javascript, и установите image.src = в любом месте файла. В случае загрузки изображений с пользователя на их конце вам понадобится использовать API файловой системы.
Вкратце приведен краткий пример: http://jsfiddle.net / influenztial / qy7h5 /
function handleImage(e){
var reader = new FileReader();
reader.onload = function(event){
var img = new Image();
img.onload = function(){
canvas.width = img.width;
canvas.height = img.height;
ctx.drawImage(img,0,0);
}
img.src = event.target.result;
}
reader.readAsDataURL(e.target.files[0]);
}
<script>
window.onload = function() {
var canvas=document.getElementById(“drawing”); // grabs the canvas element
var context=canvas.getContext(“2d”); // returns the 2d context object
var img=new Image() //creates a variable for a new image
img.src= “images/vft.jpg” // specifies the location of the image
context.drawImage(img,20,20); // draws the image at the specified x and y location
}
</script>
Проверить Демо
Не нужно FileReader *, лучше использовать метод URL.createObjectURL , который создаст символическую ссылку непосредственно в файл на диске. Это приведет к меньшему использованию памяти и даст дополнительное преимущество для ожидания только одного асинхронного события (один из img.onload
).
document.getElementById('inp').onchange = function(e) {
var img = new Image();
img.onload = draw;
img.onerror = failed;
img.src = URL.createObjectURL(this.files[0]);
};
function draw() {
var canvas = document.getElementById('canvas');
canvas.width = this.width;
canvas.height = this.height;
var ctx = canvas.getContext('2d');
ctx.drawImage(this, 0,0);
}
function failed() {
console.error("The provided file couldn't be loaded as an Image media");
}
<input type="file" id="inp">
<canvas id="canvas"></canvas>
* IIRC только несколько версий Chrome поддерживали FileReader, еще не поддерживая URL.createObejctURL, поэтому, если вы нацеливаете эти самые версии, вам может понадобиться FileReader ..