1. 程式人生 > >50行程式碼實現的高效能動畫定時器 raf-interval

50行程式碼實現的高效能動畫定時器 raf-interval

寫在前面

raf-interval 是基於 window.requestAnimationFrame() 封裝的定時器。

window.requestAnimationFrame() 方法告訴瀏覽器您希望執行動畫,並請求瀏覽器呼叫指定的函式在下一次重繪之前更新動畫。該方法將在重繪之前呼叫的回撥作為引數。所以

如果您想在下一個重繪時為另一個框架設定動畫,您的回撥例程必須呼叫 requestAnimationFrame()。
如果你想做逐幀動畫的時候,你應該用這個方法。這就要求你的動畫函式執行會先於瀏覽器重繪動作。通常來說,被呼叫的頻率是每秒60次,但是一般會遵循W3C標準規定的頻率。如果是後臺標籤頁面,重繪頻率則會大大降低。

通過 raf-interval 我們可以把抽象的物件的自身的迴圈邏輯通過 setRafInterval 書寫在自身的程式碼裡,但是卻執行在唯一的 ticker,這樣邏輯不會被拆得支離破碎,更好維護方便擴充套件。

API

  • setRafInterval 開啟定時器
  • clearRafInterval 清除定時器

和setInterval 和 clearInterval 用法一致!超級簡便

特性

  • 和 setInterval clearInterval 一樣的使用方式
  • 當用戶切到其他tab自動停止迴圈,低功耗,更省電
  • 簡單的API就能製作高效能絲般順滑的的動畫效果
  • 智慧地停止的開啟迴圈

使用

沒有 raf-interval 之前:

var i = 0
var interval = setInterval(function() {
    console.log(i++)
    if (i > 6) {
        clearInterval(interval)
    }
},1000)

有了 raf-interval 之後:

var i = 0
var rafInterval = setRafInterval(function() {
    console.log(i++)
    if (i > 6) {
        clearRafInterval(rafInterval)
    }
},1000)

安裝

$ npm install raf-interval

或者從 CDN 拉取:

License

This content is released under the MIT License.

相關推薦

50程式碼實現高效能動畫定時 raf-interval

寫在前面 raf-interval 是基於 window.requestAnimationFrame() 封裝的定時器。 window.requestAnimationFrame() 方法告訴瀏覽器您希望執行動畫,並請求瀏覽器呼叫指定的函式在下一次重繪之前更新動畫。該方法將在重繪之前呼叫的回撥作為引數。所以

50程式碼實現3D模擬真實撒金幣動效

我們將會用50行不到的程式碼來實現一個3D模擬撒金幣動效。你只需要一點Egret基礎就能夠快速上手,如果你不瞭解Egret,這裡有一篇3分鐘建立hello world來帶你快速入門。 實現效果 原始碼和線上demo 完整的工程請見:github.com/wildfirecod…

50程式碼實現人臉識別檢測

現在的人臉識別技術已經得到了非常廣泛的應用,支付領域、身份驗證、美顏相機裡都有它的應用。下面小編給大家帶來了基於50行Python程式碼實現人臉檢測功能,一起看看吧。 現在的人臉識別技術已經得到了非常廣泛的應用,支付領域、身份驗證、美顏相機裡都有它的應用。用iPhone的同學們應該對下面的功能比

不到50程式碼實現一個能對請求併發數做限制的通用RequestDecorator

使用場景 在開發中,我們可能會遇到一些對非同步請求數做併發量限制的場景,比如說微信小程式的request併發最多為5個,又或者我們需要做一些批量處理的工作,可是我們又不想同時對伺服器發出太多請求(可能會對伺服器造成比較大的壓力)。這個時候我們就可以對請求併發數進行限制,並且使用排隊機制讓請求有序的傳送出去。

50程式碼實現簡單的網站伺服器 (一)

歡迎點選「演算法與程式設計之美」↑關注我們!本文首發於微信公眾號:"演算法與程式設計之美",歡迎關注,及時瞭解更多此係列部落格。本系列教程將和您一起探討如何利用Java語言一步一步實現自己的web伺服器

50程式碼實現人臉檢測

http://mp.weixin.qq.com/s/oDMFoPh6wLYFnTP2rG2AuA 現在的人臉識別技術已經得到了非常廣泛的應用,支付領域、身份驗證、美顏相機裡都有它的應用。用iPhone的同學們應該對下面

50程式碼實現對抗生成網路GAN

轉自大牛Dev Nag。Dev Nag是前谷歌高階工程師、AI 初創公司 Wavefront 創始人兼 CTO,本文介紹了他是如何用不到五十行程式碼,在 PyTorch 平臺上完成對 GAN 的訓練。 In 2014, Ian Goodfellow and his colleagues at the U

