国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

當前位置:雨林木風下載站 > 應用軟件教程 > 詳細頁面

如何完成小程序動畫?小程序動畫的完成方法

如何完成小程序動畫?小程序動畫的完成方法

更新時間:2025-09-20 文章作者:未知 信息來源:網絡 閱讀次數:

微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一...
微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一項門檻非常高的創新,經過將近兩年的發展,已經構造了新的小程序開發環境和開發者生態。
本篇文章給大家帶來的內容是介紹如何實現小程序動畫?小程序動畫的實現方法。有一定的參考價值,有需要的朋友可以參考一下,希望對你們有所幫助。

在普通的網頁開發中,動畫效果可以通過css3來實現大部分需求,在小程序開發中同樣可以使用css3,同時也可以通過api方式來實現。

API解讀

小程序中,通過調用api來創建動畫,需要先創建一個實例對象。這個對象通過wx.createAnimation返回,animation的一系列屬性都基于這個實例對象。

創建這個對象

    let animation = wx.createAnimation({
        duration: 2000,
        delay: 0,
        timingFunction: "linear",
    });

這個animation就是通過wx.createAnimation之后返回的實例。在創建過程中,可以給這個實例添加一些屬性,如以上代碼所示,等同于css3animation:$name 2s linear的寫法。

添加動效

實例創建完成之后,基于該實例,添加需要的動態效果,動態類型可以查閱文檔得知,以最常見的移動,旋轉為例:

    animation.translate($width, 0).rotate($deg);

結束動畫

.step()表示一組動畫的結束

    animation.step();

導出動畫

動畫效果添加完成了,如何給想要的dom添加動效呢。這里需要用到.export()導出動畫隊列,賦值給某個dom對象。

    this.setData({ moveOne: animation.export() })
    <view  animation="{{moveOne}}"></view>

例子

以下將通過2組動畫,來對比一下css3api實現方式的不同。

一、模塊移動動畫

動畫效果:

下圖有兩組動畫,分別為api方式(上)與css3方式(下)完成的效果,點擊move按鈕,動畫啟動。

1.gif

代碼實現

以下分別為css3api的核心代碼:

css3:

    <!-- wxml -->
    <view class='border'>
        <view class='css-block {{isMove && "one"}}'></view>
        <view class='css-block {{isMove && "two"}}'></view>
        <view class='css-block {{isMove && "three"}}'></view>
        <view class='css-block {{isMove && "four"}}'></view>
    </view>
    // scss
    @mixin movePublic($oldLeft,$oldTop,$left,$top) {
        from {
          transform:translate($oldLeft,$oldTop);
        }
        to {
          transform:translate($left,$top);
        }
    }
    
    @mixin blockStyle($color,$name) {
        background: $color;
        animation:$name 2s linear infinite alternate;
    }
    .one {
        @include blockStyle(lightsalmon,onemove);
    }
    
    @keyframes onemove {
        @include movePublic(50rpx,-25rpx,-150rpx,0rpx);
    }
    
    .two {
        @include blockStyle(lightblue,twomove);
    }
    
    @keyframes twomove {
        @include movePublic(0rpx,25rpx,-50rpx,0rpx);
    }
    
    .three {
        @include blockStyle(lightgray,threemove);
    }
    
    @keyframes threemove {
        @include movePublic(0rpx,25rpx,50rpx,0rpx);
    }
    
    .four {
        @include blockStyle(grey,fourmove);
    }
    
    @keyframes fourmove {
        @include movePublic(-50rpx,-25rpx,150rpx,0rpx);
    }
    // js
    moveFunction(){
        this.setData({
            isMove: true
        })
    }

css3中通過動態改變class類名來達到動畫的效果,如上代碼通過onetwothreefour來分別控制移動的距離,通過sass可以避免代碼過于冗余的問題。(糾結如何在小程序中使用sass的童鞋請看這里哦:wechat-mina-template)

