div Overlay для каждого div в массиве

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

Мой текущий сценарий java/jQuery включает в себя создание div для каждого объекта в массиве вместе с фоновым изображением (у меня также есть проблемы со ссылками. Однако у меня есть онлайн-ссылка, работающая для фонового изображения.).

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

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

Вы найдете в моей функции готовности документа код, который в настоящее время скрывает/показывает каждый оверлейный div.

Я хочу определить это для отдельных div в массиве, а не для всех.

$(document).ready(function() { 
  displayDesign();
  $( ".pagesListOverlay" ).mouseenter(function() {
    $( ".pagesListOverlay" ).hide()  ;
  });
});
var arrayVariableDesign = [
  {name: "object1", type:"type1", company:"company1", dateYear:"2017", dateMonth:"08", dateDay:"24", image:"../images/preview/noimg.png"},
  {name: "object2", type:"type1", company:"company1", dateYear:"2017", dateMonth:"01", dateDay:"20", image:"../images/preview/noimg.png"},
  {name: "object3", type:"type2", company:"company2", dateYear:"2016", dateMonth:"08", dateDay:"24", image:"../images/preview/noimg.png"},
  {name: "object4", type:"type3", company:"company3", dateYear:"2016", dateMonth:"03", dateDay:"04", image:"../images/preview/noimg.png"},
  {name: "object5", type:"type1", company:"company2", dateYear:"2017", dateMonth:"02", dateDay:"24", image:"../images/preview/noimg.png"},
  {name: "object6", type:"type2", company:"company1", dateYear:"2017", dateMonth:"08", dateDay:"20", image:"../images/preview/noimg.png"},
];
var arrayLength_Design = arrayVariableDesign.length;
var temp_Design;
    
function displayDesign() {
    
  for (i = 0; i < arrayLength_Design; i++) { 
    var sortDate_Design = arrayVariableDesign[i].dateYear + arrayVariableDesign[i].dateMonth + arrayVariableDesign[i].dateDay;
    temp_Design = document.createElement('div');
    temp_Design.className = 'pagesListBtn mobilePagesListBtn';
    temp_Design.style.background = "url(" + arrayVariableDesign[i].image.src + ")"; // https://stackoverflow.com/questions/9790347/set-an-image-object-as-a-div-background-image-using-javascript
    temp_Design.style.backgroundSize = "100%";
    temp_Design.style.backgroundRepeat = "no-repeat";
    temp_Design.style.backgroundPosition = "50% 50%";
    temp_Design.style.backgroundColor = "#C02024";
    temp_Design.innerHTML = "<div class='pagesListOverlay mobilePagesListOverlayBtn'>" + arrayVariableDesign[i].name + " for " + arrayVariableDesign[i].company + "<br>" + arrayVariableDesign[i].type + "<br>" + arrayVariableDesign[i].dateDay + "/" + arrayVariableDesign[i].dateMonth + "/" + arrayVariableDesign[i].dateYear + "</div>";
    document.getElementById("demo").appendChild(temp_Design);
  }
}
.pagesListBtn {
  z-index: 500;
  background-color: #C02024;  
  display: inline-block;         
}

.pagesListBtn:hover {
  background-color: #920400;    
}

.pagesListOverlay {
  padding-top: 0;
  margin: 0 auto;
  opacity: 0.8;
  display: inherit;
  background-color: white; 
  text-align: center;
  vertical-align: bottom;
  text-decoration:none;
  font-weight:900;
  line-height:30px;
}

.mobilePagesListBtn {
  min-height:150px;
  max-height:150px;
  width: 100%; /*295px*/
  padding: 0;
  margin-top: 25px;
  margin-bottom: -15px;
}

