1 回答

TA貢獻1828條經驗 獲得超13個贊
這是一些非常奇特的代碼!我可能會嘗試一個更簡單的解決方案,但你擁有的是一個漂亮且靈活的 jQuery 函數。
這是代碼的 JSFiddle,僅進行了一項更改 - 在顯示最后一個元素后停止動畫,這正是您所需要的。
問題是這段代碼:
if (next.length == 0) { next = $(obj).children(':last'); }
表示當沒有要設置動畫的“下一個”元素時,請使用要設置動畫的集合中的最后一個元素(#rotate
在您的示例中)。因此,一旦它到達最后一個項目并且找不到另一個項目,它就會循環,重新激活最后一個項目,并且永遠不會停止。
為了解決這個問題,我:
刪除了上面顯示的代碼;
添加了一個新的測試,以便當我們要設置動畫的項目是集合中的最后一個項目時,在將其淡出并尋找另一個淡入之前盡早退出。為了進行該測試,我
.index()
在設置,并將其與元素總數進行比較。索引是從零開始的,而計數當然不是從零開始的,所以我需要在索引值上加 1:if (next.index() +1 === items.length) { return; }
現在您的代碼可以按您的預期運行。
但是該代碼有一些問題需要修復:
該按鈕有一個
onclick="myFunction()"
,但myFunction()
未定義。AFAICTbutton
JS 中的點擊處理程序就是您所需要的,并且比使用內聯onClick
處理程序更好,所以我刪除了它。AFAIK
jQuery(function($) {
和$(document).ready(function() {
基本上是相同的,并且應該只使用一個。同樣,無需將 jQuery 函數定義包裝在另一個自執行的
(function($) {
.不應在單擊處理程序內定義 jQuery 函數定義。
對 run 的實際調用
rotaterator()
包裝在 a 內$(document).ready(function() {
,但代碼已經嵌套在其中另一個內,它們不應該像那樣嵌套/加倍。小事 - 該
next
變量被定義為 jQuery 對象,因此您可以像使用它一樣next.fadeIn()
,而無需像使用它一樣$(next)
。在點擊處理程序中,此代碼會淡入整個 h1:
$("#demo").fadeTo("slow", 1);
我猜你有一些 CSS 使它最初不可見?我已經添加了。
這是另一個包含所有這些更改的 JSFiddle。
- 1 回答
- 0 關注
- 138 瀏覽
添加回答
舉報