zoukankan      html  css  js  c++  java
  • 怎样推迟某个函数的执行

    方法1: 使用setTimeout();

    function sayHi(){
        alert("Hi.");
    }
    
    setTimeout(sayHi, 2000);

    方法2: 使用window.requestAnimationFrame();

    var element = document.getElementById('animate');
    element.style.position = 'absolute';
    
    var start = null;
    
    function step(timestamp) {
      if (!start) start = timestamp;
      var progress = timestamp - start;
      // 元素不断向左移,最大不超过200像素
      element.style.left = Math.min(progress / 10, 200) + 'px';
      // 如果距离第一次执行不超过 2000 毫秒,
      // 就继续执行动画
      if (progress < 2000) {
        window.requestAnimationFrame(step);
      }
    }
    
    window.requestAnimationFrame(step);

    两者区别: 

    setTimeout()需要手动设置延迟时间, 而requestAnimationFrame()则是会推迟到浏览器下一次重流时执行. 因此, 前者比较通用, 后者主要是放一些需要操作DOM的方法函数, 这样有利于提升性能;

    注意:

    window.cancelAnimationFrame()可以用于取消其内回调函数的执行.

    方法3: 使用window.requestIdleCallback()将内部函数推迟到系统资源空闲时执行;

    用法和window.requestAnimationFrame()类似, 只是推迟条件不同. 同时也有一个取消执行的方法: window.cancelIdleCallback()

    requestIdleCallback(myNonEssentialWork);
    
    function myNonEssentialWork(deadline) {
      while (deadline.timeRemaining() > 0) {
        doWorkIfNeeded();
      }
    }
  • 相关阅读:
    Gvim快捷键学习
    一步一步学习Vim 全图解释
    经典vim插件功能说明、安装方法和使用方法介绍
    中国数学数字图书馆
    RQNOJ第一题---PID1 / 明明的随机数
    gdb常用命令
    linux c下mysql编程样例
    linux c编程 -- 线程互斥
    linux c多线程编程范例
    数据结构 -- 可重用模块的接口设计模板
  • 原文地址:https://www.cnblogs.com/aisowe/p/11718583.html
Copyright © 2011-2022 走看看