.mobilePagesListOverlayBtn {
  min-height:150px;
  max-height:150px;
  width: 100%; /*295px*/
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script>
<div id="demo"></div>

Я также испытываю две другие проблемы с этим кодом.

  1. Ссылки на изображения не работают, я просто скопировал и вставил из моего файла css

  2. Я получаю много «отсутствующих строгих утверждений везде» - я исправил это, добавив «использовать строгие»; к моему коду.

Спасибо за вашу помощь.


person Marain    schedule 05.09.2017    source источник
comment
Итак, вы хотите скрыть оверлей при вводе мыши... Но для этого div введено не все... Прямо на этом? И вы хотите, чтобы оверлей отображался обратно при отпускании мыши?   -  person Louys Patrice Bessette    schedule 05.09.2017
comment
Да наоборот дружище. Я просто сделал это, чтобы проверить отображение наложения.   -  person Marain    schedule 05.09.2017


Ответы (1)


Вы должны применить mouseenter и mouseleave к родителю .pagesListBtn. От $(this), на котором находится .pagesListBtn, найдите дочерние элементы pagesListOverlay, чтобы показать/скрыть их.

$(document).ready(function() { 
  displayDesign();
  $( ".pagesListBtn" ).mouseenter(function() {
    $( this ).find(".pagesListOverlay").fadeOut(800)  ;
  });
  $( ".pagesListBtn" ).mouseleave(function() {
    $( this ).find(".pagesListOverlay").fadeIn(800)  ;
  });
  
  
});
var arrayVariableDesign = [
  {name: "object1", type:"type1", company:"company1", dateYear:"2017", dateMonth:"08", dateDay:"24", image:"../images/preview/noimg.png"},
  {name: "object2", type:"type1", company:"company1", dateYear:"2017", dateMonth:"01", dateDay:"20", image:"../images/preview/noimg.png"},
  {name: "object3", type:"type2", company:"company2", dateYear:"2016", dateMonth:"08", dateDay:"24", image:"../images/preview/noimg.png"},
  {name: "object4", type:"type3", company:"company3", dateYear:"2016", dateMonth:"03", dateDay:"04", image:"../images/preview/noimg.png"},
  {name: "object5", type:"type1", company:"company2", dateYear:"2017", dateMonth:"02", dateDay:"24", image:"../images/preview/noimg.png"},
  {name: "object6", type:"type2", company:"company1", dateYear:"2017", dateMonth:"08", dateDay:"20", image:"../images/preview/noimg.png"},
];
var arrayLength_Design = arrayVariableDesign.length;
var temp_Design;
    
function displayDesign() {
    
  for (i = 0; i < arrayLength_Design; i++) { 
    var sortDate_Design = arrayVariableDesign[i].dateYear + arrayVariableDesign[i].dateMonth + arrayVariableDesign[i].dateDay;
    temp_Design = document.createElement('div');
    temp_Design.className = 'pagesListBtn mobilePagesListBtn';
    temp_Design.style.background = "url(" + arrayVariableDesign[i].image.src + ")"; // https://stackoverflow.com/questions/9790347/set-an-image-object-as-a-div-background-image-using-javascript
    temp_Design.style.backgroundSize = "100%";
    temp_Design.style.backgroundRepeat = "no-repeat";
    temp_Design.style.backgroundPosition = "50% 50%";
    temp_Design.style.backgroundColor = "#C02024";
    temp_Design.innerHTML = "<div class='pagesListOverlay mobilePagesListOverlayBtn'>" + arrayVariableDesign[i].name + " for " + arrayVariableDesign[i].company + "<br>" + arrayVariableDesign[i].type + "<br>" + arrayVariableDesign[i].dateDay + "/" + arrayVariableDesign[i].dateMonth + "/" + arrayVariableDesign[i].dateYear + "</div>";
    document.getElementById("demo").appendChild(temp_Design);
  }
}
.pagesListBtn {
  /*z-index: 500;*/
  background-color: #C02024;  
  /*display: inline-block;*/
  display:block;
}

.pagesListBtn:hover {
  background-color: #920400;    
}

.pagesListOverlay {
  padding: 0;   /* changed */
  margin: 0;    /* changed */
  height: 150px;    /* added */
  opacity: 0.8;
  display: inherit;
  background-color: white; 
  text-align: center;
  vertical-align: bottom;
  text-decoration:none;
  font-weight:900;
  line-height:30px;
}

.mobilePagesListBtn {
  height: 150px;      /* added */
  /*min-height:150px; 
  max-height:150px;*/
  width: 100%; /*295px*/
  padding: 0;
  margin-top: 25px;
  /*margin-bottom: -15px;*/
}

.mobilePagesListOverlayBtn {
  /*min-height:150px;
  max-height:150px;*/
  padding:0;    /* added */
  height: 150px;
  width: 100%; /*295px*/
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script>
<div id="demo"></div>

person Louys Patrice Bessette    schedule 05.09.2017
comment
Ого, спасибо, все прямо передо мной. Почему я не подумал об этом. Итак, как я могу анимировать это? Также есть одна маленькая проблема. Div перемещается, когда он скрыт/показан. - person Marain; 05.09.2017
comment
Это коснулось вашего CSS... Нервничающий эффект был вызван .pagesListBtn display:inline-block. И я удалил/изменил пару вещей. Для анимации я использовал fadeIn/fadeOut... Что очень приятно ;) - person Louys Patrice Bessette; 05.09.2017
comment
Привет, Луис, еще одна ошибка. У меня проблема с этим. Опубликовано как ответ ниже. - person Marain; 05.09.2017
comment
Хорошо, я понимаю ... Но вы не должны публиковать другой вопрос в качестве ответа, подобного этому ... Создайте еще один вопрос, пожалуйста. ;) Удалите этот ответ. Я легко найду ваш другой вопрос. - person Louys Patrice Bessette; 05.09.2017