<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
        當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

        js動(dòng)畫(animate)簡(jiǎn)單引擎代碼示例_javascript技巧

        來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 21:05:41
        文檔

        js動(dòng)畫(animate)簡(jiǎn)單引擎代碼示例_javascript技巧

        js動(dòng)畫(animate)簡(jiǎn)單引擎代碼示例_javascript技巧:用慣了jquery的同學(xué),相信都很欣賞其動(dòng)畫引擎。確實(shí)相對(duì)比較完善!如果,如果想像力足夠豐富的話,相信可以做出超出想像的效果。當(dāng)然,跟2d庫(kù)比起來(lái),還是相差相當(dāng)一段距離。jquery壓根也不是專門為動(dòng)畫而設(shè)計(jì)的。模擬真實(shí)世界方面,還是不足的。但在web世
        推薦度:
        導(dǎo)讀js動(dòng)畫(animate)簡(jiǎn)單引擎代碼示例_javascript技巧:用慣了jquery的同學(xué),相信都很欣賞其動(dòng)畫引擎。確實(shí)相對(duì)比較完善!如果,如果想像力足夠豐富的話,相信可以做出超出想像的效果。當(dāng)然,跟2d庫(kù)比起來(lái),還是相差相當(dāng)一段距離。jquery壓根也不是專門為動(dòng)畫而設(shè)計(jì)的。模擬真實(shí)世界方面,還是不足的。但在web世
        用慣了jquery的同學(xué),相信都很欣賞其動(dòng)畫引擎。確實(shí)相對(duì)比較完善!如果,如果想像力足夠豐富的話,相信可以做出超出想像的效果。當(dāng)然,跟2d庫(kù)比起來(lái),還是相差相當(dāng)一段距離。jquery壓根也不是專門為動(dòng)畫而設(shè)計(jì)的。模擬真實(shí)世界方面,還是不足的。但在web世界里還是游刃有余的。動(dòng)畫其實(shí)一直是flash的專屬領(lǐng)地(web區(qū)哉)。只是它常常淪為黑客攻擊的漏洞所在,而且要裝插件,有時(shí)候文件實(shí)在太大,而且性耗實(shí)在是高啊。html5出現(xiàn)后,其實(shí)adobe自己都轉(zhuǎn)移陣地到html5了。當(dāng)然,我覺(jué)得很長(zhǎng)一段時(shí)間內(nèi),flash是不會(huì)被放棄的。

        長(zhǎng)話短說(shuō),步入正題。仿照f(shuō)lash的動(dòng)畫原理,自己寫了一個(gè)非常簡(jiǎn)單的js動(dòng)畫引擎。

        首先,用過(guò)flash的同學(xué)都知道。flash有個(gè)時(shí)間線,上面布滿了“幀”。其實(shí)每個(gè)幀都是一個(gè)鏡頭,鏡頭連貫起來(lái)就是一副動(dòng)畫效果。其實(shí),這跟電影的原理也一樣的,小時(shí)候玩過(guò)膠片的都知道,對(duì)著光可以看到一副副的鏡頭。人眼分辨兩個(gè)畫面的連貫是有時(shí)間限度的。如果想看不到兩個(gè)畫面變換時(shí)的閃爍大概30幀/秒左右,電影是24幀的。所以,如果能保證,動(dòng)畫切換能保證每秒30次,基本上,就做到了動(dòng)畫的流暢效果,但是這取決環(huán)境。所以具體情況,具體而定,其實(shí)關(guān)于這方面的知識(shí)我也是一知半解。就這個(gè)動(dòng)畫引擎而言,了解這么多也差不多足夠了,有興趣可以查找相關(guān)知識(shí)!

        下面開始說(shuō)說(shuō)設(shè)計(jì)原理。

        首先需要一個(gè)幀頻,也就是多少幀每秒。如果有了總用時(shí),就可以計(jì)算出整個(gè)動(dòng)畫下來(lái)有多少個(gè)“畫面”(總幀數(shù))。這種設(shè)計(jì),顯然有個(gè)不足的地方,不能保證時(shí)間正好是個(gè)整數(shù)幀。除非1ms一幀。這是一個(gè)網(wǎng)友提出來(lái)的,我感覺(jué)不好就沒(méi)有采用。所以這個(gè)引擎是有時(shí)間誤差的。有了總幀數(shù),當(dāng)動(dòng)畫運(yùn)行到最后一幀的時(shí)候,整個(gè)動(dòng)畫也就播放完。如果需要重復(fù)播放,重新把當(dāng)前幀歸0。這種動(dòng)畫有一個(gè)好處,就可以直接運(yùn)行到指定幀。也就是flash里的gotoAndStop和gotoAndPlay。其實(shí)整個(gè)動(dòng)畫設(shè)計(jì)原理都是照著flash實(shí)現(xiàn)的。包括一個(gè)很重要的方法:enterFrame。位置就是根據(jù)進(jìn)入當(dāng)前幀來(lái)計(jì)算的。還有其它一些方法:stop、play、next......等等因?yàn)槟壳皝?lái)說(shuō),這個(gè)引擎是寫非常簡(jiǎn)單和粗糙的,先不說(shuō)這么詳細(xì)了。下面先上代碼和示例吧!

        animate.js 動(dòng)畫核心
        代碼如下:
        var animation = function(obj) {
        this.obj = obj;
        this.frames = 0;
        this.timmer = undefined;
        this.running = false;
        this.ms = [];
        }

        animation.prototype = {
        fps: 36,
        init: function(props, duration, tween) {
        //console.log('初始化');
        this.curframe = 0;
        this.initstate = {};
        this.props = props;
        this.duration = duration || 1000;
        this.tween = tween || function(t, b, c, d) {
        return t * c / d + b;
        };
        this.frames = Math.ceil(this.duration * this.fps/1000);
        for (var prop in this.props) {
        this.initstate[prop] = {
        from: parseFloat($util.dom.getStyle(this.obj, prop)),
        to: parseFloat(this.props[prop])
        };
        }
        },
        start: function() {
        if (!this.running && this.hasNext()) {
        //console.log('可以執(zhí)行...');
        this.ms.shift().call(this)
        }
        return this;
        },
        //開始播放
        play: function(callback) {
        //console.log('開始動(dòng)畫!');
        var that = this;

        this.running = true;

        if (this.timmer) {
        this.stop();
        }

        this.timmer = setInterval(function() {
        if (that.complete()) {
        that.stop();
        that.running = false;
        if (callback) {
        callback.call(that);
        }
        return;
        }
        that.curframe++;
        that.enterFrame.call(that);
        },
        / this.fps);

        return this;
        },
        // 停止動(dòng)畫
        stop: function() {
        //console.log('結(jié)束動(dòng)畫!');
        if (this.timmer) {
        clearInterval(this.timmer);
        // 清除掉timmer id
        this.timmer = undefined;
        }

        },
        go: function(props, duration, tween) {
        var that = this;
        //console.log(tween)
        this.ms.push(function() {
        that.init.call(that, props, duration, tween);
        that.play.call(that, that.start);
        });
        return this;
        },
        //向后一幀
        next: function() {
        this.stop();
        this.curframe++;
        this.curframe = this.curframe > this.frames ? this.frames: this.curframe;
        this.enterFrame.call(this);
        },
        //向前一幀
        prev: function() {
        this.stop();
        this.curframe--;
        this.curframe = this.curframe < 0 ? 0 : this.curframe;
        this.enterFrame.call(this);
        },
        //跳躍到指定幀并播放
        gotoAndPlay: function(frame) {
        this.stop();
        this.curframe = frame;
        this.play.call(this);
        },
        //跳到指定幀停止播放
        gotoAndStop: function(frame) {
        this.stop();
        this.curframe = frame;
        this.enterFrame.call(this);
        },
        //進(jìn)入幀動(dòng)作
        enterFrame: function() {
        //console.log('進(jìn)入幀:' + this.curframe)
        var ds;
        for (var prop in this.initstate) {
        //console.log('from: ' + this.initstate[prop]['from'])
        ds = this.tween(this.curframe, this.initstate[prop]['from'], this.initstate[prop]['to'] - this.initstate[prop]['from'], this.frames).toFixed(2);
        //console.log(prop + ':' + ds)
        $util.dom.setStyle(this.obj, prop, ds)
        }
        },
        //動(dòng)畫結(jié)束
        complete: function() {
        return this.curframe >= this.frames;
        },
        hasNext: function() {
        return this.ms.length > 0;
        }
        }

        下面是一個(gè)簡(jiǎn)單的工具,其中有所用到的緩動(dòng)公式:

        util.js

        代碼如下:
        $util = {
        /**
        * 類型檢測(cè)
        */
        type : function(obj){
        var rep = /\[object\s+(\w+)\]/i;
        var str = Object.prototype.toString.call(obj).toLowerCase();
        str.match(rep);
        return RegExp.$1;
        },
        /**
        * 深拷貝
        */
        $unlink :function (object){
        var unlinked;
        switch ($type(object)){
        case 'object':
        unlinked = {};
        for (var p in object) {
        unlinked[p] = $unlink(object[p]);
        }
        break;
        case 'array':
        unlinked = [];
        for (var i = 0, l = object.length; i < l; i++) {
        unlinked[i] = $unlink(object[i]);
        }
        break;
        default: return object;
        }
        return unlinked;
        },
        /**
        *Dom 相關(guān)操作
        */
        dom:{
        $: function(id) {
        return document.getElementById(id);
        },
        getStyle: function(obj, prop) {
        var style = obj.currentStyle || window.getComputedStyle(obj, '');
        if (obj.style.filter) {
        return obj.style.filter.match(/\d+/g)[0];
        }
        return style[prop];
        },
        setStyle: function(obj, prop, val) {
        switch (prop) {
        case 'opacity':
        if($util.client.browser.ie){
        obj.style.filter = 'alpha(' + prop + '=' + val*100 + ')'
        }else{
        obj.style[prop] = val;
        }
        break;
        default:
        obj.style[prop] = val + 'px';
        break;
        }
        },
        setStyles: function(obj, props) {
        for (var prop in props) {
        switch (prop) {
        case 'opacity':
        if($util.client.browser.ie){
        obj.style.filter = 'alpha(' + prop + '=' + props[prop] + ')'
        }else{
        obj.style[prop] = props[prop];
        }
        break;
        default:
        obj.style[prop] = props[prop] + 'px';
        break;
        }
        }
        }
        },
        /**
        *Event 事件相關(guān)
        */
        evt : {
        addEvent : function(oTarget, sEventType, fnHandler) {
        if (oTarget.addEventListener) {
        oTarget.addEventListener(sEventType, fnHandler, false);
        } else if (oTarget.attachEvent) {
        oTarget.attachEvent("on" + sEventType, fnHandler);
        } else {
        oTarget["on" + sEventType] = fnHandler;
        }
        },
        rmEvent : function removeEventHandler (oTarget, sEventType, fnHandler) {
        if (oTarget.removeEventListener) {
        oTarget.removeEventListener(sEventType, fnHandler, false);
        } else if (oTarget.detachEvent) {
        oTarget.detachEvent("on" + sEventType, fnHandler);
        } else {
        oTarget["on" + sEventType] = null;
        }
        }
        },
        /**
        *Ajax 異步加載
        */
        ajax : {
        request:function (options) {
        var xhr, res;
        var url = options.url,
        context = options.context,
        success = options.success,
        type = options.type,
        datatype = options.datatype,
        async = options.async,
        send = options.send,
        headers = options.headers;

        try {
        xhr = new XMLHttpRequest();
        } catch(e) {
        try {
        xhr = new ActiveXObject('MSXML2.XMLHTTP');
        } catch(e) {
        xhr = new ActiveXObject('Microsoft.XMLHTTP');
        }
        }

        xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && xhr.status == 200) {
        res = xhr.responseText;
        success(res);
        }
        }
        xhr.open(type, url, async);
        xhr.send(send);
        }
        },
        /**
        *Array 數(shù)組相關(guān)
        */
        array : {
        minIndex : function(ary){
        return Math.min.apply(null,ary);
        },
        maxitem : function(ary){
        return Math.max.apply(null,ary);
        }
        },
        /**
        *Client 客戶端檢測(cè)
        */
        client : function(){
        // 瀏覽器渲染引擎 engines
        var engine = {
        ie: 0,
        gecko: 0,
        webkit: 0,
        khtml: 0,
        opera: 0,

        //complete version
        ver: null
        };

        // 瀏覽器
        var browser = {
        //browsers
        ie: 0,
        firefox: 0,
        safari: 0,
        konq: 0,
        opera: 0,
        chrome: 0,
        //specific version
        ver: null
        };

        // 客戶端平臺(tái)platform/device/OS
        var system = {
        win: false,
        mac: false,
        x11: false,

        //移動(dòng)設(shè)備
        iphone: false,
        ipod: false,
        ipad: false,
        ios: false,
        android: false,
        nokiaN: false,
        winMobile: false,

        //game systems
        wii: false,
        ps: false
        };

        // 檢測(cè)瀏覽器引擎
        var ua = navigator.userAgent;
        if (window.opera){
        engine.ver = browser.ver = window.opera.version();
        engine.opera = browser.opera = parseFloat(engine.ver);
        } else if (/AppleWebKit\/(\S+)/.test(ua)){
        engine.ver = RegExp["$1"];
        engine.webkit = parseFloat(engine.ver);

        //figure out if it's Chrome or Safari
        if (/Chrome\/(\S+)/.test(ua)){
        browser.ver = RegExp["$1"];
        browser.chrome = parseFloat(browser.ver);
        } else if (/Version\/(\S+)/.test(ua)){
        browser.ver = RegExp["$1"];
        browser.safari = parseFloat(browser.ver);
        } else {
        //approximate version
        var safariVersion = 1;
        if (engine.webkit < 100){
        safariVersion = 1;
        } else if (engine.webkit < 312){
        safariVersion = 1.2;
        } else if (engine.webkit < 412){
        safariVersion = 1.3;
        } else {
        safariVersion = 2;
        }

        browser.safari = browser.ver = safariVersion;
        }
        } else if (/KHTML\/(\S+)/.test(ua) || /Konqueror\/([^;]+)/.test(ua)){
        engine.ver = browser.ver = RegExp["$1"];
        engine.khtml = browser.konq = parseFloat(engine.ver);
        } else if (/rv:([^\)]+)\) Gecko\/\d{8}/.test(ua)){
        engine.ver = RegExp["$1"];
        engine.gecko = parseFloat(engine.ver);

        //determine if it's Firefox
        if (/Firefox\/(\S+)/.test(ua)){
        browser.ver = RegExp["$1"];
        browser.firefox = parseFloat(browser.ver);
        }
        } else if (/MSIE ([^;]+)/.test(ua)){
        engine.ver = browser.ver = RegExp["$1"];
        engine.ie = browser.ie = parseFloat(engine.ver);
        }

        //detect browsers
        browser.ie = engine.ie;
        browser.opera = engine.opera;

        //detect platform
        var p = navigator.platform;
        system.win = p.indexOf("Win") == 0;
        system.mac = p.indexOf("Mac") == 0;
        system.x11 = (p == "X11") || (p.indexOf("Linux") == 0);

        //detect windows operating systems
        if (system.win){
        if (/Win(?:dows )?([^do]{2})\s?(\d+\.\d+)?/.test(ua)){
        if (RegExp["$1"] == "NT"){
        switch(RegExp["$2"]){
        case "5.0":
        system.win = "2000";
        break;
        case "5.1":
        system.win = "XP";
        break;
        case "6.0":
        system.win = "Vista";
        break;
        case "6.1":
        system.win = "7";
        break;
        default:
        system.win = "NT";
        break;
        }
        } else if (RegExp["$1"] == "9x"){
        system.win = "ME";
        } else {
        system.win = RegExp["$1"];
        }
        }
        }

        //mobile devices
        system.iphone = ua.indexOf("iPhone") > -1;
        system.ipod = ua.indexOf("iPod") > -1;
        system.ipad = ua.indexOf("iPad") > -1;
        system.nokiaN = ua.indexOf("NokiaN") > -1;

        //windows mobile
        if (system.win == "CE"){
        system.winMobile = system.win;
        } else if (system.win == "Ph"){
        if(/Windows Phone OS (\d+.\d+)/.test(ua)){;
        system.win = "Phone";
        system.winMobile = parseFloat(RegExp["$1"]);
        }
        }

        //determine iOS version
        if (system.mac && ua.indexOf("Mobile") > -1){
        if (/CPU (?:iPhone )?OS (\d+_\d+)/.test(ua)){
        system.ios = parseFloat(RegExp.$1.replace("_", "."));
        } else {
        system.ios = 2; //can't really detect - so guess
        }
        }

        //determine Android version
        if (/Android (\d+\.\d+)/.test(ua)){
        system.android = parseFloat(RegExp.$1);
        }

        //gaming systems
        system.wii = ua.indexOf("Wii") > -1;
        system.ps = /playstation/i.test(ua);

        //return it
        return {
        engine: engine,
        browser: browser,
        system: system
        };

        }(),
        /**
        *Tween 緩動(dòng)相關(guān)
        */
        tween: {
        Linear: function(t, b, c, d) {
        return c * t / d + b;
        },
        Quad: {
        easeIn: function(t, b, c, d) {
        return c * (t /= d) * t + b;
        },
        easeOut: function(t, b, c, d) {
        return - c * (t /= d) * (t - 2) + b;
        },
        easeInOut: function(t, b, c, d) {
        if ((t /= d / 2) < 1) return c / 2 * t * t + b;
        return - c / 2 * ((--t) * (t - 2) - 1) + b;
        }
        },
        Cubic: {
        easeIn: function(t, b, c, d) {
        return c * (t /= d) * t * t + b;
        },
        easeOut: function(t, b, c, d) {
        return c * ((t = t / d - 1) * t * t + 1) + b;
        },
        easeInOut: function(t, b, c, d) {
        if ((t /= d / 2) < 1) return c / 2 * t * t * t + b;
        return c / 2 * ((t -= 2) * t * t + 2) + b;
        }
        },
        Quart: {
        easeIn: function(t, b, c, d) {
        return c * (t /= d) * t * t * t + b;
        },
        easeOut: function(t, b, c, d) {
        return - c * ((t = t / d - 1) * t * t * t - 1) + b;
        },
        easeInOut: function(t, b, c, d) {
        if ((t /= d / 2) < 1) return c / 2 * t * t * t * t + b;
        return - c / 2 * ((t -= 2) * t * t * t - 2) + b;
        }
        },
        Quint: {
        easeIn: function(t, b, c, d) {
        return c * (t /= d) * t * t * t * t + b;
        },
        easeOut: function(t, b, c, d) {
        return c * ((t = t / d - 1) * t * t * t * t + 1) + b;
        },
        easeInOut: function(t, b, c, d) {
        if ((t /= d / 2) < 1) return c / 2 * t * t * t * t * t + b;
        return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;
        }
        },
        Sine: {
        easeIn: function(t, b, c, d) {
        return - c * Math.cos(t / d * (Math.PI / 2)) + c + b;
        },
        easeOut: function(t, b, c, d) {
        return c * Math.sin(t / d * (Math.PI / 2)) + b;
        },
        easeInOut: function(t, b, c, d) {
        return - c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;
        }
        },
        Expo: {
        easeIn: function(t, b, c, d) {
        return (t == 0) ? b: c * Math.pow(2, 10 * (t / d - 1)) + b;
        },
        easeOut: function(t, b, c, d) {
        return (t == d) ? b + c: c * ( - Math.pow(2, -10 * t / d) + 1) + b;
        },
        easeInOut: function(t, b, c, d) {
        if (t == 0) return b;
        if (t == d) return b + c;
        if ((t /= d / 2) < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b;
        return c / 2 * ( - Math.pow(2, -10 * --t) + 2) + b;
        }
        },
        Circ: {
        easeIn: function(t, b, c, d) {
        return - c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;
        },
        easeOut: function(t, b, c, d) {
        return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;
        },
        easeInOut: function(t, b, c, d) {
        if ((t /= d / 2) < 1) return - c / 2 * (Math.sqrt(1 - t * t) - 1) + b;
        return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;
        }
        },
        Elastic: {
        easeIn: function(t, b, c, d, a, p) {
        if (t == 0) return b;
        if ((t /= d) == 1) return b + c;
        if (!p) p = d * .3;
        if (!a || a < Math.abs(c)) {
        a = c;
        var s = p / 4;
        } else var s = p / (2 * Math.PI) * Math.asin(c / a);
        return - (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;
        },
        easeOut: function(t, b, c, d, a, p) {
        if (t == 0) return b;
        if ((t /= d) == 1) return b + c;
        if (!p) p = d * .3;
        if (!a || a < Math.abs(c)) {
        a = c;
        var s = p / 4;
        } else var s = p / (2 * Math.PI) * Math.asin(c / a);
        return (a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b);
        },
        easeInOut: function(t, b, c, d, a, p) {
        if (t == 0) return b;
        if ((t /= d / 2) == 2) return b + c;
        if (!p) p = d * (.3 * 1.5);
        if (!a || a < Math.abs(c)) {
        a = c;
        var s = p / 4;
        } else var s = p / (2 * Math.PI) * Math.asin(c / a);
        if (t < 1) return - .5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;
        return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b;
        }
        },
        Back: {
        easeIn: function(t, b, c, d, s) {
        if (s == undefined) s = 1.70158;
        return c * (t /= d) * t * ((s + 1) * t - s) + b;
        },
        easeOut: function(t, b, c, d, s) {
        if (s == undefined) s = 1.70158;
        return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
        },
        easeInOut: function(t, b, c, d, s) {
        if (s == undefined) s = 1.70158;
        if ((t /= d / 2) < 1) return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b;
        return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;
        }
        },
        Bounce: {
        easeIn: function(t, b, c, d) {
        return c - Tween.Bounce.easeOut(d - t, 0, c, d) + b;
        },
        easeOut: function(t, b, c, d) {
        if ((t /= d) < (1 / 2.75)) {
        return c * (7.5625 * t * t) + b;
        } else if (t < (2 / 2.75)) {
        return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b;
        } else if (t < (2.5 / 2.75)) {
        return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b;
        } else {
        return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b;
        }
        },
        easeInOut: function(t, b, c, d) {
        if (t < d / 2) return Tween.Bounce.easeIn(t * 2, 0, c, d) * .5 + b;
        else return Tween.Bounce.easeOut(t * 2 - d, 0, c, d) * .5 + c * .5 + b;
        }
        }
        }

        }

        下面是個(gè)應(yīng)用:

        代碼如下:




        無(wú)標(biāo)題文檔

        聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        js動(dòng)畫(animate)簡(jiǎn)單引擎代碼示例_javascript技巧

        js動(dòng)畫(animate)簡(jiǎn)單引擎代碼示例_javascript技巧:用慣了jquery的同學(xué),相信都很欣賞其動(dòng)畫引擎。確實(shí)相對(duì)比較完善!如果,如果想像力足夠豐富的話,相信可以做出超出想像的效果。當(dāng)然,跟2d庫(kù)比起來(lái),還是相差相當(dāng)一段距離。jquery壓根也不是專門為動(dòng)畫而設(shè)計(jì)的。模擬真實(shí)世界方面,還是不足的。但在web世
        推薦度:
        標(biāo)簽: 技巧 簡(jiǎn)單 js
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 免费人成网站在线观看不卡| 免费爱爱的视频太爽了| 亚洲六月丁香六月婷婷蜜芽| 国产中文字幕免费观看| 永久免费不卡在线观看黄网站| 亚洲图片中文字幕| 国产免费黄色大片| 69视频免费观看l| 老外毛片免费视频播放| 亚洲网站在线观看| 免费一级毛片在线播放不收费| 日本高清高色视频免费| 亚洲AV香蕉一区区二区三区| 亚洲av成人无码久久精品| 日本高清免费aaaaa大片视频| 久久99精品视免费看| 99亚洲男女激情在线观看| 久久综合亚洲色HEZYO社区 | 99久久99这里只有免费费精品| 黄页网址在线免费观看| 亚洲免费网站在线观看| 亚洲精品乱码久久久久66| 情侣视频精品免费的国产| 久久综合国产乱子伦精品免费| 偷自拍亚洲视频在线观看| 亚洲免费网站在线观看| 久久久久亚洲av无码专区蜜芽| 亚洲国产精品尤物YW在线观看| 一二三四免费观看在线视频中文版 | 亚洲精品~无码抽插| 国产在线播放免费| 免费大片黄在线观看yw| 免费高清国产视频| 国产性生大片免费观看性| 午夜在线免费视频 | 午夜免费啪视频在线观看| fc2成年免费共享视频网站| 国产亚洲美女精品久久久久| 亚洲中文字幕日本无线码| 亚洲欧洲日产国码www| 亚洲av永久无码精品表情包|