jquery animate() Alternate 語法

来源:https://www.cnblogs.com/johnZzz/archive/2019/03/26/10600680.html
-Advertisement-
Play Games

前段時間在使用jQuery的animate() 函數時候用到Alternate方式。主要是要讓數字自增到指定大小,且能看見數字增加過程。 一般使用如下方式: 嗯...能運行,不報錯,但是問題來了。多刷新試試,會發現有時動畫過程會在未達到指定數字的時候就停下了。可想而知,不管是數字動畫還是其他動畫都可 ...


前段時間在使用jQuery的animate() 函數時候用到Alternate方式。主要是要讓數字自增到指定大小,且能看見數字增加過程。

一般使用如下方式:

 1 function autoPlusAnimate(obj){
 2     if(obj== null)
 3         return;
 4     
 5     $({Counter: 0}).animate({ Counter: obj.attr('num') }, {
 6         duration: 1200,
 7         easing: 'swing',
 8         step: function () {
 9             obj.html(this.Counter.toFixed(2)+'%');11         }
12         
13     });
14 }

嗯...能運行,不報錯,但是問題來了。多刷新試試,會發現有時動畫過程會在未達到指定數字的時候就停下了。可想而知,不管是數字動畫還是其他動畫都可能出現未到達目標前就停止了。

然後找到這個,jquery api中文文檔

  • step Type: FunctionNumber now, Tween tween ) 每個動畫元素的每個動畫屬性將調用的函數。這個函數為修改Tween 對象提供了一個機會來改變設置中得屬性值。
  • progress Type: FunctionPromise animation, Number progress, Number remainingMs ) 每一步動畫完成後調用的一個函數,無論動畫屬性有多少,每個動畫元素都執行單獨的函數。

光從字面上看我確實看不出是什麼原因,但是肯定是step的實現方式的原因,這裡沒有研究,需要知道的大神講解一下。但是這裡不是還提供另一個方式嗎?那就試試

function autoPlusAnimate(obj){
    if(obj== null)
        return;
    
    $({Counter: 0}).animate({ Counter: obj.attr('num') }, {
        duration: 1200,
        easing: 'swing',
        progress: function () {
            obj.html(this.Counter.toFixed(2)+'%');
        }
        
    });
}

經測試發現,使用progress屬性實現動畫片段的過程沒有問題。但是熟悉用jQuery的人在遇到這個問題的時候,應該都會想另一種解決方案,使用回調函數。我們在動畫完成的時候使用回調把數據改為目標值就行了啊,完美。但是在沒有看jquery api中文文檔之前,我看了菜鳥網、和w3school的api,如下:

Alternate 語法
(selector).animate({styles},{options})

參數 描述
styles 必需。規定產生動畫效果的一個或多個 CSS 屬性/值(同上)。
options 可選。規定動畫的額外選項。
可能的值:
speed - 設置動畫的速度
easing - 規定要使用的 easing 函數
callback - 規定動畫完成之後要執行的函數
step - 規定動畫的每一步完成之後要執行的函數
queue - 布爾值。指示是否在效果隊列中放置動畫。如果為 false,則動畫將立即開始。
specialEasing - 來自 styles 參數的一個或多個 CSS 屬性的映射,以及它們的對應 easing 函數

 

這裡讓我一度以為回調函數是使用callback,發現沒有任何效果。在看jquery api中文文檔後才知道

  • complete Type: Function() 在動畫完成時執行的函數。
  • done Type: FunctionPromise animation, Boolean jumpedToEnd ) 在動畫完成時執行的函數。 (他的Promise對象狀態已完成)   

使用complete、和done來實現回調函數即可

function autoPlusAnimate(obj){
    if(obj== null)
        return;
    
    $({Counter: 0}).animate({ Counter: obj.attr('num') }, {
        duration: 1200,
        easing: 'swing',
        step: function () {
            obj.html(this.Counter.toFixed(2)+'%');
        }
        ,done: function(){
            obj.html(obj.attr('num')+'%');
        }
        
    });
}

使用了done或者complete 後,那麼不管你之前使用的step還是progress 應該都不會出現在屬性到達指定值之前就停下的情況。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • usually.js 是一個面向現代 Web 開發的 JavaScript 函數庫,基於 ES6 開發。最新版本2.4.1,最新版本usually.js增加管道函數—— pipe 函數。什麼是管道函數?管道函數,其作用是將前一步的結果直接傳參給下一步的函數,從而省略了中間的賦值步驟,可以大量減少記憶體... ...
  • 一、快捷位置和尺寸屬性 DOM已經提供給我們計算後的樣式,但是還是覺得不方便,因為計算後的樣式屬性值都是字元串類型。 不能直接參与運算。 所以DOM又提供了一些API:得到的就是number類型的數據,不需要parseInt(),直接可以參與運算。 offsetLeft和offsetTop offs ...
  • 一、單例模式: 所謂單例模式,即保證一個類只有一個實例,並提供一個訪問它的全局訪問點。 單例模式實現彈出層: 二、觀察者模式: 所謂觀察者模式,即(發佈-訂閱模式):其定義對象間一種一對多的依賴關係,當一個對象的狀態發生改變時,所有依賴於它的對象都將得到通知。 觀察者模式常見面試題: 三、組合模式: ...
  • Layui 分為單頁版和iframe版 單頁版 通過將單頁代碼輸出到div,不如要完整的html代碼。 刷新頁面後,依然能夠記錄上一次的頁面。 此種方式不易於調試前端代碼。 Iframe版 通過iframe的方式將載入另一個頁面。需要完整的html代碼,包括js代碼。 屬性頁面後,不能夠記錄上一次的 ...
  • 在學習表格時我們會遇到一些既跨行又跨列合併的情況,此時可以用下麵這種方法來實現。 但是需要特別指出的是,如果一個單元格既跨行又跨列合併了,那麼最好不要再讓相鄰單元格也跨行或跨列合併了。 此時會出現如下所示的錯誤效果,可以看到單元格與單元格的尺寸不再一致了。 ...
  • 大家好 !! 又見面了, 今天我們來搞一搞 H5的新增API FileReader 真是一個超級超級方便的API呢!!!很多場景都可以使用.......... 我們先不贅述MDN文檔里的內容, 我們從 1 到 0, 從 一個 小Demo 入手 開始 瞭解 它; 請開始你的表演: 是不是簡單又炫酷, ...
  • 一、獲取元素方法(JS選擇器) 1.1概述 得到id元素的方法 document.getElementById() 得到一個元素。事實上,還有一個方法可以得到標簽元素,並且得到的是多個元素: document.getElementsByTagName(); 全線瀏覽器相容的,得到元素的方法,就這兩個 ...
  • 1.二維數組中的查找 在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。 時間限制:1秒 空間限制:32768K 分析:由於每一行都按照從左到右遞增的順序排序 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...