api:

    moveClick(){
        this.move(-75,-12.5,25,'moveOne');
        this.move(-25,12.5, 0,'moveTwo');
        this.move(25, 12.5,0,'moveThree');
        this.move(75, -12.5,-25,'moveFour');
        this.moveFunction(); // 該事件觸發css3模塊進行移動
    },

    // 模塊移動方法
    move: function (w,h,m,ele) {
        let self = this;
        let moveFunc = function () {
        let animation = wx.createAnimation({
            duration: 2000,
            delay: 0,
            timingFunction: "linear",
        });
    
        animation.translate(w, 0).step()
        self.setData({ [ele]: animation.export() })
        let timeout = setTimeout(function () {
            animation.translate(m, h).step();
            self.setData({
                // [ele] 代表需要綁定動畫的數組對象
                [ele]: animation.export()
            })
          }.bind(this), 2000)
        }
        moveFunc();
        let interval = setInterval(moveFunc,4000)
    }

效果圖可見,模塊之間都是簡單的移動,可以將他們的運動變化寫成一個公共的事件,通過向事件傳值,來移動到不同的位置。其中的參數w,h,m,ele分別表示發散水平方向移動的距離、聚攏時垂直方向、水平方向的距離以及需要修改animationData的對象。

通過這種方法產生的動畫,無法按照原有軌跡收回,所以在事件之后設置了定時器,定義在執行動畫2s之后,執行另一個動畫。同時動畫只能執行一次,如果需要循環的動效,要在外層包裹一個重復執行的定時器到。

查看源碼,發現api方式是通過js插入并改變內聯樣式來達到動畫效果,下面這張動圖可以清晰地看出樣式變化。

2.gif

打印出賦值的animationDataanimates中存放了動畫事件的類型及參數;options中存放的是此次動畫的配置選項,transition中存放的是wx.createAnimation調用時的配置,transformOrigin是默認配置,意為以對象的中心為起點開始執行動畫,也可在wx.createAnimation時進行配置。

1.jpg

二、音樂播放動畫

上面的模塊移動動畫不涉及邏輯交互,因此新嘗試了一個音樂播放動畫,該動畫需要實現暫停、繼續的效果。

動畫效果:

3.gif

兩組不同的動畫效果對比,分別為api(上)實現與css3實現(下):

4.gif

代碼實現

以下分別是css3實現與api實現的核心代碼:

css3:

    <!-- wxml -->
    <view class='music musicTwo musicRotate {{playTwo ? " ": "musicPaused"}} ' bindtap='playTwo'>
        <text class="iconfont has-music" wx:if="{{playTwo}}"></text>
        <text class="iconfont no-music" wx:if="{{!playTwo}}"></text>
    </view>
    // scss
    .musicRotate{
        animation: rotate 3s linear infinite;
    }
    
    @keyframes rotate{
        from{
            transform: rotate(0deg)
        }
        to{
            transform: rotate(359deg)
        }
    }
    
    .musicPaused{
        animation-play-state: paused;
    }
    // js
    playTwo(){
        this.setData({
            playTwo: !this.data.playTwo
        },()=>{
            let back = this.data.backgroundAudioManager;
            if(this.data.playTwo){
                back.play();
            } else {
                back.pause();
            }
        })
    }

通過playTwo這個屬性來判斷是否暫停,并控制css類的添加與刪除。當為false時,添加.musicPaused類,動畫暫停。

api:

    <!-- wxml -->
    <view class='music' bindtap='play'  animation="{{play && musicRotate}}">
        <text class="iconfont has-music" wx:if="{{play}}"></text>
        <text class="iconfont no-music" wx:if="{{!play}}"></text>
    </view>
    // js
    play(){
        this.setData({
            play: !this.data.play
        },()=>{
            let back = this.data.backgroundAudioManager;
            if (!this.data.play) {
                back.pause();
               // 跨事件清除定時器
               clearInterval(this.data.rotateInterval);
            } else {
                back.play();
                // 繼續旋轉,this.data.i記錄了旋轉的程度
                this.musicRotate(this.data.i);
            }
        })
    },
    musicRotate(i){
        let self = this;
        let rotateFuc = function(){
            i++;
            self.setData({
                i:i++
            });
            let animation = wx.createAnimation({
                duration: 1000,
                delay: 0,
                timingFunction: "linear",
            });
            animation.rotate(30*(i++)).step()
            self.setData({ musicRotate: animation.export() });
        }
        rotateFuc();
        let rotateInterval = setInterval(
            rotateFuc,1000
        );
        // 全局定時事件
        this.setData({
            rotateInterval: rotateInterval
        })
    }

