JavaScript基础8:动画事件

1 动画的开始结束帧

ele.ontransitionend = function(){};
ele.ontransitionstart  = function(){};
ele.onanimationend  = function(){};
ele.onanimationstart  = function(){};

2 requestAnimationFrame动画帧

动画帧和定时器的区别

  • 计算机显示器刷新频率一般是60Hz,相当于每秒重绘60次
  • 动画帧采用的是系统时间间隔,它与计算机系统重绘频率保持一致(高性能,视觉佳)
  • 定时器执行时间间隔不精确
  • 兼容性 IE9 以下不兼容

取消动画帧

  • cancelAnimationFrame

3 ween 动画公式

  • Tween 参数解析
    • t: current time(当前时间-当前运动次数)
    • b: beginning value(初始值)
    • c: change in value(变化量)
    • d: duration(持续时间-运动总次数)
  • 动画框架使用
    • css(el,attr[,value]) css 函数 设置或获取样式
      • 注意: 非数值类样式的处理
      • 注意: transform 相关样式的处理问题

4 封装一个运动框架

4.1 封装一个css样式框架

用于当前样式的获取以及修改

// css样式框架
function css(el, attr, val) {
    if(arguments.length == 2) { // 当只传了前两个参数的时候,是要获取样式
        return parseFloat(getComputedStyle(el)[attr]);
    }

    switch(attr) {
        case 'opacity':
        case 'zIndex':
            el.style[attr] = val;
            break;
        default:
            el.style[attr] = val + 'px';
    }
}

4.2 封装一个mtween运动框架

function mTween(op) {
	let init = {
		time: 400,
		type: "easeBothStrong"
	};

	for (let s in op) {
		init[s] = op[s];
	}
	let delay = 1000 / 60;
	let t = 0;
	let b = {};
	let c = {};
	let d = Math.ceil(init.time / delay);
	for (let s in init.attr) {
		b[s] = css(init.el, s);
		c[s] = init.attr[s] - b[s];
	}
	cancelAnimationFrame(init.el.timer);
	init.el.timer = requestAnimationFrame(move);
	console.log(init.el.timer)

	function move() {
		// console.log(init.el.timer);
		t++;
		if (t > d) {
			cancelAnimationFrame(init.el.timer);
			init.cb && init.cb();
		} else {
			for (let s in b) {
				let val = Tween[init.type](t, b[s], c[s], d);
				css(init.el, s, val);
			}
			init.el.timer = requestAnimationFrame(move);
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值