我想创建一个具有简单视差滚动效果的网站,其中元素以不同的速度滚动。我尝试使用Skrollr库,但我无法让它做我想做的事。我可以使用什么Javascript库或技术来让我轻松地定义元素的相对滚动速度?
例:
<div data-speed="50%"></div>
我尝试使用本教程:http://coding.smashingmagazine.com/2011/07/12/behind-the-scenes-of-nike-better-world/,但我不能很好地遵循它。我需要一些非常简单的东西,因为我是Javascript的新手。
我很高兴你发现了恒星.js
如果您(或阅读本文的任何其他人(正在寻找更多视差工具,我和我的公司发布了视差教程列表 https://potentpages.com/web-design/parallax/tutorials
以下是一些当前使用的创建视差网站的方法:
- jQuery和基于jQuery的库(包括stellar.js(
- 斯克罗尔.js
- 贾拉拉克斯
- Javascript(没有任何库(
- CSS(没有javascript(
我们在上面的链接中链接到这些方法的一些教程。
我刚刚对自己回答了这个问题。我不想使用任何库,因为我只需要一个简单的效果,而且我觉得解决方案应该很简单,只要我想要一个简单的结果。所以首先是scss mixin(无论如何你都可以用香草css来做(:
@mixin background-fixed($url) {
background-image: url($url);
background-repeat: no-repeat;
background-position: center;
background-size: auto 100vh;
}
不过,您可以玩大小和位置。但以我的拙见,我举了最一般的例子。接下来,我们使用 mixin 作为具有视差效果的样式块:
#block-id {
@include background-fixed('/images/your_img.jpg');
}
接下来我们需要一些jquery脚本。首先,让我们创建一些函数来使我们的编码人员的生活更轻松:
function inVisibleRange(block) {
return ($(window).scrollTop() <= $(block).offset().top + $(block).outerHeight() && $(window).scrollTop() >= $(block).offset().top - $(window).height())
}
function parallaxScroll(block) {
if (inVisibleRange(block)) {
$(block).css('background-position-y', $(window).scrollTop() - $(block).offset().top + 'px');
}
}
最后,我们在窗口滚动事件处理程序中使用此函数:
$(window).scroll(function() {
parallaxScroll('#block-id');
}
在这里,我们获得了所需的视差背景效果。但如您所见,视差效果的速度等于滚动速度。如果我们想自定义视差效果的速度(这里有一些街头魔术(,我们只使用一个简单的除法运算并将其应用于background-position-y
的计算:
($(window).scrollTop() - $(block).offset().top) / 1.3
是的,我们在顶部和底部丢失了一些图像的小部分。但我发现这是一个很好的黑客,不会以不好的方式影响外观。像用斧头切割一样简单。但是我们需要超级激光来切割一棵小树吗?好吧,我认为对我来说,我当然更喜欢用很酷的激光东西来切割它。但是,我们不要考虑到这一点,假装我的比喻在正确的地方。
我通过使用Stellar.js库解决了这个问题 - 更适合这个。