有一個需求,滾輪滾動到相應位置的時候執行當前的動畫,這個動畫在footer
裡面,而網頁的主體通過ajax
進行渲染,我在 js 裡面調用 ajax 渲染數據,然後再獲取主體的高度,滾動到該高度的時候執行動畫。
本地測試了一下沒什麼問題,該有的效果都有了。放在伺服器上測試發現無論怎麼寫,都是先獲取主體的高度,然後才進行數據的渲染。那麼必然高度是一個極小的值,不符合我想要的屬性。
我大致想了兩種解決辦法,均以失敗告終,本地是 ajax 先執行,伺服器是 js 先執行。
- 讓獲取高度的事件時間延時 500ms,發現最後獲取不到事件了;
- 將該事件寫在 ajax 的 success 回調裡面,結果是只有打開網頁第一次能夠成功,然後不管刷新多少次均無效,事件被屏蔽,所以方法二也被廢除;
最後我想到了,ajax 不就是一種異步方法,我將其改為同步不就行,先讓 ajax 執行完在執行 js 事件。
async: false,
我在 ajax 裡面寫了async
這個方法,false
意思是將其默認為同步獲取數據,很好,回到伺服器打開控制台,發現是先渲染了數據,才獲取了主體的高度,問題得以解決。
當然這樣做有弊端的,如果接口出問題,ajax 渲染失敗,那麼整個網頁的 js 都將執行不了。不過我想真到了數據都渲染不出的地方,訪問網頁就沒有意義了,所以最後我採用了這種方法。