javascript - 如何相对于 img 大小调整图像叠加大小

标签 javascript jquery html css image

我想在我的图像上设置叠加层,当我将鼠标悬停在图像上时,叠加层会出现在图像上并且与图像大小相同。当我调整窗口大小时,叠加层应自动调整大小。

我已经尝试了一些 JS 代码但不起作用。它始终将宽度/高度设置为 0 像素。

请告诉我如何解决这个问题。

var portImg = document.getElementById("portimg");
var overlay = document.getElementsByClassName("overlay");
var overlayh = overlay.style.height = portImg.clientHeight;
var overlayw = overlay.style.width = portImg.clientWidth;
/*
tried this 1 too

clientHeight + "px";
clientWidth + "px";
*/
.col-sm-6 {
  position: relative;
}

.img-container {
  width=100%
}

.img-container img {
  width=100%
}

.overlay {
  position: absolute;
  margin-top: 20px;
  text-align: center;
}

.overlay:hover {
  transform: rotate(0deg);
  opacity: .95;
}
<div class="col-sm-6">
  <div class="overlay">
  </div>
  <!-- overlay continer -->

  <div class="img-container">
    <img id="portimg" src="images/port.jpg" alt="">
  </div>
  <!-- img container -->
</div>
<!-- col -->

最佳答案

您可以使用自己的元素或伪元素单独使用 CSS 设置叠加层。在叠加层上使用 绝对 定位,在父级上使用 relative 定位,叠加层将随父级自动缩放。

.img-container {
  position: relative;
}

.img-container img {
  display: block;
  width: 100%;
}

.overlay {
  position: absolute;
  top: 0; left: 0; right: 0; bottom: 0;
  text-align: center;
  opacity: 0;
  transition: opacity .25s;
  background: black;
  color: white;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1em;
}

.img-container:hover .overlay {
  opacity: .5;
}
<div class="img-container">
  <img id="portimg" src="http://kenwheeler.github.io/slick/img/fonz1.png" alt="">
  <div class="overlay">overlay</div>
</div>

如果您仍然希望通过 javascript 控制叠加层的宽度和高度,我会创建一个匹配高度的函数,并在页面加载时以及在 windowresize 事件。

.img-container {
  position: relative;
}

.img-container img {
  display: block;
  width: 100%;
}

.overlay {
  position: absolute;
  top: 0; left: 0; 
  /* right: 0; bottom: 0; */
  text-align: center;
  opacity: 0;
  transition: opacity .25s;
  background: black;
  color: white;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1em;
}

.img-container:hover .overlay {
  opacity: .5;
}
<div class="img-container">
  <img id="portimg" src="http://kenwheeler.github.io/slick/img/fonz1.png" alt="">
  <div class="overlay" id="overlay">overlay</div>
</div>

<script>
  function matchHeight() {
  var img = document.getElementById('portimg'),
      overlay = document.getElementById('overlay');
  overlay.style.width = img.offsetWidth + 'px';
  overlay.style.height = img.offsetHeight + 'px';
}

window.addEventListener("load",function() {
  matchHeight();
});

window.addEventListener("resize", function() {
  matchHeight();
});
</script>

关于javascript - 如何相对于 img 大小调整图像叠加大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42656773/

相关文章:

javascript - 如何在给定单词列表的情况下找到唯一词缀列表?

javascript - 发布表单并将结果放入 div 中

jquery - 如果检测到移动浏览器,是否有 "rails"重定向方法?

javascript - JQuery 背景视频不覆盖整个页面

javascript - 选中复选框时淡入/淡出最接近的 div

javascript - 平板电脑友好的悬停工具提示,显示基于 JavaScript 函数结果的动态文本

javascript - 通过 javascript 链接到另一个带有书签的页面,这可能吗?

php - 循环 JSON 以显示未知数量的数据行?

javascript - 我如何从 jquery 中的 html 表中提取从时间到时间(约会时间)

javascript - 通过单击标题触发 Accordion 链接的单击