返回顶部
首页 > 资讯 > 前端开发 > VUE >html5如何制作新增的定时器requestAnimationFrame
  • 500
分享到

html5如何制作新增的定时器requestAnimationFrame

2024-04-02 19:04:59 500人浏览 独家记忆
摘要

这篇文章主要介绍了HTML5如何制作新增的定时器requestAnimationFrame,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

这篇文章主要介绍了HTML5如何制作新增的定时器requestAnimationFrame,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

在requestAnimationFrame出现之前,我们一般都用setTimeout和setInterval,那么html5为什么新增一个requestAnimationFrame,他的出现是为了解决什么问题?

优势与特点:

1)requestAnimationFrame会把每一帧中的所有DOM操作集中起来,在一次重绘或回流中就完成,并且重绘或回流的时间间隔紧紧跟随浏览器的刷新频率

2)在隐藏或不可见的元素中,requestAnimationFrame将不会进行重绘或回流,这当然就意味着更少的CPU、GPU和内存使用量

3)requestAnimationFrame是由浏览器专门为动画提供的api,在运行时浏览器会自动优化方法的调用,并且如果页面不是激活状态下的话,动画会自动暂停,有效节省了CPU开销

一句话就是:这玩意性能高,不会卡屏,根据不同的浏览器自动调整帧率。如果看不懂或者不理解,也没有什么关系,这玩意跟浏览器渲染原理有关。我们先学会使用它!

如何使用requestAnimationFrame?

使用方式跟定时器setTimeout差不多,不同之处在于,他不需要设置时间间隔参数

var timer = requestAnimationFrame( function(){
             console.log( '定时器代码' );
                      } );

参数是一个回调函数,返回值是一个整数,用来表示定时器的编号.

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta Http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script>
        window.onload = function(){
            var ainput = document.querySelectorAll( "input" ),
                timer = null;
            aInput[0].onclick = function(){
                timer = requestAnimationFrame( function say(){
                    console.log( 1 );
                    timer = requestAnimationFrame( say );
                } );
            };
            aInput[1].onclick = function(){
                cancelAnimationFrame( timer );
            }
        }
    </script>
</head>
<body>
    <input type="button" value="开启">
    <input type="button" value="关闭">
</body>
</html>

cancelAnimationFrame用来关闭定时器

这个方法需要处理兼容:

简单的兼容:

window.requestAnimFrame = (function(){
  return  window.requestAnimationFrame       ||
          window.WEBkitRequestAnimationFrame ||
          window.mozRequestAnimationFrame    ||
          function( callback ){
            window.setTimeout(callback, 1000 / 60);
          };
})();

如果浏览器都不认识AnimationFrame,就用setTimeout兼容.

运用3种不同的定时器(setTimeout, setInterval, requestAnimationFrame)实现一个进度条的加载

一、setInterval方式:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        p{
            width:0px;
            height:40px;
            border-radius:20px;
            background:#09f;
            text-align:center;
            font:bold 30px/40px '微软雅黑';
            color:white;
        }
    </style>
    <script>
        window.onload = function(){
            var oBtn = document.querySelector( "input" ),
                oBox = document.querySelector( "p" ),
                timer = null, curWidth = 0,
                getStyle = function( obj, name, value ){
                    if( obj.currentStyle ) {
                        return obj.currentStyle[name];
                    }else {
                        return getComputedStyle( obj, false )[name];
                    }
                };
            oBtn.onclick = function(){
                clearInterval( timer );
                oBox.style.width = '0';
                timer = setInterval( function(){
                    curWidth = parseInt( getStyle( oBox, 'width' ) );
                    if ( curWidth < 1000 ) {
                        oBox.style.width = oBox.offsetWidth + 10 + 'px';
                        oBox.innerHTML = parseInt( getStyle( oBox, 'width' ) ) / 10 + '%';
                    }else {
                        clearInterval( timer );
                    }
                }, 1000 / 60 );
            }
        }
    </script>
</head>
<body>
    <p>0%</p>
    <p><input type="button" value="ready!Go"></p>
</body>
</html>

html5如何制作新增的定时器requestAnimationFrame

二、setTimeout方式

<script>
        window.onload = function(){
            var oBtn = document.querySelector( "input" ),
                oBox = document.querySelector( "p" ),
                timer = null, curWidth = 0,
                getStyle = function( obj, name, value ){
                    if( obj.currentStyle ) {
                        return obj.currentStyle[name];
                    }else {
                        return getComputedStyle( obj, false )[name];
                    }
                };
            oBtn.onclick = function(){
                clearTimeout( timer );
                oBox.style.width = '0';
                timer = setTimeout( function go(){
                    curWidth = parseInt( getStyle( oBox, 'width' ) );
                    if ( curWidth < 1000 ) {
                        oBox.style.width = oBox.offsetWidth + 10 + 'px';
                        oBox.innerHTML = parseInt( getStyle( oBox, 'width' ) ) / 10 + '%';
                        timer = setTimeout( go, 1000 / 60 );
                    }else {
                        clearInterval( timer );
                    }
                }, 1000 / 60 );
            }
        }
    </script>

