2014-09-02 118 views
2

我是新人,请温柔。我已经回顾了使用jquery .scroll()事件的这些帖子,但还没有实施修复工作的运气。

http://stackoverflow.com/questions/5686629/jquery-window-scroll-event-does-not-fire-up 
http://stackoverflow.com/questions/19375636/jquery-onscroll-not-firing-the-event-while-scrolling 

我正在使用Jquery Mobile的网站上工作。我包含一个小脚本,用于在用户垂直滚动页面时在背景图像上产生视差效果。它是这样写的:

$(window).on('scroll', function(){ 
    $('.slider').each(function(r){ 
     var pos = $(this).offset().top; 
     var scrolled = $(window).scrollTop(); 
     $('.slider').css('background-position-y', -(scrolled * 0.3) + 'px'); 
    }); 
}); 

这段代码在加载页面后在控制台中输入时非常有效。作为我的自定义脚本的一部分加载时,它什么都不做。它位于我的main.js文件的末尾,这是我的HTML中引用的最后一个.js,紧跟在JQM CDN分发链接之后。

...</body> 
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script> 
<script src='js/buildpage.js'></script> 
<script src="http://code.jquery.com/mobile/1.4.3/jquery.mobile-1.4.3.min.js"></script> 
<script src='js/main.js'></script> 
</html> 

我代替我的视差脚本,当JQM进一步初始化和修改的布局,再没有什么页面被调整,这导致一个警报的尝试了$(windows).scroll(function(){alert('scroll')})。窗口滚动时,在页面加载后重新输入控制台中的行。

如果我注释掉JQM链接,视差脚本工作得很好。

总结: 视差脚本依赖于.scroll()。

视差脚本是HTML中引用的最后一个.js中的最后一行。

如果与引用的脚本内联加载,Parallax脚本不起作用。

如果在页面加载后(Chrome)在开发控制台中输入Parallax脚本,则工作正常。

禁用JQM会产生所需的效果......但现在JQM关闭了! :(

预先感谢您为您的指导和智慧贤明。

+0

后的头几个小时划伤,回家补测试页后发现,由于某些原因,效果,正在按原计划....但是在sw之后,我确实发现了这一点发痒页面查看效果停止工作,直到重新加载。 – 2014-09-03 00:32:20

+0

不知何故,这JSFiddle工作正常,但我的本地版本不。我输了。感谢收看.. http://jsfiddle.net/m17aqe6j/ – 2014-09-03 00:45:46

+0

这里是我的本地版本的副本。切换到第2页并回到第1页后,视差被打破。我已经评论了没有进入jsfiddler的任何内容,因此不确定结果会有什么不同? http://new.seianesthesia.com/test.html – 2014-09-03 01:18:45

回答

2

我升级从JQM 1.3到1.4后也有类似的问题,那解决了这个问题对我来说是使用两种scrollstartscrollstop代替scroll事件(见http://api.jquerymobile.com/category/events/)并将其连接到document而不是window。所以

$(document).on('scrollstart', function(){  //or 'scrollstop' 
    console.log("I'm scrolling!"); 
    //your code here 
}); 
+0

非常感谢!这解决了我的问题 - jQuery Mobile在回到历史记录之后让scroll事件在'window'上不起作用。 – EpicPandaForce 2015-01-22 11:22:37