HTML5遊戲實戰 1 50程式碼實現正面跑酷遊戲

                前段時間看到一個“熊來了”的HTML5跑酷遊戲,它是一個典型的正面2D跑酷遊戲,這裡借用它來介紹一下用Gamebuilder+CanTK開發正面跑酷遊戲的基本方法。CanTK(Canvas ToolKit)是一個開源的遊戲引擎和APP框架,是開發HTML5遊戲或者APP的利器,

100程式碼實現最簡單的基於FFMPEG+SDL的視訊播放(SDL1.x)

                =====================================================最簡單的基於FFmpeg的視訊播放器系列文章列表:=====================================================簡介FFMPEG

50 程式碼實現中英文翻譯

50 行程式碼,實現中英文翻譯 閱讀文字大概需要 4.2 分鐘。 現在的時代,越來越看重英語能力。如果你懂得英語,你會接觸到更大的世界,你會發現更多的資訊。尤其是對於程式設計師來說,好的程式設計資料都是來自英文文件。那些國內的翻譯的版本,有很多內容跟原版相差的太多,甚至牛頭不對馬嘴。

[tensorflow應用之路]10程式碼實現一個完整的SVM分類

SVM是一種常用的機器學習分類器模型,其原理為最大化類間隔(被稱為支援向量),來達到分類的目的。它是一種有監督的模型。 SVM原理簡述 SVM通過預測值y′=wx+by′=wx+b與真實值yy之間的差值實現最大間隔分類。即 wx+b⩾1,y=1wx+b

最簡單的區塊鏈實現,不到50程式碼!(一)

什麼是區塊鏈(Blockchain)? 一個電子記賬本,以比特幣和其他密碼加密貨幣進行的交易公開地、按照日期順序記錄其中。 總的來說,它是一個公開的資料庫,新的資料儲存在一個稱為區塊的容器中,並且附加到一個“不可變”的鏈條(即區塊鏈)上,鏈條上還有以前附加的資料。這裡的“不

XCode版【100程式碼實現最簡單的基於FFMPEG+SDL的視訊播放

【來自】 1.新建XCode工程後,發現即使安裝了SDL和FFMPEG也編譯不成功,需要修改各種環境。經過我的不懈努力加百穀啥的...貼個能編譯通過的過程出來。謹記! 2.首先需要編譯好ffmpeg原始碼,然後還需要安裝SDL(ffmpeg直接編譯,SDL我是通過brew安

50程式碼教你打造一個公眾號文章採集

Alfred的女票是一枚資料科學領域的新媒體運營官(是的,Alfred是一名程式設計師,Alfr

頁面實現多個定時(計時)時選用NSTimer還是GCD?(幹貨不濕)

self. spa inf ima efault baidu 設定 common ref 定時器在我們每個人做的iOS項目裏面必不可少,如登錄頁面倒計時、支付期限倒計時等等,一般來說使用NSTimer創建定時器: + (NSTimer *)timerWithTimeInte

python 三程式碼實現快速排序

python 三行程式碼實現快速排序 最近在看 python cookbook , 裡面的例子很精彩,這裡就幫過來,做個備忘錄 主要利用了行數的遞迴呼叫和Python的切片特性,解釋一下每行程式碼的含義: 第1行: #coding:utf-8 指定utf

分享:50程式碼監聽watch小程式的globalData

監聽方法: 1 // 在任何元件、頁面,例如頁面 2 3 const app = getApp( ); 4 5 Page({ 6 7 onLoad: function( ) { 8 app.watch$('role', ( val, old ) => {

pytorch 50程式碼搭建ResNet-34

#------------------------------用50行程式碼搭建ResNet------------------------------------------- from torch import nn import torch as t from torch.nn import

30程式碼實現Javascript中的MVC

從09年左右開始,MVC逐漸在前端領域大放異彩,並終於在剛剛過去的2015年隨著React Native的推出而迎來大爆發:AngularJS、EmberJS、Backbone、ReactJS、RiotJS、VueJS…… 一連串的名字走馬觀花式的出現和更迭,它們中一些已經漸漸淡出了大家的視

100程式碼實現一個vue分頁元件

今天用vue來實現一個分頁元件,總體來說,vue實現比較簡單,樣式部分模仿了elementUI。所有程式碼的原始碼可以再github上下載的到:下載地址 先來看一下實現效果: 點選檢視效果 整體思路 我們先看一下使用到的檔案的目錄: 我們在 pageComponentsTe