Маска изображений не отображается при многократном использовании - PullRequest
0 голосов
/ 05 февраля 2019

Фон

Я показываю Изображение маски на веб-сайте и предлагает пользователям загрузить изображение ....

enter image description here

Как только пользователь загрузит изображение, я заполняю загруженное пользователем изображение внутри маски

enter image description here

Работает нормально в веб-сайт & в коде ручки: https://codepen.io/kidsdial/pen/wNqXEJ

Требование :

Теперь я пытаюсь загрузить два изображения маски, но на этот раз изображения маски неотображается как в codepen2: https://codepen.io/kidsdial/pen/OdjErW и в website2

html

<input type="file" id="fileupa" />
<input type="file" id="fileupb" />

<div class="minaimg masked-imga"   ondragover="onDragOver(event)"ondragover="onDragOver(event)" >
  <div draggable="true" ondragstart="onDragStart(event)" id="uploadedImg">
    <div class="minaimga">
      <!-- give an id for ease of selection -->
      <img id="target_img"  alt="">

      <div></div>

    </div>
  </div>
</div>

<div class="minaimg masked-imgb"   ondragover="onDragOver(event)"ondragover="onDragOver(event)" >
  <div draggable="true" ondragstart="onDragStart(event)" id="uploadedImg">
    <div class="minaimgb">
      <!-- give an id for ease of selection -->
      <img id="target_img"  alt="">

      <div></div>

    </div>
  </div>
</div>

css

.masked-imga {

  -webkit-mask-image: url(https://i.stack.imgur.com/EQpM4.png);
  mask-image: url(https://i.stack.imgur.com/EQpM4.png);
  -webkit-mask-position: center center;
  mask-position: center center;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;  

  display: block;
  width: 100%;
  height: 100%;
}

.minaimga {
  display: block;
  background-color: black;
}

.masked-imgb {

  -webkit-mask-image: url(https://i.stack.imgur.com/EQpM4.png);
  mask-image: url(https://i.stack.imgur.com/EQpM4.png);
  -webkit-mask-position: center center;
  mask-position: center center;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;  

  display: block;
  width: 100%;
  height: 100%;
}

.minaimgb {
  display: block;
  background-color: black;
}

скрипт

fileupa.onchange = e => {
 target_img.src = URL.createObjectURL(fileupa.files[0]);   
}

fileupb.onchange = e => {
 target_img.src = URL.createObjectURL(fileupb.files[0]);   
}

let prevX = 0, prevY = 0,translateX = 0, translateY = 0, scale = 1, zoomFactor = 0.1;

function onDragStart(evt) {
  if (evt.dataTransfer && evt.dataTransfer.setDragImage) {
evt.dataTransfer.setDragImage(evt.target.nextElementSibling, 0, 0);
  }
  prevX = evt.clientX;
  prevY = evt.clientY;
}

function onDragOver(evt) {
  translateX += evt.clientX - prevX;
  translateY += evt.clientY - prevY;
  prevX = evt.clientX;
  prevY = evt.clientY;
  updateStyle();
}

function updateStyle() 
{ 
let transform = "translate(" +translateX+ "px, "+ translateY + "px) scale("+scale+")"; 

if(document.querySelector('#uploadedImg img'))
document.querySelector('#uploadedImg img').style.transform = transform;
}

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Проблема в вашем коде вы используете тот же id на img тег target_img.IDs всегда уникальны.

Загрузка файла A

 <div class="minaimga">
          <!-- give an id for ease of selection -->
          <img id="target_imga"  alt="">

          <div></div>

        </div>

Загрузка файла B:

<div class="minaimgb">
      <!-- give an id for ease of selection -->
      <img id="target_imgb"  alt="">

      <div></div>

    </div>

Рабочая демонстрация

fileupa.onchange = e => {
 target_imga.src = URL.createObjectURL(fileupa.files[0]);   
}

fileupb.onchange = e => {
 target_imgb.src = URL.createObjectURL(fileupb.files[0]);   
}

Вы можете назначить height из .minaimga,.minaimgb этих двух классов.

 .minaimga,.minaimgb {
      display: block;
      background-color: black;
      height:500px;
    }
0 голосов
/ 05 февраля 2019

Вы не можете использовать идентификатор дважды.Идентификаторы всегда уникальны.Вы должны использовать классы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...