javascript - 我有 4 个堆叠的图像,我想放大并一张一张地缩放
问题描述
我有四个图像堆叠在一起。悬停时,可见图像会放大和淡出以显示下方的图像。
我有两个要解决的问题:
第一个。随着图像的缩放,它会在包含的 div 之外流血。我希望图像可以缩放,但是要隐藏 div 之外的图像区域。
第二。一旦第一个图像完全褪色,我希望现在可见的图像与第一个图像一样并显示下面的图像。目前它只是坐在那里,鼠标指针悬停在它上面。
因此,我有一个相对定位的容器,其中包含 4 个绝对定位的图像。其中之一,我已经包裹在另一个 div 中以尝试隐藏图像的溢出(这不起作用)。
我已经使用 CSS 在 2 秒的时间内转换不透明度和比例,这适用于第一张图像,但不适用于它下面的后续图像。
我要做的是复制我放在一起(在 Adobe Spark 上)作为网站的演示文稿。我花了几个星期研究我所追求的各种效果,但似乎只是想出了各种 JavaScript/jQuery 插件。
我在上面尝试做的事情还不够简单,无法仅使用 CSS 转换和过渡吗?我的想法是对这些进行排序,然后考虑在用户向上/向下滚动网站时调用样式,最好使用 JavaScript 或 jQuery,如果这被证明太复杂的话。
/* create a relatively positioned wrapper
fpr the images */
.img-wrapper {
position: relative;
width: 25vw;
z-index: 10;
}
/* fit absolute container to top left of img-wrapper.
Fill the width of the wrapper */
.stack {
position: absolute;
width: 100%;
height: fit-content;
}
/* stack the image centered in the img-wrapper */
.img-1 {
z-index: 4;
top: 0;
left: 50%;
transform: translate(-50%);
}
.img-1:hover {
opacity: 0;
transform: translate(-50%) scale(1.25);
transition-duration: 2s;
}
.img-2 {
z-index: 3;
top: 0;
left: 50%;
transform: translate(-50%);
}
.img-2:hover {
opacity: 0;
transform: translate(-50%) scale(1.25);
transition-duration: 2s;
}
.img-3 {
z-index: 2;
top: 0;
left: 50%;
transform: translate(-50%);
}
.img-3:hover {
opacity: 0;
}
.img-4 {
z-index: 1;
top: 0;
left: 50%;
transform: translate(-50%);
}
.img-4:hover {
opacity: 0;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF8" lang="eng">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My Title</title>
<link rel="stylesheet" href="styles/styles.css">
</head>
<header>Header Text</header>
<main>
<h1>4 Images placed Over Each Other</h1>
<div class="img-wrapper">
<!-- 'overflow: hidden' to stop image bleed outside of div
which doesn't work :( -->
<div style="overflow: hidden;">
<img class="stack img-1" src="https://images.unsplash.com/photo-1502359521992-f86fd62e12dd" alt="african chillites">
</div>
<img class="stack img-2" src="https://images.unsplash.com/photo-1509085051020-b0707cdec216" alt="african chillites">
<img class="stack img-3" src="https://images.unsplash.com/photo-1526179969422-e92255a5f223" alt="indian chillies" alt="african chillites">
<img class="https://images.unsplash.com/photo-1518843875459-f738682238a6" alt="fresh veg" alt="african chillites">
</div>
</main>
<body>
</body>
</html>
正如我试图描述的那样,随着下面的每个图像都被完全显示出来,我预计变换/过渡会向下层叠。这显然不是这种情况,只适用于最上面的图像。
至于 div 外部的图像在缩放时溢出,我不确定除了overflow: hidden;
在容器上之外还能尝试什么,这是行不通的。如果我将该样式应用于class="img-wrapper
div,图像就会消失!
任何关于去哪里的帮助或建议将不胜感激。
更新:
我添加了图像的工作链接,以便有一个我试图解决的问题的可用演示。
非常感谢所有可以做出贡献的人。
附录
我想我会添加这个工作示例来阐明我想要实现的目标: Adobe Spark 示例。这适用于我尝试过的真实手机(各种三星触摸屏)以及 Chrome 和 Firefox 70.0.1 开发工具响应视图,但它不适用于 Firefox 开发版 71.0b9(64 位)响应视图。
我的主要障碍是随着用户滚动而缩放/淡入的堆叠图像。我在桌面上尝试了 Skrollr 并取得了巨大的成功,但没有办法让它在移动设备上运行。
如果对可以实现我的目标的替代插件/库有任何建议,我将非常感谢听到它们。我认为尝试使用我自己的 JavaScript 来做到这一点对于我目前的编程能力来说太过分了!:-/
谢谢阅读。
解决方案
推荐阅读
- java - CountDownTimer 自行随机停止
- javascript - 什么会导致 requestAnimationFrame 返回 undefined 而不是 id?
- asp.net - 从 Request.Form 集合中获取复选框状态和值
- r - 无法渲染动画
- google-cloud-platform - 如果内存超过 90%,则 GCP 刷新 redis
- camunda - 在 Camunda 中,两个选项中优化编码的正确方法是什么?
- asp.net-mvc - 为什么 Html.DisplayFor 显示模型属性名称而不是属性值?
- python - Django Form:仅显示来自登录用户的多对象
- google-app-engine - AppEngine:搜索 API 的 Python 3 版本
- javascript - Javascript:在 Promise 完成后加载到 Promise 中的数据不可用