深入學習jQuery動畫控制

来源:http://www.cnblogs.com/xiaohuochai/archive/2016/10/13/5958117.html
-Advertisement-
Play Games

[1]動畫狀態 [2]停止動畫 [3]動畫延遲 [4]全局控制 ...


×
目錄
[1]動畫狀態 [2]停止動畫 [3]動畫延遲[4]全局控制

前面的話

  jQuery動畫可以使用fade、hide、slide等方法實現基本動畫效果,可以使用animate實現自定義動畫,甚至可以使用queue實現動畫隊列。但是,卻缺少了對動畫控制的介紹。動畫產生後,描述動畫狀態、進行動畫延遲、操作動畫暫停等都是很重要的功能。本文將詳細介紹jQuery動畫控制

 

動畫狀態

  當用戶快速在某個元素多次執行動畫時,會造成動畫累積的現象。這時,就需要引入動畫狀態這個概念。判斷元素是否處於動畫狀態中,如果處於,則不添加新動畫

is(':animated')

  使用is(':animated')方法來判斷元素是否處於動畫狀態

<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="btn1">按鈕一</button>
<button id="btn2">按鈕二</button>
<button id="reset">恢復</button>
<div id="box" style="position:relative;height: 100px;width: 300px;background-color: lightblue"></div>
<script>
$('#reset').click(function(){
    history.go();
})
$('#btn1').click(function(event){
  $('#box').animate({'left':'+=100px'});
});
$('#btn2').click(function(event){
    if(!$('#box').is(':animated')){
        $('#box').animate({'left':'+=100px'});        
    }
});
</script>

停止動畫

【stop()】

  stop()方法用於停止匹配元素當前正在運行的動畫

stop([queue][,clearQueue][,jumpToEnd])

  stop()方法可以接受3個可選參數,第一個參數queue表示停止動畫隊列的名稱;第二個參數clearQueue表示是否清空隊列中的動畫,預設值為false;第三個參數jumpToEnd表示是否當前動畫立即完成,預設值為false

【1】當stop()方法不接受任何參數時,將立刻停止當前動畫

  對於hover動畫效果來說,經常出現用戶把游標移入元素時出發觸發動畫效果,但當前動畫沒有結束時,用戶已經將游標移出元素。這樣移入移出過快會導致動畫效果延遲

  此時,只要在游標移入、移出動畫之前加入stop()方法就可以結束當前動畫,並立即執行隊列中下一個動畫

<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="reset">恢復</button>
<div id="box" style="position:relative;height: 100px;width: 300px;background-color: lightblue">未設置stop的hover動畫效果</div>
<div id="box1" style="position:relative;height: 100px;width: 300px;background-color: lightgreen">設置stop的hover動畫效果</div>
<script>
$('#reset').click(function(){
    history.go();
})
$('#box').hover(function(event){
    $(this).animate({'width':'400px'})
},function(){
    $(this).animate({'width':'300px'})
});
$('#box1').hover(function(event){
    $(this).stop().animate({'width':'400px'})
},function(){
    $(this).stop().animate({'width':'300px'})
});
</script>

【2】stop()參數clearQueue表示是否清空隊列中的動畫,預設值為false

  當設置該參數為true時,則不僅停止當前動畫,而且會清空隊列中動畫

<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="btn">開始動畫</button>
<button id="btn1">停止當前動畫</button>
<button id="btn2">停止當前及後續動畫</button>
<button id="reset">恢復</button>
<div id="box" style="position:relative;height: 100px;width: 300px;background-color: lightblue"></div>
<script>
$('#reset').click(function(){
    history.go();
})
$('#btn').click(function(event){
  $('#box').animate({'left':'100px'},1000).animate({'width':'200px'},1000);
  $('#box').animate({'left':'0'},1000).animate({'width':'100px'},1000);
});
$('#btn1').click(function(event){
    $('#box').stop();
})
$('#btn2').click(function(event){
    $('#box').stop(true);
})
</script>

  【3】stop()參數jumpToEnd表示是否當前動畫立即完成,預設值為false

  當該參數設置為true時,當前動畫立即完成

  stop()相當於stop(false,false)表示停止執行當前動畫,後續動畫接著進行

  stop(true,false)表示停止執行當前動畫,後續動畫不再進行

  stop(false,true)表示當前動畫立即完成,後續動畫接著進行

  stop(true,true)表示當前動畫立即完成,後續動畫不再進行

