2017-02-06 7 views
0

Я создаю страницу, где я хочу, чтобы люди могли накладывать изображения, а затем загружать их на свой сервер.Скрыть/показать изображения внутри холста

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

Я загрузил тестовую страницу здесь: http://kaosmos.no/bokbodentest2/upload.html

Это мой код для холста:

<input type="checkbox"/>Check to hide img1 
<input type="checkbox"/>Check to hide img2 


<img class="bilder" id="img1" src="test1.png"> 
<img class="bilder" id="img2" src="test2.png"> 
<canvas id="canvas"></canvas> 

<script type="text/javascript"> 
var img1 = document.getElementById('img1'); 
var img2 = document.getElementById('img2'); 
var canvas = document.getElementById('canvas'); 
var context = canvas.getContext('2d'); 

canvas.width = img1.width; 
canvas.height = img1.height; 

context.globalAlpha = 1.0; 
context.drawImage(img1, 0, 0); 
context.globalAlpha = 0.5; //Remove if pngs have alpha 
context.drawImage(img2, 0, 0); 


</script> 

И CSS:

canvas { 
border: solid; 
overflow: hidden; 
} 

canvas img { 
width: 600px; 
position: absolute; 
mix-blend-mode: multiply; 
} 

.bilder { 
display: none; 
} 

Дисплей: нет; в классе «bilder», чтобы изображения не были видимыми за пределами холста. Как создать функцию для скрытия/отображения этих изображений?

Любая помощь очень ценится!

+0

Вы хотите показать/скрыть их * на холсте * или за его пределами? –

+0

Как только изображение нарисовано на холст, оно больше не связано с исходным элементом в DOM. Если вы хотите скрыть его на холсте, вам нужно будет перерисовать холст без вызова context.drawImage. –

+0

@MattMokary Я хочу показать/скрыть его на холсте, чтобы пользователь мог «составить» свою собственную комбинацию. – Kaosmos

ответ

1

С момента, когда изображение нарисовано на холст, оно больше не связано с исходным элементом в DOM, вы хотите скрыть его на холсте, так что вам нужно будет перерисовать холст каждый раз, когда вход изменен, не вызывая соответствующую функцию context.drawImage. Что-то в этих строках:

<input type="checkbox" onchange="draw()"/>Check to hide img1 
<input type="checkbox" onchange="draw()"/>Check to hide img2 


<img class="bilder" id="img1" src="test1.png"> 
<img class="bilder" id="img2" src="test2.png"> 
<canvas id="canvas"></canvas> 

<script type="text/javascript"> 
var img1 = document.getElementById('img1'); 
var img2 = document.getElementById('img2'); 
var canvas = document.getElementById('canvas'); 
var context = canvas.getContext('2d'); 
var inputs = document.querySelectorAll('input[type="checkbox"]'); 

canvas.width = img1.width; 
canvas.height = img1.height; 
function draw(){ 
    context.clearRect(0, 0, canvas.width, canvas.height); 
    context.globalAlpha = 1.0; 
    if(inputs[0].checked){ 
     context.drawImage(img1, 0, 0); 
    } 
    context.globalAlpha = 0.5; //Remove if pngs have alpha 
    if(inputs[1].checked){ 
     context.drawImage(img2, 0, 0); 
    } 
} 

</script> 
+0

Этот вид работ! Только проблема в том, что теперь флажок показывает оба изображения. Можно ли их разделить, чтобы каждое изображение его собственный флажок? Я обновил тестовую страницу с помощью этого кода: http://kaosmos.no/bokbodentest2/upload.html – Kaosmos

+0

My bad: typo. Просто замените 'if (input [0] .checked) {' with 'if (input [1] .checked) {' Я отредактировал его в главном ответе –

+0

Amazing! Спасибо!! – Kaosmos