国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

微信小程序組件開發(fā)規(guī)范

null1145 / 1193人閱讀

摘要:小程序自定義組件開發(fā)規(guī)范一個小程序組件由個文件組成,分別是,本規(guī)范只關注組件的,其它自行查看官方文檔。的變量可以分為以下種類型組件外部通過組件屬性的方式傳入內部的數據。

小程序自定義組件開發(fā)規(guī)范

? 一個小程序組件由4個文件組成,分別是wxmlwxssjsonjs本規(guī)范只關注組件的js,其它自行查看官方文檔。

? 在自定義組件的 js 文件中,需要使用 Component() 來注冊組件,Component是一個構造器,可用于定義組件,調用Component構造器時可以指定組件的屬性、數據、方法等。

Component的變量可以分為以下2種類型:

properties:組件外部通過組件屬性的方式傳入內部的數據。

可用于wxml渲染

不能做會修改數據的運算操作,如果必須要修改數據,可以先把數據賦值給組件的data,例如:this.data.a = this.properties.a,再去做運算操作,有以下兩種情況:

如果this.properties.a的數據是基本數據類型,則直接賦值

如果this.properties.a的數據是引用數據類型,則需要深拷貝一個新的數據之后,再賦值

data:組件內部聲明的數據

主要用于wxml渲染

可以做任何的運算符操作

Component的函數可以分為以下幾種類型:

life-cycle-function:組件生命周期函數

event-function:在組件的methods下自定義的事件響應函數,與wxml的事件綁定一一對應

commen-function:在組件的methods下自定義的公共函數,供life-cycle-functionevent-function調用

request-function:在組件的methods下自定義的異步請求數據的函數

在實際的代碼中,我們利用注釋把變量和函數分為以上定義的幾種類型。

下面以小程序的語音消息組件為例:

文件路徑:components/voice-message


    
import { isCorrectVal } from "../../utils/index";

const app = getApp();

Component({
    properties: {
        // work:作業(yè)的語音 comment:評論的語音
        type: {
            type: String,
            value: "work"
        },
        // 語音的地址
        voiceUrl: {
            type: String,
            value: ""
        },
        // 音頻的長度
        voiceLength: {
            type: Number,
            value: 0
        }
    },
    data: {
        unsubscribe: function() {},
        model: {
            loading: false,
            render: false,
            id: 0,
            voiceLength: 0,
            innerAudioContext: null,
            playing: false,
            trumpetStatus: [false, false, true],
            btnLength: "0"
        }
    },

    /**
     * life-cycle-function
     * @description 初始化組件
    */
    attached: function() {
        this.data.unsubscribe = app.soundScheduler.subscribe(
            "beforePlay",
            () => {
                this.data.model.innerAudioContext.stop();
            }
        );
        if (!isCorrectVal(this.properties.voiceUrl)) {
            throw new Error("音頻地址錯誤");
        }

        /* 計算音頻按鈕長度 */
        let base = 40; // 10s內基礎長度
        let step = 20; // 每10s增加的長度
        let stepNum = 0;
        let length = 40; // 按鈕初始長度
        if (this.properties.type === "comment") {
            base = 30;
            step = 15;
            length = 30;
        }
        if (this.properties.voiceLength > 10) {
            stepNum = Math.ceil((this.properties.voiceLength - 10) / 10);
        }
        length = base + step * stepNum;
        this.setData({
            "model.btnLength": length,
            "model.voiceLength":
                this.properties.voiceLength >= 2
                    ? this.properties.voiceLength
                    : 2
        });

        this.data.model.innerAudioContext = wx.createInnerAudioContext();
        this.data.model.innerAudioContext.obeyMuteSwitch = false;
        this.data.model.innerAudioContext.src = this.properties.voiceUrl;
        this.data.model.innerAudioContext.onPlay(() => {
            this.onPlay();
        });
        this.data.model.innerAudioContext.onStop(res => {
            this.onStop();
        });
        this.data.model.innerAudioContext.onEnded(res => {
            this.onStop();
        });
        this.data.model.innerAudioContext.onError(res => {
            this.onError(res);
        });
    },

    methods: {
        /**
         * event-function
         * @description 切換音頻播放狀態(tài)(播放/停止)
        */
        togglePlay: function() {
            if (this.data.model.loading) return;
            if (this.data.model.playing) {
                this.data.model.innerAudioContext.stop();
            } else {
                this.setData(
                    {
                        "model.loading": true
                    },
                    () => {
                        app.soundScheduler.dispatch("beforePlay");
                        app.videoContext.pause();
                        this.data.model.innerAudioContext.play();
                        setTimeout(() => {
                            if (this.data.model.loading) {
                                this.setData({
                                    "model.loading": false
                                });
                            }
                        }, 3000);
                    }
                );
            }
        },

        /**
         * common-function
         * @description 音頻開始播放觸發(fā)時的處理函數
        */
        onPlay: function() {
            this.setData(
                {
                    "model.loading": false
                },
                () => {
                    this.running();
                }
            );
        },

        /**
         * common-function
         * @description 音頻停止播放或者播放結束時的處理函數
        */
        onStop: function() {
            this.stop();
        },

        /**
         * common-function
         * @description 音頻播放錯誤時的處理函數
        */
        onError: function(res) {
            console.log(res);
            this.setData(
                {
                    "model.loading": false
                },
                () => {
                    this.stop();
                }
            );
        },

        /**
         * common-function
         * @description 啟動音頻小喇叭動畫
         */
        running: function() {
            let vm = this;

            vm.data.model.playing = true;

            let num = 1;
            let idx = 1;
            let timer = null;
            function animation() {
                if (!vm.data.model.playing) {
                    clearTimeout(timer);
                    vm.setData({
                        "model.trumpetStatus": [false, false, true]
                    });
                    return;
                }

                switch (idx) {
                    case 1:
                        vm.setData({
                            "model.trumpetStatus": [true, false, false]
                        });
                        break;
                    case 2:
                        vm.setData({
                            "model.trumpetStatus": [false, true, false]
                        });
                        break;
                    case 3:
                        vm.setData({
                            "model.trumpetStatus": [false, false, true]
                        });
                        break;
                }
                ++idx;
                if (idx === 4) {
                    idx = 1;
                }

                ++num;
                timer = setTimeout(animation, 600);
            }
            timer = setTimeout(animation, 600);
        },

        /**
         * common-function
         * @description 停止音頻小喇叭動畫
         */
        stop: function() {
            this.data.model.playing = false;
        }
    },
    
    /**
     * life-cycle-function
     * @description 卸載組件
     */
    detached: function() {
        this.data.model.innerAudioContext.stop();
        this.data.unsubscribe();
    },
});