<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<input id="btn" type="button" value="開始動畫">
<button>stop()</button>
<button>stop(true,false)</button>
<button>stop(false,true)</button>
<button>stop(true,true)</button>
<input id="reset" type="button" value="恢復">
<div id="box" style="position:relative;height: 100px;width: 300px;background-color: lightblue"></div>
<script>
$('#reset').click(function(){
    history.go();
})
$('#btn').click(function(event){
  $('#box').animate({'left':'100px'},1000).animate({'width':'200px'},1000);
  $('#box').animate({'left':'0'},1000).animate({'width':'100px'},1000);
});
$('button').click(function(event){
    jQuery.globalEval("$('#box')." + $(this).html());
})
</script>

【finish()】

  finish()方法是另一種停止動畫的方法,它可以停止當前正在運行的動畫,刪除所有排隊的動畫,並完成匹配元素所有的動畫

finish([queue])

  finish()方法可以接受一個可選參數queue表示停止動畫隊列的名稱

  finish()方法和stop(true,true)很相似,stop(true,true)將清除隊列,並且目前的動畫跳轉到其最終值。但是,不同的是,finish()會導致所有排隊的動畫的CSS屬性跳轉到他們的最終值

<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<input id="btn" type="button" value="開始動畫">
<button>finish()</button>
<button>stop(true,true)</button>
<input id="reset" type="button" value="恢復">
<div id="box" style="position:relative;height: 100px;width: 300px;background-color: lightblue"></div>
<script>
$('#reset').click(function(){
    history.go();
})
$('#btn').click(function(event){
  $('#box').animate({'left':'100px'},1000).animate({'width':'200px'},1000);
  $('#box').animate({'left':'0'},1000).animate({'width':'100px'},1000);
});
$('button').click(function(event){
    jQuery.globalEval("$('#box')." + $(this).html());
})
</script>    

動畫延遲

  delay()方法可以用來設置一個延時來推遲執行隊列中後續的項

delay(duration[,queueName])

  duration是delay()方法的必須參數,用於設定下個隊列推遲執行的時間,持續時間是以毫秒為單位的,預設值為'normal',代碼400毫秒的延時;'fast'和'slow'分別代表200和600毫秒的延時

  queueName是delay()方法的可選參數,它是一個隊列名的字元串,預設是動畫隊列fx

<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="btn1">開始動畫</button>
<button id="reset">恢復</button>
<div id="box" style="position:relative;height: 100px;width: 300px;background-color: lightblue"></div>
<script>
$('#reset').click(function(){
    history.go();
})
$('#btn1').click(function(event){
  $('#box').animate({'left':'300px'}).delay(500).animate({'width':'100px'});
});
</script>

全局控制

【jQuery.fx.off】

  jQuery.fx.off屬性可以用來對jQuery動畫進行全局控制,預設為undefined,當這個屬性設置為true的時候,調用時所有動畫方法將立即設置元素為他們的最終狀態,而不是顯示效果

  當然,動畫可以通過設置這個屬性為false重新打開

  [註意]由於該屬性是全局性的,因此在沒有動畫正在運行或停止所有動畫時,此屬性的變化才能生效

<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="btn1">開始動畫</button>
<button id="btn2">開閉動畫</button>
<button id="reset">恢復</button>
<div id="box" style="position:relative;height: 100px;width: 300px;background-color: lightblue"></div>
<script>
$('#reset').click(function(){
    history.go();
})
$('#btn1').click(function(event){
  $('#box').animate({'left':'300px'},1000).animate({'width':'100px'},1000);
});
$('#btn2').click(function(){
    $.fx.off = !$.fx.off;
});
</script>

