JavaScript动画函数animate封装

本文比较了JavaScript和CSS3在动画制作中的优缺点,强调了JavaScript动画的灵活性和处理复杂效果的能力,同时提到了CSS3的简洁性和浏览器兼容性。作者分享了JavaScript动画函数的封装示例和注意事项。
摘要由CSDN通过智能技术生成

写作原因

JavaScript的动画学习

JavaScript动画

缺点:

  1. 因为JavaScript在运行的过程中可能还需要执行其他的脚本语言,所以可能会造成丢帧的情况
  2. 在代码书写方面略难于CSS3动画

优点:

  1. JavaScript动画灵活性强,可以控制动画的开始,停止,返回,取消
  2. 在动画效果的实现上面也是比CSS3动画强的,比如曲线运动,冲击闪烁,视差滚动效果,只有JavaScript动画才能完成
  3. CSS3需要考虑浏览器的兼容问题,但是JavaScript在大部分时候都不会有兼容问题出现

CSS动画

缺点:

  1. 控制能力比较差,不能绑定事件执行回调函数,无法在指定的时间点进行指定的事件
  2. 代码冗长,往往需要较长的代码来实现一段动画

优点:

  1. 代码相对简单,性能调优方向固定
  2. CSS3可以做到自适应低版本浏览器,而JS则需要撰写额外代码

JavaScript动画函数封装

ele 需要添加动画的元素

options 对象{‘属性’:‘结束时的属性值’}
例如:我需要让ball这个元素向左移动到想对父元素1000px的位置,并且同时在移动的过程中逐渐透明,那么我就可以这么写{left:1000px,opacity:0}

callback 回调函数 可以实现链式动画
只有在前一个动画结束后才会执行下一个动画

function animate(ele, options, callback) {
    var pos = {};
    var end = {};
    var speed = {};
    for (var key in options) {
        if (key == 'opacity') {
            pos[key] = parseFloat(getStyle(ele, key)) * 1000;
            end[key] = options[key] * 1000;
        } else {
            pos[key] = parseFloat(getStyle(ele, key));
            end[key] = options[key];
        }
        speed[key] = end[key] - pos[key] > 0 ? 10 : -10;
    }

    clearInterval(ele.timeId)
    ele.timeId = setInterval(function () {
        var flag = true;
        for (var csskey in options) {
            pos[csskey] += speed[csskey];

            if (csskey == 'opacity') {
                ele.style[csskey] = pos[csskey] / 1000;
            } else {
                ele.style[csskey] = pos[csskey] + 'px';
            }

            if (Math.abs(pos[csskey] - end[csskey]) <= Math.abs(speed[csskey])) {
                pos[csskey] = end[csskey];
                ele.style[csskey] = end[csskey] + 'px';
            } else {
                flag = false;
            }
        }
        if (flag) {
            clearInterval(ele.timeId);
            if (callback) {
                callback()
            }
        }
    }, 4)
}

//获取非行内样式的css属性
function getStyle(ele, csskey) {
    if (window.getComputedStyle) {
        return window.getComputedStyle(ele)[csskey];
    } else {
        return ele.currentStyle[csskey];
    }
}

前端新人,如有不足,请指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值