三、requestAnimationFrame方式

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        p{
            width:0px;
            height:40px;
            border-radius:20px;
            background:#09f;
            text-align:center;
            font:bold 30px/40px '微软雅黑';
            color:white;
        }
    </style>
    <script>
        window.onload = function(){
            var oBtn = document.querySelector( "input" ),
                oBox = document.querySelector( "p" ),
                timer = null, curWidth = 0,
                getStyle = function( obj, name, value ){
                    if( obj.currentStyle ) {
                        return obj.currentStyle[name];
                    }else {
                        return getComputedStyle( obj, false )[name];
                    }
                };
            oBtn.onclick = function(){
                cancelAnimationFrame( timer );
                oBox.style.width = '0';
                timer = requestAnimationFrame( function go(){
                    curWidth = parseInt( getStyle( oBox, 'width' ) );
                    if ( curWidth < 1000 ) {
                        oBox.style.width = oBox.offsetWidth + 10 + 'px';
                        oBox.innerHTML = parseInt( getStyle( oBox, 'width' ) ) / 10 + '%';
                        timer = requestAnimationFrame( go );
                    }else {
                        cancelAnimationFrame( timer );
                    }
                } );
            }
        }
    </script>
</head>
<body>
    <p>0%</p>
    <p><input type="button" value="ready!Go"></p>
</body>
</html>

感谢你能够认真阅读完这篇文章,希望小编分享的“html5如何制作新增的定时器requestAnimationFrame”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网VUE频道,更多相关知识等着你来学习!

--结束END--

本文标题: html5如何制作新增的定时器requestAnimationFrame

本文链接: https://lsjlt.com/news/65723.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • html5如何制作新增的定时器requestAnimationFrame
    这篇文章主要介绍了html5如何制作新增的定时器requestAnimationFrame,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 ...
    99+
    2024-04-02
  • html5新增的标签如何用
    今天小编给大家分享一下html5新增的标签如何用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。HTML5新增的标签:canv...
    99+
    2023-07-04
  • 如何用HTML5制作数字时钟
    本篇内容主要讲解“如何用HTML5制作数字时钟”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何用HTML5制作数字时钟”吧! 复制代码 XML/HTML ...
    99+
    2024-04-02
  • 如何进行自定义html标记替换html5新增元素
    这篇文章将为大家详细讲解有关如何进行自定义html标记替换html5新增元素,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 在h...
    99+
    2024-04-02
  • HTML5中如何实现新增和移除的元素
    这篇文章主要介绍HTML5中如何实现新增和移除的元素,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!HTML经过10多年的发展,其元素经历了废弃与不断重新定义的过程。为了更好的处理现在...
    99+
    2024-04-02
  • H5如何制作计时器
    这篇文章将为大家详细讲解有关H5如何制作计时器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。代码如下:<!DOCTYPE html>  &...
    99+
    2024-04-02
  • 如何使用JavaScript定时器制作弹窗小广告
    这篇文章将为大家详细讲解有关如何使用JavaScript定时器制作弹窗小广告,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下<head>  ...
    99+
    2024-04-02
  • HTML5中input如何新增type属性color颜色拾取器
    这篇文章主要介绍HTML5中input如何新增type属性color颜色拾取器,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!定义和用法 type 属性规定 input 元素的类型。注...
    99+
    2024-04-02
  • HTML5如何使用新增的表单元素和属性
    这篇文章将为大家详细讲解有关HTML5如何使用新增的表单元素和属性,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。代码演示说明了HTML5新增的表单元素和属性,演示代码中包...
    99+
    2024-04-02
  • windows定时关机命令文本如何制作
    本篇内容主要讲解“windows定时关机命令文本如何制作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“windows定时关机命令文本如何制作”吧!定时关机命令文本制作方法:新建一个文本文档,写入...
    99+
    2023-07-01
  • 如何借助CSS 更好的控制定时器
    今天小编给大家分享的是如何借助CSS 更好的控制定时器,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。 平时工作中很多场合...
    99+
    2024-04-02
  • CSS3如何使用新增边框属性制作关门开门效果
    这篇文章主要介绍了CSS3如何使用新增边框属性制作关门开门效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。border: 宽度 类型 颜色...
    99+
    2024-04-02
  • 如何使用jQuery1.6c新增的适配器
    这篇文章给大家介绍如何使用jQuery1.6c新增的适配器,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在jQuery的attributes模块(github是这样分割的,但耦合这么高...
    99+
    2024-04-02
  • shell脚本如何将Oracle服务器中数据定时增量刷新到ftp服务器中
    这篇文章主要为大家展示了“shell脚本如何将Oracle服务器中数据定时增量刷新到ftp服务器中”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“shell脚本如何将Oracle服务器中数据定时增...
    99+
    2023-06-09
  • 如何使用HTML5的Notification API制作web通知功能
    本篇内容介绍了“如何使用HTML5的Notification API制作web通知功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大...
    99+
    2024-04-02
  • 如何用HTML5制作一个简单的桌球游戏
    本文小编为大家详细介绍“如何用HTML5制作一个简单的桌球游戏”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何用HTML5制作一个简单的桌球游戏”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起...
    99+
    2024-04-02
  • Linux如何删除制定时间的文件
    这篇文章主要为大家展示了“Linux如何删除制定时间的文件”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux如何删除制定时间的文件”这篇文章吧。Linux下如果想要批量删除制定时间的文件,...
    99+
    2023-06-12
  • Linux如何定制sudo密码会话超时的时间
    这篇“Linux如何定制sudo密码会话超时的时间”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Linux如何定制sudo密...
    99+
    2023-06-28
  • 达梦数据库 分区表如何定时自动新增和删除子分区
    下面为自动删除、创建分区子表的存储过程和维护分区表的测试示例: 1 、每月定时增加一个分区子表 create or replace procedure addpartition(sTable...
    99+
    2024-04-02
  • 如何用HTML5制作一个简单的弹力球游戏
    这篇文章主要介绍“如何用HTML5制作一个简单的弹力球游戏”,在日常操作中,相信很多人在如何用HTML5制作一个简单的弹力球游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作