javascript - 自定义视差

标签 javascript jquery html jquery-effects parallax

我正在尝试创建我自己的自定义视差插件,以便我能够选择项目离开屏幕的方向,我只是坚持确保无论用户如何滚动,无论对象在正确位置消失的窗口大小。

目前我有:

var lastScrollTop = 0;
var logoStartPos = $('.bg-logo').position().left;
$(function(){
   $(window).scroll(function(){

       var st = $(this).scrollTop();
       if (st > lastScrollTop){
          if($('.bg-logo').is(':in-viewport'))
            $('.bg-logo').css({'left':($('.bg-logo').position().left+10) + "px"});
       } else {
          if($('.bg-logo').is(':in-viewport') && logoStartPos < $('.bg-logo').position().left)
            $('.bg-logo').css({'left':($('.bg-logo').position().left-10) + "px"});
       }
       lastScrollTop = st;

   }); 
});

如您所料,这只会将项目向右移动,直到它离开屏幕。这种方式有不同的结果,因为如果我使用滚轮,如果我使用滚动条,则需要更长的时间才能消失。我还有另一个问题,如果我使用混合物或有不同的视口(viewport),我会得到不同的结果。

有什么提示或指示可以实现我想要的结果吗?

我的代码的一个工作示例位于 http://motoring.egl.me.uk

谢谢马特

最佳答案

有点过时,但仅供引用...

在你的 jQuery initialize 或 ready 事件中,你需要初始化每个部分、文章、项目或任何它是 (item.each) 以实例化滚动功能,以便每个都有自己的滚动功能。

this.each(function(index) { 

然后在滚动函数中,只处理事件,如果它是“当前”部分。您将需要一些方法来确定哪个项目是“当前”项目。这通常是通过将每个项目的窗口大小保存到全局数组中,然后使用该数组与当前位置进行比较来完成的。

类似于:(您设计代码的方式可能会非常不同)

// If this section is in view
if ( ($window.scrollTop() + $window.height()) > (topOffset) &&
   ( (topOffset + $self.height()) > $window.scrollTop() ) )

这样,一旦一个项目离开屏幕,下一个项目应该变为“当前”并继续滚动。

关于javascript - 自定义视差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9457877/

相关文章:

javascript - 如何使用哈希 url 中的 id 更改内容?

javascript - 代替 。用~

jquery - 弹出 div 以填充整个浏览器的宽度和高度

javascript - ViewData编译错误: BC30203: Identifier expected

javascript - 如何制作小游戏的计数器?

javascript - try catch 不适用于 sse

javascript - getElementsByName() javascript

javascript - 半屏侧边栏修正

javascript - 查找正在更改 DOM 元素的 javascript

导航栏后不运行 HTML 代码