2014-09-02 77 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