Jquery: удалите <div>, сложенный над другим <div> на mouseenter, и восстановите этот <div> на mouseleave

Вот вызов:

У меня есть два div, наложенных друг на друга в файле HTML. Верхний div в основном прозрачен с использованием CSS, а нижний div имеет изображение в качестве фона. В mouseenter я хочу, чтобы верхний div исчез, а на mouseleave я хочу, чтобы верхний div вернулся.

$(document).ready(function() {

  $('.dimmer').on('mouseenter', event => {
    $(this).hide();
  }).on('mouseleave', event => {
    $(this).show();

  });


});
.experience {
  background: url("cmu-110.png") no-repeat center;
  height: 110px;
  width: 110px;
  z-index: 2;
}

.dimmer {
  background: rgba(238, 238, 238, .25);
  position: relative;
  top: -128px;
  z-index: 3;
}
<div>
  <div class = "experience"></div>
  <div class = "dimmer"></div>
</div>

Приведенный выше фрагмент кода jquery находится в отдельном файле и вызывается в заголовке HTML.

<head>
  <!--- Some head stuff like title, meta, calling css in separate file, etc --->

  <!--jquery-->
  <script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


  <script src = "interaction.js"></script>

</head>

Полная прозрачность: я новичок в jquery и впервые пытаюсь его использовать. Несмотря на то, что я проработал полный учебник по jquery codecademy, прочитал учебник w3C для школы, поискал другие сообщения stackoverflow и потратил более чем разумное количество времени, я не могу заставить это работать - вероятно, из-за глупой ошибки.

Спасибо за помощь!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
88
4

Ответы 4

Я считаю, что jquery '.on ("mouseout", handler)' в нижнем div должно быть достаточно, чтобы сделать верхний div видимым / плавным.

Этот пост должен вам помочь: jquery .mouseover () и .mouseout () с исчезновением

Если нет (если это не сработает), я бы сделал / предложил:

  1. Когда мышь входит в верхний div, активируйте функцию опроса setTimeout или .mouseMove, которая запускается каждые 1 секунду или около того, которая проверяет положение мыши и скрывает верхний div.
  2. Если мышь не находится в нижнем div (mousemove), отобразите верхний div и отключите опрос.

Вы можете найти на этом форуме информацию о том, как написать функцию опроса setTimeout и т. д. Если у меня будет немного времени на выходных, я попробую ...

Поверьте, это помогает.

Вы можете установить свойство видимости css как скрытое и видимое в mouseenter и mouseleave. Я поставил некоторое пространство между двумя div, чтобы эффект был отчетливо виден.

$(document).ready(function() {

  $('.dimmer').on('mouseenter', () => {
    $('.dimmer').css("visibility","hidden");
  }).on('mouseleave', () => {
    $('.dimmer').css("visibility","visible");

  });


});
.experience {
  background: red;
  height: 110px;
  width: 110px;
  z-index: 0;
}

.dimmer {
  background: blue;
  position: absolute;
  top: -10px;
  height: 110px;
  width: 110px;
  z-index: 1;
}
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
  <div class = "experience"></div>
  <div class = "dimmer"></div>
</div>

jQuery(document).ready(function(){
        jQuery(".dimmer").on({
		mouseenter: function () {
        jQuery(this).css('opacity', '0');
		},
		mouseleave: function () {
        jQuery(this).css('opacity', '1');
		}
	});
});
.experience {
  background: url("http://lorempixel.com/400/200/") no-repeat center;
  height: 110px;
  width: 110px;
  z-index: 2;
}

.imparant{
  position:relative;
  height: 110px;
  width: 110px;
}

.dimmer {
  background: rgba(238, 238, 238, .25);
  position: absolute;
  top: 0;
  left:0;
  right:0;
  bottom:0;
  z-index: 3;
  transition:opacity 320ms;
}
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<div class = "imparant">
  <div class = "experience"></div>
  <div class = "dimmer"></div>
</div>

Для этого совсем не обязательно использовать jQuery или javascript. Вы можете сделать это с помощью одного div, псевдоэлемента и стиля наведения:

.container{
  position:relative;
  height: 110px;
  width: 110px;
  background-image: url("https://randomuser.me/api/portraits/men/41.jpg");
}
.container::before{
  content: '';
  display: block;
  position: absolute;
  top: 0;
  right: 0; 
  bottom: 0;
  left: 0;
  background-color: rgba(0,0,0,0.5);
  transition: opacity 0.4s;
}

.container:hover::before{
  opacity: 0;
}
<div class = "container"></div>

Если по какой-то причине вы хотите сохранить лишние div, вы все равно можете это сделать, но вам нужно немного изменить правило наведения CSS. Если у вас все в порядке, перемещая .dimmer до .experience, вы можете просто навести курсор мыши непосредственно на элемент .dimmer:

.dimmer:hover { opacity: 0 }

В противном случае вам нужно будет использовать селектор потомков:

.outerDiv:hover .dimmer { opacity: 0 }

Вы специально спросили, как это сделать с помощью jQuery, и упомянули, что изучаете его, так что, возможно, вы уже знаете, как это сделать только в CSS, и в этом случае я приношу свои извинения.

Chris Boon 30.03.2018 05:47

Другие вопросы по теме