悬停元素时更改背景

Posted

技术标签:

【中文标题】悬停元素时更改背景【英文标题】:Changing the background when hovering an element 【发布时间】:2022-01-18 02:11:08 【问题描述】:

我会先说我正在学习 javascript 和 Jquery。 我试图做一个减号,当鼠标悬停在一个元素上时,它会改变下一列中的背景图像。

现在我设法编写了这个函数,并且我还想在图像发生变化时插入一个动画。

我遇到的问题是将鼠标从一个菜单项传递到另一个菜单项。过渡不适用。我可能已经发现了问题:当鼠标离开项目时恢复背景的函数部分。

不过,我找不到解决方案。

这是目前编写的代码:

$(function() 
  $('.item-1').hover(function() 
    $('.col-img').css('background-image', 'url(https://i1.wp.com/www.giacomocusano.com/wp-content/uploads/2016/07/coastal-wash-web.jpg?fit=1024%2C682&ssl=1)');
  
  );
);
$(function() 
  $('.item-2').hover(function() 
    $('.col-img').css('background-image', 'url(https://www.chedonna.it/wp-content/uploads/2018/11/documentari.jpg');
  
  );
);
$(function() 
  $('.item-3').hover(function() 
    $('.col-img').css('background-image', 'url(https://www.artemedialab.it/wp-content/uploads/2019/04/immagini-sfondo-1-700x400.jpg');
  
  );
);
$(function() 
  $('.item-4').hover(function() 
    $('.col-img').css('background-image', 'url(https://www.radiomontecarlo.net/resizer/1200/720/true/cosmo-1592899369678.jpg--una_meravigliosa_farfalla_cosmica_si_aggira_nello_spazio__le_immagini_sono_mozzafiato.jpg?1592899369000');
  
  );
);
.dropdown-menu
  display:flex;
  align-items:center;
  height:100vh;

.col
  width:50%;
  padding: 20vw 10vw;

.col-img
  background-image: url(https://www.chimerarevo.com/wp-content/uploads/2020/04/immagini-gratis.jpg);
  height:100vh;
  transition: background 0.5s ease;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="dropdown-menu">
<div class="col col-img">
  Col img
</div>
<div class="col col-menu">
<ul>
<li><a href="#" class="item-1">Item 1</a></li>
<li><a href="#" class="item-2">Item 2</a></li>
<li><a href="#" class="item-3">Item 3</a></li>
<li><a href="#" class="item-4">Item 4</a></li>

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

http://jsfiddle.net/ahL3kd7w/

【问题讨论】:

【参考方案1】:

我认为您宁愿使用 data 属性将背景 url 存储在您的元素中。像这样,您可以稍后在脚本中使用 jQuery 轻松获得它。

https://api.jquery.com/data/

您可以使用以特定名称开头的选择器,例如 $("[class^='item-']")

https://api.jquery.com/attribute-starts-with-selector/

为了使改变背景生效,你可以使用回调来确保在动画完成时改变背景url。

https://api.jquery.com/fadeout/

$(function() 
  $("[class^='item-']").hover(function() 
    let bgURL = $(this).data("imgurl");
    
    // debug infos
    //console.clear();
    //console.log(bgURL);
    
    $('.col-img').fadeOut("fast", function() 
      // Animation complete
      $('.col-img').css('background-image', 'url(' + bgURL + ')').fadeIn("fast");
    );
  );
);
.dropdown-menu
  display:flex;
  align-items:center;
  height:100vh;

.col
  width:50%;
  padding: 20vw 10vw;

.col-img
  background-image: url(https://www.chimerarevo.com/wp-content/uploads/2020/04/immagini-gratis.jpg);
  height:100vh;
  transition: background 0.5s ease;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="dropdown-menu">
<div class="col col-img">
  Col img
</div>
<div class="col col-menu">
<ul>
<li><a href="#" class="item-1" data-imgurl="https://i1.wp.com/www.giacomocusano.com/wp-content/uploads/2016/07/coastal-wash-web.jpg?fit=1024%2C682&ssl=1">Item 1</a></li>
<li><a href="#" class="item-2" data-imgurl="https://www.chedonna.it/wp-content/uploads/2018/11/documentari.jpg">Item 2</a></li>
<li><a href="#" class="item-3" data-imgurl="https://www.artemedialab.it/wp-content/uploads/2019/04/immagini-sfondo-1-700x400.jpg">Item 3</a></li>
<li><a href="#" class="item-4" data-imgurl="https://www.radiomontecarlo.net/resizer/1200/720/true/cosmo-1592899369678.jpg--una_meravigliosa_farfalla_cosmica_si_aggira_nello_spazio__le_immagini_sono_mozzafiato.jpg?1592899369000">Item 4</a></li>

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

【讨论】:

感谢您的解决方案。在这种情况下,当菜单项上不再悬停时,背景将恢复为该列的默认背景。如果我希望它保留上次加载的背景,我该怎么办?我尝试删除最后一个函数,它确实保留了最后一个背景,但它再次加载它。 检查一下,我编辑了我的答案

以上是关于悬停元素时更改背景的主要内容,如果未能解决你的问题,请参考以下文章

悬停时更改父元素的背景颜色

悬停时更改 iframe 中元素的背景颜色

在悬停时使用 JQuery 更改背景颜色

如何在悬停效果上更改 div 元素内部的背景颜色?

Java Swing:在鼠标悬停时更改背景颜色

Java Swing:在鼠标悬停时更改背景颜色