通過api實現的方式是通過移除animationData來控制動畫,同時暫停動畫也需要清除定時器,由于清除定時器需要跨事件進行操作,所以定了一個全局方法rotateInterval

api方式定義了旋轉的角度,但旋轉到該角度之后便會停止,如果需要實現重復旋轉效果,需要通過定時器來完成。因此定義了變量i,定時器每執行一次便加1,相當于每1s旋轉30°,對animation.rotate()中的度數動態賦值。暫停之后繼續動畫,需要從原有角度繼續旋轉,因此變量i需要為全局變量。

代碼變化:

下圖可以看出,api方式旋轉是通過不斷累加角度來完成,而非css3中循環執行。

5.gif

對比

通過上述兩個小例子對比,無論是便捷度還是代碼量,通過css3來實現動畫效果相對來說是更好的選擇。api方式存在較多局限性:

  1. 動畫只能執行一次,循環效果需要通過定時器完成。

  2. 無法按照原有軌跡返回,需要返回必須定義定時器。

  3. 頻繁借助定時器在性能上有硬傷。

綜合以上,推薦通過css3來完成動畫效果。

以上就是如何實現小程序動畫?小程序動畫的實現方法的詳細內容,更多請關注php中文網其它相關文章!


小程序是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或者搜一下即可打開應用。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        国产精品美女视频| 成人av在线网站| 老司机免费视频一区二区三区| 成人性生交大片免费看视频在线| 久久综合成人精品亚洲另类欧美 | 91丨九色丨国产丨porny| 久久噜噜亚洲综合| 首页欧美精品中文字幕| 久久综合色播五月| 青青草原综合久久大伊人精品优势| 在线观看www91| 亚洲成人精品影院| 欧美大片在线观看一区| 国产高清不卡二三区| 中文字幕av不卡| 日本乱人伦一区| 免费观看日韩av| 中文字幕久久午夜不卡| 色网综合在线观看| 久久精品99国产国产精| 99久久综合狠狠综合久久| 国产精选一区二区三区| 中文字幕在线免费不卡| voyeur盗摄精品| 日韩和欧美一区二区三区| 久久免费国产精品| 91久久精品一区二区二区| 蜜臀久久99精品久久久久宅男| 久久九九久久九九| 欧美乱妇一区二区三区不卡视频| 国产麻豆一精品一av一免费| 又紧又大又爽精品一区二区| 日韩美一区二区三区| 91国偷自产一区二区三区观看| 日本91福利区| 亚洲乱码国产乱码精品精98午夜| 精品福利二区三区| 欧美日韩一区中文字幕| 国产凹凸在线观看一区二区| 视频一区二区三区入口| 亚洲欧美视频在线观看| 亚洲精品一区二区三区影院| 在线视频你懂得一区| 国产成人精品www牛牛影视| 亚洲18影院在线观看| 亚洲三级在线免费观看| 久久九九影视网| 日韩精品一区二区三区蜜臀| 欧美在线不卡视频| 色哟哟一区二区在线观看| 国产不卡一区视频| 国产乱人伦精品一区二区在线观看| 亚洲一区二区三区视频在线播放| 日本一区二区动态图| 久久日韩粉嫩一区二区三区| 日韩一区二区精品| 欧美日韩激情在线| 欧美影院午夜播放| 欧洲激情一区二区| 亚洲国产高清不卡| www国产精品av| 精品国产一区二区亚洲人成毛片| 91精品国产91热久久久做人人| 欧美久久久久免费| 欧美精品一二三四| 91精品国产福利| 精品sm捆绑视频| 精品久久久久久久久久久久久久久久久 | 在线观看欧美精品| av资源站一区| 99精品热视频| 91色porny在线视频| av福利精品导航| 一本色道久久综合亚洲精品按摩| av成人免费在线观看| 色一情一乱一乱一91av| 欧美三级日本三级少妇99| 欧美日韩精品二区第二页| 91精品国产黑色紧身裤美女| 精品免费国产二区三区| 久久久美女艺术照精彩视频福利播放| 久久综合中文字幕| 国产精品久久久久久户外露出| 亚洲欧洲精品一区二区精品久久久 | 色综合久久久久综合体桃花网| 91视频一区二区| 欧美日韩国产另类一区| 日韩免费视频一区| 中文字幕第一区二区| 一区二区久久久| 青青草国产成人av片免费| 国产精品一区2区| 91免费版在线看| 欧美一级高清片在线观看| 久久久久久影视| 一区二区三区av电影| 久久99精品久久久| 色8久久人人97超碰香蕉987| 欧美成人伊人久久综合网| 国产精品激情偷乱一区二区∴| 亚洲成a人片在线不卡一二三区| 日本国产一区二区| 欧美videossexotv100| 国产精品对白交换视频| 日日摸夜夜添夜夜添亚洲女人| 国产91富婆露脸刺激对白| 欧美影院精品一区| 国产精品剧情在线亚洲| 青青草视频一区| 色欧美片视频在线观看| 欧美精品一区二区精品网| 一级日本不卡的影视| 国产毛片精品视频| 欧美一级二级三级乱码| 亚洲丝袜美腿综合| 国产在线精品一区二区夜色| 在线观看av不卡| 中文字幕一区二区三区在线观看 | 国产精品国产成人国产三级| 久久精品国产网站| 欧美色中文字幕| 成人免费一区二区三区视频| 国产一区二区三区精品欧美日韩一区二区三区 | 国模一区二区三区白浆| 欧美日韩精品二区第二页| 亚洲啪啪综合av一区二区三区| 国产在线一区二区| 欧美一区2区视频在线观看| 亚洲激情男女视频| 成人性生交大片免费看在线播放 | 欧美在线|欧美| 亚洲欧美福利一区二区| 波多野结衣的一区二区三区| 久久色中文字幕| 麻豆精品视频在线观看免费| 欧美色偷偷大香| 亚洲国产精品自拍| 91福利在线观看| 一区二区三区日韩欧美精品| 99热99精品| 国产精品嫩草影院av蜜臀| 国产毛片精品一区| 国产精品私房写真福利视频| 国产99精品国产| 国产精品欧美综合在线| 成人综合婷婷国产精品久久免费| 久久精品一区八戒影视| 高清国产一区二区| 国产精品国模大尺度视频| 波多野结衣在线aⅴ中文字幕不卡| 久久蜜臀中文字幕| www.日韩在线| 一区二区三区在线看| 欧美日韩在线观看一区二区 | 国产福利一区在线| 中文字幕精品三区| 97精品视频在线观看自产线路二| 国产精品久久久久一区二区三区共| 国产91精品在线观看| 亚洲精品免费在线观看| 日本道色综合久久| 性做久久久久久免费观看欧美| 欧美日韩精品一区二区三区四区| 日本三级亚洲精品| 国产无人区一区二区三区| 成人中文字幕电影| 亚洲一区中文日韩| 日韩一区二区电影| 91丨九色丨蝌蚪丨老版| 天天综合网天天综合色| 精品国产亚洲一区二区三区在线观看| 国产在线精品一区在线观看麻豆| 亚洲美女精品一区| 欧美一区二区成人6969| 国产大陆亚洲精品国产| 亚洲美女区一区| 精品福利在线导航| 欧洲一区二区av| 国产高清精品在线| 亚洲影院理伦片| 久久久www成人免费毛片麻豆 | 色妞www精品视频| 丝袜亚洲另类欧美综合| 久久久99久久| 欧美日韩国产高清一区二区 | 亚洲超碰精品一区二区| 26uuu另类欧美亚洲曰本| 在线观看日韩一区| 国产一二精品视频| 亚洲成a人片在线不卡一二三区| 欧美精品一区二区三区很污很色的 | 欧美性大战久久久久久久蜜臀| 精品午夜久久福利影院| 亚洲精品中文在线观看| 欧美成人欧美edvon| 在线观看日产精品| 91激情五月电影| 国产成人aaaa| 久色婷婷小香蕉久久| 亚洲综合999|