JavaScript での手ぶれ補正スロットルの詳細な紹介 (コード例)

不言
リリース: 2019-01-14 09:44:19
転載
2687 人が閲覧しました

この記事では、JavaScript における手ぶれ補正の詳細な紹介 (コード例) を紹介します。必要な方は参考にしていただければ幸いです。

関数スロットルと関数アンチシェイクはどちらも、JS コードの高頻度実行を最適化する手段です。

関数スロットル (スロットル) と関数デバウンス (デバウンス) は両方とも、関数の実行頻度を制限して、関数のトリガー周波数が高すぎてトリガー周波数に追いつけないことによる応答速度を最適化するために使用されます。その結果、遅延、アニメーションの一時停止、またはラグ現象が発生します。

関数スロットル (スロットル)

関数スロットルとは、一定期間内に実行される操作が 1 回だけ実行されること、つまり、実行サイクルが 1 回だけ実行されることを意味します。アクションが呼び出された瞬間が実行サイクル以上である場合、アクションは実行され、次の新しいサイクルに入ります。より鮮明な例は、水が流れ出るまで蛇口を締めた場合です。しずくの形をしていると、時々、水滴が出てくることがわかります。

function debounce(fn, wait) {   
    var timeout = null;   
    return function() {       
        if(timeout !== null) clearTimeout(timeout);       
        timeout = setTimeout(fn, wait);   
    }
}
// 处理函数
function handle() {   
    console.log(Math.random());
}
// 滚动事件
window.addEventListener('scroll', debounce(handle, 1000));
ログイン後にコピー

関数デバウンス (デバウンス)

関数デバウンスとは、アクションが継続的かつ頻繁にトリガーされた場合に、一定期間内にのみアクションが実行されることを意味します。 1 回、つまりアクションが呼び出されてから n ミリ秒が経過した後にのみアクションが実行されます。このアクションが n ミリ秒以内に再度呼び出された場合は、実行時間が再計算されるため、短期間でアクションが実行されます。たとえば、指をバネの上に置いたままにしておくと、指を離すまでバネが上がらないとします。

タイムスタンプ

var throttle = function(func, delay) {           
    var prev = Date.now();           
    return function() {               
        var context = this;               
        var args = arguments;               
        var now = Date.now();               
        if (now - prev >= delay) {                   
            func.apply(context, args);                   
            prev = Date.now();               
        }           
    }       
}       
function handle() {           
    console.log(Math.random());       
}       
window.addEventListener('scroll', throttle(handle, 1000));
ログイン後にコピー

タイマー

var throttle = function(func, delay) {
    var timer = null;
    return function() {
        var context = this;
        var args = arguments;
        if (!timer) {
            timer = setTimeout(function() {
                func.apply(context, args);
                timer = null;
            }, delay);
        }
    }
}
function handle() {
    console.log(Math.random());
}
window.addEventListener('scroll', throttle(handle, 1000));
ログイン後にコピー

以上がJavaScript での手ぶれ補正スロットルの詳細な紹介 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート