jquery - 滚动浏览不同大小的图像
问题描述
我试图在滚动时更改图像,(我知道 jquery 可能有点乱,但它似乎正在工作)但我想:
能够拥有不同高度和宽度的图像,而不是所有相同的大小(就像现在一样)。
垂直/水平居中。
这是一个小提琴:https ://jsfiddle.net/postcolonialboy/WTkqn/486/
谢谢!
HTML:
<div id="contentwrapper">
<div class="centreme">
<img src="https://picsum.photos/200/200?image=1" id="animation" />
<img class="hidden" src="https://picsum.photos/200/200?image=1" />
<img class="hidden" src="https://picsum.photos/200/200?image=2" />
<img class="hidden" src="https://picsum.photos/200/200?image=3" />
<img class="hidden" src="https://picsum.photos/200/200?image=4" />
<img class="hidden" src="https://picsum.photos/200/200?image=5" />
<div id="bottommark"></div>
</div>
</div>
CSS:
body,
html {
height: 7000px;
margin: 0;
background-color: grey;
}
.hidden {
position: absolute;
top: -9999999px
}
#bottommark {
position: absolute;
bottom: 0;
}
#contentwrapper {
width: 100%;
height: 100%;
position: fixed;
}
.centreme {
position: fixed;
width: 200px;
/* the image width */
height: 200px;
/* the image height */
top: 50%;
left: 50%;
margin-top: -100px;
/* half the image height */
margin-left: -100px;
/* half the image width */
}
JS:
$(document).ready(function() {
var a = $(document).height();
var b = a - $("#bottommark").position().top;
$(window).scroll(function() {
var e = $(document).height();
var f = $(window).scrollTop();
var c = e - $("#bottommark").position().top - f;
var d = b / 5;
$("span").html(c);
if (c > d * 4) {
$("#animation").attr("src", "https://picsum.photos/200/200?image=1")
}
if ((c < d * 4) && (c > d * 3)) {
$("#animation").attr("src", "https://picsum.photos/200/200?image=2")
}
if ((c < d * 3) && (c > d * 2)) {
$("#animation").attr("src", "https://picsum.photos/200/200?image=3")
}
if (c < d * 2 && c > d * 1) {
$("#animation").attr("src", "https://picsum.photos/200/200?image=4")
}
if (c < d) {
$("#animation").attr("src", "https://picsum.photos/200/200?image=5")
}
})
});
解决方案
我认为使用更少的代码会更好。
现在您可以拥有任意数量的图像而无需更改 js 和 css 部分
$(function() {
var win = $(window),
images = $(".images > div"),
img = $(".img > img");
img.attr('src', images.eq(0).data('img'));
win.on('scroll', function(event) {
var st = win.scrollTop(),
num1 = $(document).height() / images.length,
num = Math.round(st / num1);
img.attr('src', images.eq(num).data('img'));
});
});
body, html {
height: 8000px;
margin: 0;
background-color: grey;
}
.img {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="images">
<div data-img="https://picsum.photos/300/200?image=1"></div>
<div data-img="https://picsum.photos/400/300?image=2"></div>
<div data-img="https://picsum.photos/200/200?image=3"></div>
<div data-img="https://picsum.photos/300/400?image=4"></div>
<div data-img="https://picsum.photos/500/300?image=5"></div>
</div>
<div class="img"><img></div>
推荐阅读
- c - 如何使用 scanf 函数通过 C 中的循环将输入存储到多个变量中?
- node.js - 如何根据 ObjectId 删除嵌套对象?
- jquery - 制作饼图问题
- java - Weblogic 10 - JSF 2.1 部署问题
- python - CNN预测不正确
- javascript - 使用 Rest API 的 Sharepoint 列表项的总和
- sql - SQL 查询从一个表中获取不同的结果并将这些结果与表中的另一列相匹配
- javascript - 如何在 React 中将 ref 转发到其子组件并在挂载时更改设置状态?
- docker - 使用默认设置和访问 UI 配置 RabbitMQ 管理 docker 映像
- c# - AJAX 在调用 ASP.NET MVC 控制器时收到 500 Internal server error