【发布时间】:2019-01-29 11:20:00
【问题描述】:
我有一个包含图像的水平滚动元素,该元素位于页面下方。
首先,我有以下标记和样式。我使用了overflow:hidden,因为我不想要滚动条。为了简单起见,我还删除了一些不太重要的样式:
<ul id="players-horizontal">
<li class="player-box"><img src="..."></li>
<li class="player-box"><img src="..."></li>
...
</ul>
#players-horizontal {
overflow: hidden;
height: 340px;
width: 100%;
}
#players-horizontal .player-box {
display: inline-block;
width: 300px;
height: 340px;
}
#players-horizontal .player-box:first-child {
margin-left: 90%;
}
这给了我以下观点:
当这个元素滚动到视图中时,我想水平滚动它的全部内容,直到它即将消失,这样用户就可以在向下滚动时看到它的全部内容。
元素即将离开视口时所需的外观是:
反之亦然,当用户向上滚动时应该发生反向操作。
要知道元素何时进入视口,我使用了Waypoints 插件:
var waypoints = $('#players-horizontal').waypoint(
function(direction) {
if (direction === 'down') {
//console.log("Into view");
$window.scroll(function () {
var s = $(this).scrollTop();
});
} else {
//console.log("Out of view");
$window.scroll(function () {
var s = $(this).scrollTop();
});
}
}, { offset: '90%' }
);
但我一直不明白下一步该做什么,更具体地说,如何计算元素在离开视口之前的短时间内滚动(更改边距)多少,确保其中的所有元素在它之前显示。
如果能在终点线获得帮助,我将不胜感激。我不期望代码可以工作,虽然我会很感激,但我真的只需要一个易于理解的解释来说明所需的内容。
更新:
我刚刚尝试使用不使用 Waypoints 插件而是使用ScrollMagic 的替代方法。这无疑解除了许多所需的工作。
var scene = new ScrollMagic.Scene({triggerElement: "#players-horizontal", duration: 200})
.addTo(controller)
.on("progress", function (e) {
console.log((e.progress * 100));
});
上面的sn-p检测元素#players-horizontal何时进入和离开视口。
当元素向下滚动时进入视口底部时,返回的值从 0 开始,在离开视口顶部之前停止在 100。当我向上滚动时,该值从 100 开始,当元素即将离开视口底部时停止在 0。所以,我肯定更接近了。
【问题讨论】:
-
非常感谢您的更新。一段时间以来,我一直在寻找这样的解决方案。效果很好!
标签: javascript jquery html css