Javascript动画(一)

Javascript定时执行代码块方式

number:setInterval(func, msec)

此方法是每隔一定的时间(msec参数值)调用一次传给它的函数(func参数),若不主动调用clearInterval(number)取消定时器,则会一直执行下去。

function animate(){
	// 需执行的代码
}
// 每秒60帧速率执行
let timerId = setInterval(animate, 1000 / 60);
// 取消定时器
clearInterval(timerId)

number:setTimeout(func, msec)

此方法是在一定时间(msec参数)后,调用一次传给它的函数(func参数),若需重复执行,则需在重复调用setTimeout

function animate(){
	let start = +new Date(), end;
	// 需执行的代码
	
	end = +new Date()
	// 重复执行
	setTimeout(animate, 1000 / 60 - (end - start));		// 做次时间上的补偿,使之更接近1秒60帧的速率
}
animate()

提示: setInterval与setTimeout中的msec参数可不填写或填写不为正数的值,意思是使浏览器以它所允许的最小时间间隔来调用func函数。

HTML5 出的number:requestAnimationFrame(func)

setInterval与setTimeout都是开发者告诉浏览器,在某个大致的时间点上执行代码。若是在绘制动画,我们其实并不清楚绘制下一帧的最佳时机,相反,浏览器肯定比我们更了解绘制下一帧动画的最佳时机。
requestAnimationFrame为此而生!
浏览器会在最佳时机调用func函数,若需一直执行下去,则需在func内再次调用requestAnimationFrame(func)
,浏览器会给func传递一个从程序启动(页面载入)到调用func函数时的时间间隔(chrome浏览器)

let handleId = 0;
let lasttime = undefined;
// 浏览器会给函数传递一个从程序启动(页面载入)到调用animate函数时的时间间隔
function animate(time){
	if (lasttime === undefined) {		// 抛弃第一帧
		lasttime = time;
	} else {
		let dt = time - lasttime;	// 此帧距上一帧的时间间隔
		lasttime = time;
		// 需执行的代码
		
	}
	
	// 重复执行
	handleId  = requestAnimationFram(animate);		// 做次时间上的补偿,使之更接近1秒60帧的速率
}
// 使浏览在最佳时机执行第一帧动画
handleId  = requestAnimationFram(animate);

// ==== 取消 ====
cancelAnimationFrame(handleId);

提示: Chrome 浏览器调用动画回调函数的最大速率不超过每秒60次。

requestAnimationFrame的polyfill

(function (win) {
  'use strict';
  var startTime = +new Date();        //程序启动时的时间点
  win.requestAnimationFrame = (function () {
    return win.requestAnimationFrame ||
      win.webkitRequestAnimationFrame ||
      win.mozRequestAnimationFrame ||
      win.msRequestAnimationFrame ||
      function (callback) {
        var self = this,
          start, finish;
        return win.setTimeout(function () {
          start = +new Date();
          callback(start - startTime);        //将程序运行的总时长返回给回调函数
          finish = +new Date();
          self.timeout = 1000 / 60 - (finish - start);
        }, self.timeout);
      }
  })();

  win.cancelAnimationFrame = (function () {
    return win.cancelAnimationFrame ||
      win.webkitCancelAnimationFrame ||
      win.mozCancelAnimationFrame ||
      win.msCancelAnimationFrame ||
      function (id) {
        win.clearTimeout(id);
      }
  })();
})(window)
下一节:动起来了的小球
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript动画小游戏是一种使用JavaScript编程语言开发的小型游戏。这种游戏通常具有简单的规则和操作,但是通过使用JavaScript动画功能,可以给玩家带来更加丰富和有趣的游戏体验。 在这种类型的游戏中,开发者可以使用JavaScript中的动画库或自定义动画函数来创建各种动画效果。比如,可以通过改变元素的位置、大小、颜色等属性来实现平滑的动画过渡。这种动画效果的应用可以使得游戏场景更加生动和沉浸式。 除了动画效果,JavaScript动画小游戏还可以包括玩家的操作,比如点击、拖拽等。通过监听用户的交互事件,可以触发相应的动画效果或游戏行为,增加游戏的交互性和挑战性。 例如,一个简单的JavaScript动画小游戏可以是一个跳跃的小球避开障碍物的游戏。玩家控制小球的移动,通过点击屏幕或按键来让小球跳起,同时要躲避障碍物。通过改变小球的位置和障碍物的出现位置,可以创建出具有挑战性和变化性的游戏体验。 除了开发过程中的动画效果和交互操作,JavaScript动画小游戏还可以通过添加音效、计分系统、关卡设置等功能来增加游戏的趣味性和可玩性。 总之,JavaScript动画小游戏是一种利用JavaScript编程语言创建的小型游戏,通过运用动画效果和交互操作,为玩家提供丰富,有趣和具有挑战性的游戏体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值