设置了背景图,但是第一次hover会闪烁,该如何解决?????

本文探讨了如何在鼠标悬停时动态切换图片,提出了两种解决方案:动态切换组件和动态切换背景图。针对第二种方案出现的首次悬停闪烁问题,通过预加载背景图的CSS伪元素技巧进行了优化,从而实现平滑的图片切换效果,提高了用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

铁打的营盘流水的兵

当下有这么一个需求,鼠标经过图片的时候,切换显示的图片

思索许久,倒也有了那么两三个解决方案

  • 方案一、动态切换显示的组件
  • 方案二、动态切换背景图的路径

基于以上的两种方案,分别给个简单的🌰:
方案一:
html:

<div>鼠标经过,切换背景图</div>
<comp1 v-if="isHover" :imgSrc="isHover? imgSrc1 :imgSrc2" />
<comp1 v-else :imgSrc="isHover? imgSrc1 :imgSrc2" />

js:

data(){
	return {
		  isHover: false,
	      imgSrc1:
	        "http://touxiangkong.com/uploads/allimg/20203301301/2020/3/MzUfQ3.jpg",
	      imgSrc2:
	        "http://touxiangkong.com/uploads/allimg/20203301301/2020/3/YNVjqi.jpg"
	    };
	}
}

如此就可以进行组件的切换,展示不同的图片
比较简陋,也比较low

方案二:
html:

<div class="p10">鼠标经过,切换背景图</div>
<p />  <!-- 这里就是显示图片的容器 --> 

css:

p {
  width: 300px;
  height: 300px;
  background-image: url("http://touxiangkong.com/uploads/allimg/20203301301/2020/3/MzUfQ3.jpg");
  background-size: 100%;
  &:hover {
      background-image: url("http://touxiangkong.com/uploads/allimg/20203301301/2020/3/YNVjqi.jpg");
    }
}

但是发现一个问题,每当首次hover的时候,总会莫名的闪烁,给人的体验感并不是特别好。那么,该如何悄悄地搞掉这个闪烁的过程呢?

可以发现,该案例中使用的img路径是网络图片,用来表示用CDN进行托管的图片

经过资料的查阅已经实践,发生闪烁这是页面加载数据的问题. 页面加载完成之后,这张背景图所以并没有被加载出来,因为这是在css中写的样式,而当你hover的时候这张图片才开始加载资源,所以首次会进行闪烁

如图所示:
在这里插入图片描述
找到了原因,那么就可以找到对应的解决办法。
能不能不要在切换的时候进行请求,而是在hover之前进行这一操作呢?

Of course I can !!!

修改css,如下:
css:

p {
  width: 300px;
  height: 300px;
  background-image: url("http://touxiangkong.com/uploads/allimg/20203301301/2020/3/MzUfQ3.jpg");
  background-size: 100%;
  
  &::after {
    display: none;
    content: "";
    width: 300px;
    height: 300px;
    background-image: url("http://touxiangkong.com/uploads/allimg/20203301301/2020/3/YNVjqi.jpg");
    background-size: 100%;
  }
  &:hover::after {
    display: block;
  }
}

可以看到,是利用了伪元素after进行加载并隐藏显示
在这里插入图片描述

在该模块加载的时候,进行图片信息网络资源的请求,只需要在hover的时候改变after的显示状态即可。

如此,即可完美的解决首次hover会产生闪烁的问题!

重点推荐第二种~
毕竟第一种不仅low,而且代码量复杂。能用css解决的时候,为什么要用js+css进行解决呢?

记得 点赞 + 收藏 + 关注三连哦~

要实现HTML登录界面的居中和背景图片设置,可以使用CSS样式来实现。以下是一种实现方法: HTML代码: ```html <div class="login-container"> <form> <h2>Login</h2> <label for="username">Username:</label> <input type="text" id="username" name="username"> <label for="password">Password:</label> <input type="password" id="password" name="password"> <input type="submit" value="Login"> </form> </div> ``` CSS代码: ```css /* 设置背景图片 */ body { background-image: url('background.jpg'); background-size: cover; } /* 将登录表单居中 */ .login-container { display: flex; justify-content: center; align-items: center; height: 100vh; } form { background-color: white; padding: 20px; border-radius: 5px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); } h2 { text-align: center; margin-bottom: 20px; } label { display: block; margin-bottom: 5px; } input[type="text"], input[type="password"] { width: 100%; padding: 10px; border-radius: 3px; border: 1px solid #ccc; margin-bottom: 20px; } input[type="submit"] { background-color: #4CAF50; color: white; padding: 10px 20px; border: none; border-radius: 3px; cursor: pointer; } input[type="submit"]:hover { background-color: #3e8e41; } ``` 解释: - `body`元素设置背景图片,并将其大小设置为覆盖整个页面。 - `.login-container`元素使用了Flex布局,并通过`justify-content`和`align-items`属性将登录表单居中。 - `form`元素设置了白色背景、圆角边框、阴影等样式,同时内部的输入框和提交按钮也做了相应的样式调整。 - `input[type="submit"]`元素在鼠标悬停时会改变背景颜色,以增强交互效果。 这样就完成了一个简单的HTML登录界面,同时实现了居中和背景图片设置
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值