如果你已經看完了代碼,那么對這個組件的 代碼執(zhí)行過程 是否心里已經有數?
這個組件的代碼執(zhí)行過程是這樣的:

1. 在生命周期鉤子函數attached中初始化組件
2. 組件掛載并渲染完成,到達可響應用戶操作的狀態(tài)(這個步驟由小程序自動執(zhí)行,無需寫額外的代碼)
3. 響應用戶操作
    - 用戶點擊語音消息,如果語音沒在播放,則播放語音
    - 用戶點擊語音消息,如果語音正在播放,則停止播放
4. 卸載組件

如果心里還沒數,那把除了life-cycle-functionevents-function的之外的代碼都忽略掉,再看看組件生命周期鉤子函數用戶交互事件響應函數的代碼與注釋呢?

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/108000.html

相關文章

  • 信小程序調研文檔

    摘要:關于微信小程序之前只是聽說,并沒有引起我太大的興趣。剛好團隊內部有個需求需要微信小程序。暫時沒有上線經歷,沒辦法給出這個時間微信小程序的代碼包大小當前限制是。 關于微信小程序之前只是聽說,并沒有引起我太大的興趣。周一被小程序刷屏,然后就順手搜索了解了一下。發(fā)現小程序已經火遍了整個程序員圈子。剛好團隊內部有個需求需要微信小程序。就緊急對微信小程序進行了調研,閱讀過開發(fā)者文檔后總結了以下的...

    kidsamong 評論0 收藏0
  • 有贊的信小程序組件庫(ZanUI-WeApp)開源了

    摘要:背景由于有贊與微信密切的合作關系,我們第一時間就拿到了內測賬號。春節(jié)前我們把它開源到了上,是希望幫助開發(fā)者尤其是有贊生態(tài)的開發(fā)者能夠更快更低門檻地開發(fā)出自己的微信小程序,同時希望和開發(fā)者們一起打造高顏值好用易擴展的小程序組件庫。 背景 由于有贊與微信密切的合作關系,我們第一時間就拿到了內測賬號。17年1月9號,我們同時上線了有贊微商城小程序和有贊精選小程序(可以在微信-發(fā)現-小程序里搜...

    psychola 評論0 收藏0
  • 信小程序開發(fā)中的二三事之網易云信IMSDK DEMO

    摘要:傳統(tǒng)的網頁編程采用的三劍客來實現,在微信小程序中同樣有三劍客。觀察者模式不難實現,重點是如何在微信小程序中搭配其特有的生命周期來使用。交互事件傳統(tǒng)的事件傳遞類型有冒泡型與捕獲型,微信小程序中自然也有。 本文由作者鄒永勝授權網易云社區(qū)發(fā)布。 簡介為了更好的展示我們即時通訊SDK強悍的能力,網易云信IM SDK微信小程序DEMO的開發(fā)就提上了日程。用產品的話說就是: 云信 IM 小程序 S...

    weij 評論0 收藏0
  • 前端相關匯總

    摘要:簡介前端發(fā)展迅速,開發(fā)者富有的創(chuàng)造力不斷的給前端生態(tài)注入新生命,各種庫框架工程化構建工具層出不窮,眼花繚亂,不盲目追求前沿技術,學習框架和庫在滿足自己開發(fā)需求的基礎上,然后最好可以對源碼進行調研,了解和深入實現原理,從中可以獲得更多的收獲隨 showImg(https://segmentfault.com/img/remote/1460000016784101?w=936&h=397)...

    BenCHou 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<