我是靠谱客的博主 酷酷寒风,最近开发中收集的这篇文章主要介绍原生JS封装动画,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

用过jQuery的都知道,jQuery中有提供了一个动画方法,那就是animate方法。这个函数的关键在于指定动画形式及结果样式属性对象。这个对象中每个属性都表示一个可以变化的样式属性(如“height”、“top”或“opacity”)。

使用方法

$("#box").animate({left: 500}, 3000);

上面是jQuery中的动画方法,那么使用原生JS我们如何封装这样的动画方法呢?

开始封装

function linear(t, b, c, d) {
    return c / d * t + b
}

function tween(element, target, duration, callback) {
    let change = {};
    let begin = {};
    for (let key in target) {
        begin[key] = getCss(element, key);
        change[key] = removeUnit(target[key]) - begin[key];
    }

    let time = 0;
    let timing = setInterval(() => {
        time += 20;
    if (time >= duration) {
        clearInterval(timing);
        for (let key in target) {
            setCss(element, key, target[key]);
        }
        callback && callback.call(element);
        return;
    }
    for (let key in target) {
        let current = linear(time, begin[key], change[key], duration);
        setCss(element, key, current);
    }
}, 20)
}

function getCss(ele, attr) {
    let value = window.getComputedStyle(ele)[attr];
    return removeUnit(value);
}

function removeUnit(value) {
    let reg = /^[-+]?([1-9]d+|d)(.d+)?(px|pt|em|rem)$/;
    if (isNaN(value) && reg.test(value)) return parseFloat(value);
    if (isNaN(value)) return Number(value);
    return value
}

function setCss(ele, attr, val) {
    let reg = /^(width|height|top|bottom|left|right|(margin|padding)(Top|Left|Bottom|Right)?)$/;
    if (!isNaN(val) && reg.test(attr)) {
        ele.style[attr] = val + "px";
        return;
    }
    ele.style[attr] = val;
}

在这个封装的方法中,linear是表示匀速运动,如果你想支持其他动画公式,请自行修改。

使用封装的动画也很简单:

let box = document.getElementById("box");
tween(box, {left: 500}, 3000);

代码源码在GitHub中:传送门

最后

以上就是酷酷寒风为你收集整理的原生JS封装动画的全部内容,希望文章能够帮你解决原生JS封装动画所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(111)

评论列表共有 0 条评论

立即
投稿
返回
顶部