【jQuery.fx.interval】

  jQuery.fx.interval屬性可以改變動畫的頻率,以毫秒為單位

  這個屬性可以設置動畫每秒運行幀數,預設是13毫秒。該屬性值越小,在速度較快的瀏覽器中,動畫執行的越流暢,但是會影響程式的性能並且占用更多的CPU資源

  [註意]由於該屬性是全局性的,因此在沒有動畫正在運行或停止所有動畫時,此屬性的變化才能生效

<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="btn1">開始動畫</button>
<button id="btn2">改變動畫頻率</button>
<button id="reset">恢復</button>
<div id="box" style="position:relative;height: 100px;width: 300px;background-color: lightblue"></div>
<script>
$('#reset').click(function(){
    history.go();
})
$('#btn1').click(function(event){
  $('#box').animate({'left':'300px'},1000).animate({'width':'100px'},1000);
});
$('#btn2').click(function(){
    $.fx.interval = 100;
});
</script>


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

-Advertisement-
Play Games
更多相關文章
  • 本文主要是探究學習比較流行的一款消息層是如何設計與實現的 ØMQ是一種消息傳遞系統,或者樂意的話可以稱它為“面向消息的中間件”。它在金融服務,游戲開發,嵌入式系統,學術研究和航空航天等多種環境中被使用。 消息傳遞系統基本上像應用程式的即時消息一樣工作。應用程式決定將事件傳送到另一個應用程式(或多個應 ...
  • 每天一個設計模式-5 工廠方法模式 1.模式定義 定義一個用於創建對象的介面,讓子類決定實例化那一個類,Factory Method使一個類的實例化延遲到其子類。 2.工廠方法模式解決問題的思路 工廠方法模式需要介面對象,那就定義一個方法來創建這個介面對象(工廠方法);可是事實上它自己是不知道如何創 ...
  • 使用的lib庫有: 在lib庫目錄下新建一個src文件夾用來存放生成的文件,然後新建generatorConfig.xml 裡面代碼為: 最後在cmd控制臺下找到lib的根目錄然後執行以下語句 1 Java -jar mybatis-generator-core-1.3.5.jar -configf ...
  • 參考:github, https://github.com/liuxiaochen0625/MyBatis-Spring-Boot-master.git 從controller組裝tk.mybatis.mapper.entity.Example 對象,操作起來較為麻煩,不符合我們日常書寫習慣,因而改 ...
  • 這是一個好的開始,過程很漫長,但我卻樂在其中. 在大學之際,這是我的又一個開始,隨便寫點啦. 想把每一次的過程記錄下來 這樣以後對自己 對別人都會有所幫助。 好啦 作為一名大三的學生黨 加油吧! ...
  • 每天一個設計模式-4 單例模式(Singleton) 1.實際生活的例子 有一天,你的自行車的某個螺絲釘鬆了,修車鋪離你家比較遠,而附近的五金店有賣扳手;因此,你決定去五金店買一個扳手,自己把螺絲釘固定緊。不一會兒,自行車就被你修好了;首先,這個扳手你不會扔掉,下次用的時候直接找出來就用了。好,今天 ...
  • Atitit.eclise的ide特性 abt 編譯 為什麼要在Intellij IDEA中使用Eclipse編譯器 如果你使用Intellij Idea,你應該考慮使用Eclipse編譯器來代替Javac。 你的項目所使用的編譯器可在IDE的設置頁面更改。 需要註意,如果你使用的是Java8,只有 ...
  • 一、元素選擇符 1. * 在我們看比較高級的選擇器之前,應該認識下這個眾所周知的清空選擇器。星號呢會將頁面上所有每一個元素都選到。許多開發者都用它來清空`margin`和`padding`。當然你在練習的時候使用這個沒問題,但是我不建議在生產環境中使用它。它會給瀏覽器憑添許多不必要的東西。`*`也可 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...