jQuery .animate() backgroundColor 未顯示及反應很慢問題
最近因為支援公司 Art (其實是不想面對繁複的功能需求)切版工作,久沒碰有點生疏,幸好還做的出來。
我要做一個捲動網頁,選單背景會變色的動畫效果,採用 jQuery 的
這時捲動網頁是不會有任何改變的,因為缺少 jQuery color,所以多載入 jQueryUI。
現在捲動網頁選單可以正確顯示顏色的變化,可是多捲動幾次就會發現動畫效果很慢才會出現,這是為什麼呢?
原來因為每次捲動都會觸發動畫,而動畫是需要時間去反應的,多次的捲動就需要多次的動畫時間,所以後面動畫反應就會越來越慢。
我們可以在
我要做一個捲動網頁,選單背景會變色的動畫效果,採用 jQuery 的
.animate()
,所以我寫出以下程式:
<script type="text/javascript"> $(function() { $(window).scroll(function() { if ($(this).scrollTop() > 113) { $('header').animate({ backgroundColor: "#23485B" }, 600); } else { $('header').animate({ backgroundColor: "transparent" }, 300); } }).trigger('scroll'); }); </script>
這時捲動網頁是不會有任何改變的,因為缺少 jQuery color,所以多載入 jQueryUI。
<script src="{{ asset('js/jquery-ui.min.js') }}"></script> <script type="text/javascript"> $(function() { $(window).scroll(function() { if ($(this).scrollTop() > 113) { $('header').animate({ backgroundColor: "#23485B" }, 600); } else { $('header').animate({ backgroundColor: "transparent" }, 300); } }).trigger('scroll'); }); </script>
現在捲動網頁選單可以正確顯示顏色的變化,可是多捲動幾次就會發現動畫效果很慢才會出現,這是為什麼呢?
原來因為每次捲動都會觸發動畫,而動畫是需要時間去反應的,多次的捲動就需要多次的動畫時間,所以後面動畫反應就會越來越慢。
我們可以在
.animate()
之前加上 .stop()
,來停止該物件前面的動畫,如此一來當下的動畫就可以馬上看到效果。
<script src="{{ asset('js/jquery-ui.min.js') }}"></script> <script type="text/javascript"> $(function() { $(window).scroll(function() { if ($(this).scrollTop() > 113) { $('header').stop().animate({ backgroundColor: "#23485B" }, 600); } else { $('header').stop().animate({ backgroundColor: "transparent" }, 300); } }).trigger('scroll'); }); </script>
留言
張貼留言