年底了,接个大活儿,做一个回顾公司五年发展的总结ppt,要求做成H5网页
公司想做個(gè)五年總結(jié)
這不快年底了么,公司高層打算把這五年的發(fā)展歷程做一次回顧巡禮,一方面宣揚(yáng)一下公司文化,另一方面歌頌一下公司這五年來取得的輝煌成就,單純的做個(gè)海報(bào),寫個(gè)公眾號(hào)文章,或整個(gè)傳統(tǒng)ppt在內(nèi)部宣講,再剪個(gè)視頻啥的已經(jīng)無法滿足公司想眾樂樂的強(qiáng)烈情感了。
于是想做一個(gè)交互性良好、內(nèi)容表達(dá)形式多樣、章節(jié)清晰、條理分明、易于傳播的“ppt”,于是在公司千人大群里號(hào)召,有沒有誰能做的,問了好幾次,最后只有我應(yīng)下了這個(gè)大活兒。
最后我與一位主要負(fù)責(zé)這件事的領(lǐng)導(dǎo)(我稱為帶頭大哥)和一位UI小姐姐臨時(shí)組成了一個(gè)小隊(duì),來完成這項(xiàng)任務(wù)。
(在線觀看地址,可以先看看效果。記得手指或者鼠標(biāo),向上滑動(dòng)來播放)
很快就確定了中心思想,并設(shè)計(jì)了一套。。。。對(duì)聯(lián)?
帶頭大哥沒過幾日就發(fā)我一個(gè)文檔,上面寫了對(duì)仗工整,思想明確的“對(duì)聯(lián)”
- 我:哇撒~,領(lǐng)導(dǎo),這寫的很好嘛~,這每一頁不做個(gè)動(dòng)畫都說不過去啊。
- 領(lǐng)導(dǎo):對(duì),就打算這么做。
- 我:哈哈哈哈,收到,那么具體做成什么樣呢?
- 領(lǐng)導(dǎo):em~,我已經(jīng)安排UI小姐姐開始設(shè)計(jì)了,過一陣就能出圖。
- 我:哦哦哦,好的~
領(lǐng)會(huì)精神的設(shè)計(jì)小姐姐就開始陸續(xù)出圖了~~~
- 領(lǐng)導(dǎo):阿強(qiáng),圖做好了,你看一下。
- 我:ok,哇偶這圖可以啊。
- UI小姐姐:有什么問題,需要切圖啥的盡管跟我說。
- 我:好的好的。
- 領(lǐng)導(dǎo):阿強(qiáng),那么我們開始研究如何做吧,要求是要做成H5,這樣可以方便分享傳閱,而且時(shí)間我們只有五天,我們要盡快了。
- 我:五天???做不完咋辦
- 領(lǐng)導(dǎo):你知道的,deedline不是我定的,而且這是👆面看中的親兒子項(xiàng)目,獻(xiàn)禮用的,所以。。。
- 我:懂了,我搏一把,目前來看用游戲引擎最合適,畢竟畫面表現(xiàn)這塊,用引擎更好一點(diǎn)。
- 領(lǐng)導(dǎo):可以,具體設(shè)計(jì)方面到時(shí)我們?cè)僖黄鹕塘吭趺醋?#xff0c;開發(fā)這塊需要的話,我也可以參與進(jìn)來,畢竟我也接觸過白鷺引擎,對(duì)了,你打算用啥寫?
- 我:cocos creater
- 領(lǐng)導(dǎo):嗯嗯,沒問題,有什么我能幫忙的盡管跟我說,最后能做出來就行
- 我:好的,收到。
于是我做了一個(gè)工具
so,時(shí)間這么緊,而且做不完可能會(huì)有不小的后果,em~~~~,并且這件事也不是著急干就能干完的,我需要冷靜的想一個(gè)辦法,我忽然想到《代碼整潔之道》中好像說過,具體記不清,大體意思是:“越是想快,就要寫好代碼”。
em~~~,好的,那么我拿出幾天設(shè)計(jì)一個(gè)工具吧,不需要多么成熟,只要能夠滿足容易上手,可以批量制作就行,這樣就能夠?qū)崿F(xiàn)人手的增加,效率也會(huì)提高的局面,到時(shí)完成就變得很有戲了,就這么辦。
于是我用了兩三天的時(shí)間做出了這個(gè)工具,并做了一個(gè)demo給到了帶頭大哥,他表示ok,還可以,能接受,而且經(jīng)過我的指導(dǎo),他也可以參與進(jìn)來了,于是我們就開始“愉快地”批量的制作了。
工具的開發(fā)思路
我總希望用最簡單的話語,描述一件事,我比較喜歡簡單,那么我們就用簡單的方式把我的設(shè)計(jì)講講。
通過鼠標(biāo)或觸摸滑動(dòng),推進(jìn)動(dòng)畫進(jìn)程
視頻可以快進(jìn),倒退,僅僅通過撥動(dòng)進(jìn)度條或者滑動(dòng)屏幕即可,我喜歡這種交互,那就做成這樣,舒服。 首先我不想做成靜態(tài)資源那種的,比如視頻,gif之類的,這種是沒有“生命”的,只能稱之為“物質(zhì)”,我簡單用“陰”代指,我所需要是基于物質(zhì)所煥發(fā)同時(shí)也可以創(chuàng)造物質(zhì)的的“生命,心靈”,我稱他為陽。說ta是“活”的有點(diǎn)過,就是說可以交互,可以整合再利用,隨時(shí)可以通過ta創(chuàng)建視頻,gif之類的靜態(tài)資源,豈不妙哉。
設(shè)計(jì)好個(gè)體,非常關(guān)鍵
我希望設(shè)計(jì)出一系列獨(dú)立個(gè)體,可以很好的串聯(lián)起整個(gè)邏輯,它具備了基本的功能,同時(shí)又具備了擴(kuò)展的能力,可互相聯(lián)結(jié),又彼此獨(dú)立,目前有兩個(gè)主要的個(gè)體,一個(gè)是單位個(gè)體entity,另一個(gè)是動(dòng)作個(gè)體recation
entity大體應(yīng)該具備以下行為:
- 描述自身運(yùn)行的周期: lenPercent和startPercent
- 生命周期函數(shù)
- 開始:live
- 渲染:process
- 結(jié)束:end
- 可以裝載其他個(gè)體的能力:entityArr
- 組成單位為:entity
- 執(zhí)行動(dòng)作的集合:recationArr
- 組成單位為:recation,
recation大體應(yīng)該具備以下行為:
- 描述自身運(yùn)行的周期:start和end
- 執(zhí)行的動(dòng)作:action()
那么個(gè)體設(shè)計(jì)好了,圍繞個(gè)體所展開的邏輯,就順理成章了。
代碼如下:
export default cc.Class({extends: cc.Component,properties: {lenPercent: cc.Float,startPercent: cc.Float,isAutoStart: cc.Boolean,entityArr: {default: [],type: cc.Node}},//externalDuration:外部時(shí)間(父節(jié)點(diǎn)傳過來的時(shí)間),由父節(jié)點(diǎn)決定//internalDuration:自己內(nèi)部定的時(shí)間,有自己決定,//為什么要區(qū)分兩個(gè)呢?由于外部應(yīng)該只能確定我的播放時(shí)間,不應(yīng)該決定我的播放速率,而后者應(yīng)該有個(gè)體自身決定,//startTime和endTime:由父節(jié)點(diǎn)指定的開始和結(jié)束時(shí)間,(根據(jù)父節(jié)點(diǎn)的世界定的‘外部時(shí)間’!!!)//timeLine-表示時(shí)間到哪了,(根據(jù)父節(jié)點(diǎn)的世界定的‘外部時(shí)間’!!!)//totaTime-表示我在父節(jié)點(diǎn)應(yīng)該播放的總時(shí)長,(根據(jù)父節(jié)點(diǎn)的世界定的‘外部時(shí)間’!!!)//progressValue就是通過父節(jié)點(diǎn)傳過來的timeLine,totaTime,timeLine得出我處于的播放進(jìn)度百分比//相應(yīng)的往自己的子節(jié)點(diǎn)傳的就得參照自己的ctor() {this.isLive = false;this.startTime = undefined;this.endTime = undefined;this.internalDuration = 0;//個(gè)體內(nèi)部的時(shí)長this.externalDuration = 0;//個(gè)體相對(duì)父級(jí)的時(shí)長this.progressValue = 0;this.entryData = [];this.recationArr = [];this.startPosition = cc.v2();this.entityArrEx = [];},// LIFE-CYCLE CALLBACKS:start() {this.startPosition = this.node.position;},onLoad() {this.node.comName = this.__classname__;this.internalDuration = this.node.getContentSize().height;//防止設(shè)置的時(shí)間太長,強(qiáng)制設(shè)置為剩余的時(shí)長if (this.lenPercent + this.startPercent > 1) {this.lenPercent = 1 - this.startPercent;}if (this.isAutoStart) {this.startPercent += Math.abs((this.node.position.y / this.node.parent.getContentSize().height));}},onEnable() {let self = this;if (this.entityArr.length) {this.entityArrEx = this.entityArr.map((item, index) => {let entity = item.getComponent(item._name);if (entity.isAutoStart) {}this.entryData.push(entity.initData({startTime: this.getStarTime(entity.startPercent),totaTime: self.internalDuration,}));return entity;});}},//業(yè)務(wù)接口getStarTime(value) {if (value <= 1) {return value * this.internalDuration} else {return value}},initData({ totaTime, startTime }) {this.startTime = startTime;this.externalDuration = this.lenPercent <= 1 ? totaTime * this.lenPercent : this.lenPercent;//結(jié)束時(shí)間最大只能是父類節(jié)點(diǎn)結(jié)束時(shí)間//因?yàn)楦腹?jié)點(diǎn)結(jié)束,子節(jié)點(diǎn)也必須結(jié)束this.endTime = Math.min(totaTime, this.startTime + this.externalDuration);return {startTime: this.startTime,internalDuration: this.internalDuration,endTime: this.endTime}},getCurrentTime(percent) {return (this.startTime + (percent <= 1 ? this.externalDuration * percent : percent));},live() {this.isLive = true;},calcProgress() {this.progressValue = (this.timeLine - this.startTime) / this.externalDuration;},calcReactionProgress({ start, end }) {start = (start <= 1) ? this.internalDuration * start : start;end = (end <= 1) ? this.internalDuration * end : end;return Math.min((this.progressValue * this.internalDuration - start) / (end - start), 1);},process({ timeLine }) {this.timeLine = timeLine;this.calcProgress();this.internalTimeLine = this.progressValue * this.internalDuration;let actionArr = this.recationArr.filter((item) => {if (item) {let isOk = (timeLine > this.getCurrentTime(item.start) &&timeLine <= this.getCurrentTime(item.end)) ||(!item.start && !item.end)if (isOk) {item.isAction = true} else {if (item.isAction) {item.action(this.calcActionData(item, true))}item.isAction = false}return isOk;}});actionArr.forEach((item) => {item.action(this.calcActionData(item));});},update() {let self = this;this.actionEntityArr = this.entityArrEx.filter((entity) => {if ((self.internalTimeLine) > entity.startTime && self.internalTimeLine <= entity.endTime) {if (!entity.isLive) {entity.live();}entity.process({timeLine: self.progressValue * self.internalDuration,});return true;} else {if (entity.isLive) {entity.end();}}return false;});},calcActionData(item, isEnd) {let params = {};let actionLen = (item.end - item.start) || 1;let progress;progress = Math.min((this.progressValue - item.start) / actionLen, 1);if (isEnd) {let isEndForce = window.GLOBAL.dir > 0;let isEndForceStart = window.GLOBAL.dir < 0;if (isEndForce) {progress = 1} else if (isEndForceStart) {progress = 0}params = {isEndForce: isEndForce,isEndForceStart: isEndForceStart}}params = {actionLen,progress,...params,...item}return params;},end() {this.isLive = false;//如果滑動(dòng)非常快,并且是快進(jìn)而非后退,那么就要直接強(qiáng)行設(shè)置反饋為結(jié)束// if (window.GLOBAL.dir > 0) {// }this.recationArr.forEach(item => {if (item.isAction) {item.isAction = falseitem.action(this.calcActionData(item, true))}});}, });復(fù)制代碼整體思路簡單說
- 就是設(shè)置一個(gè)進(jìn)度條,通過觸摸屏幕進(jìn)行前進(jìn)和后退。
- 設(shè)置每一part的時(shí)間占比,然后串聯(lián)起來。
- 每一個(gè)part內(nèi)部,也設(shè)置內(nèi)部節(jié)點(diǎn)的運(yùn)動(dòng)的事件占比,以及具體做什么運(yùn)動(dòng)。
- 然后根據(jù)定時(shí)循環(huán),判斷當(dāng)前時(shí)刻應(yīng)該執(zhí)行節(jié)點(diǎn)的是哪個(gè),執(zhí)行的節(jié)點(diǎn)該執(zhí)行的運(yùn)動(dòng)是哪個(gè)
就這么簡單。
這個(gè)思路完全可以使用在dom上,完全可以用react和vue實(shí)現(xiàn),我會(huì)陸續(xù)重構(gòu)完畢。
我跟領(lǐng)導(dǎo)就開始設(shè)計(jì)怎么做了
開場
-
領(lǐng)導(dǎo):阿強(qiáng),這個(gè)就是我們項(xiàng)目的開場。
- 第一張就是首頁圖,然后過一會(huì)自動(dòng)轉(zhuǎn)場。
- 第二張就是過場之后顯示的。
-
我:哦哦,懂了,話說,怎么轉(zhuǎn)場呢?
-
領(lǐng)導(dǎo):看到小飛機(jī)沒有~
-
就這個(gè)。
-
還有第二頁的這個(gè)。
-
(A):第一頁上來,左下角一個(gè)人坐著飛機(jī)向上飛,然后小飛機(jī)往右上角飛,飛離出去之后,開始轉(zhuǎn)場到二張。
-
(B)然后第二頁左下飛入這個(gè)小飛機(jī),飛到中心處,也就是圖片上的位置,那么開場part就ok了。)
-
-
我:ok,明白了,開整。
實(shí)現(xiàn)方式:
A實(shí)現(xiàn):
目標(biāo)就是讓這個(gè)節(jié)點(diǎn)移動(dòng)一段距離停下來,那么寫一個(gè)腳本plane0_1,上來就執(zhí)行一個(gè)移動(dòng)一段距離的動(dòng)作。
import entity from '../../base/entity'; cc.Class({extends: entity,properties: {},// LIFE-CYCLE CALLBACKS:onLoad() {this._super();let self = this;// 就是上來,就執(zhí)行一個(gè)運(yùn)動(dòng),moveBy就是一段時(shí)間,移動(dòng)移動(dòng)距離的動(dòng)畫apivar action = cc.moveBy(1, cc.v2(this.node.getContentSize().width + 100, 200))// 執(zhí)行動(dòng)作this.node.runAction(action);}, });復(fù)制代碼掛載到節(jié)點(diǎn)上就可以了。
這里簡單介紹一下,我設(shè)置了幾個(gè)參數(shù):
- lenPercent:就是節(jié)點(diǎn)運(yùn)動(dòng)的總時(shí)長
- startPercent:就是運(yùn)動(dòng)的開始時(shí)刻
- isAutoStart:就是自動(dòng)啟動(dòng),無視startPercent的設(shè)置
- entityArr:就是復(fù)制管理的節(jié)點(diǎn),這樣自己的運(yùn)動(dòng)周期內(nèi)就能操作其關(guān)聯(lián)的節(jié)點(diǎn)的運(yùn)動(dòng)。
B實(shí)現(xiàn):主要就是實(shí)現(xiàn)這個(gè)節(jié)點(diǎn)移動(dòng)飛行
那么根據(jù)上面描述的思路,我們不難實(shí)現(xiàn)這個(gè)小飛機(jī)的移動(dòng),無非就是設(shè)置這個(gè)小飛機(jī)在這個(gè)part里的開始時(shí)刻是多少,運(yùn)動(dòng)多久,運(yùn)動(dòng)到哪,只要把這些定好,動(dòng)畫自動(dòng)產(chǎn)生。
那么開發(fā)腳本
import entity from '../../base/entity'; cc.Class({extends: entity,properties: {plane: cc.Node},// LIFE-CYCLE CALLBACKS:onLoad() {this._super();let self = this;// 向右上角移動(dòng)一段距離var action = cc.moveBy(1, cc.v2(this.node.getContentSize().width + 500, 500))// spawn是同時(shí)執(zhí)行運(yùn)動(dòng)的函數(shù),目的是讓moveBy運(yùn)動(dòng)結(jié)合一個(gè)縮小的運(yùn)動(dòng),這樣,有種越發(fā)越遠(yuǎn),又越小的視覺感。let action2 = cc.spawn(action, cc.scaleTo(1, 2))// 執(zhí)行動(dòng)作this.node.runAction(cc.sequence(cc.delayTime(1), action2, cc.callFunc(() => {self.node.active = false;self.node.parent.active = false;self.plane.runAction(cc.moveTo(1, cc.v2(0, 0)))})));}, });復(fù)制代碼那么下面整體實(shí)現(xiàn),基本都是依靠上面這些思路,實(shí)現(xiàn)的,單純的開始套就能實(shí)現(xiàn)下面的動(dòng)畫了。 是不是很神奇,這套思路,完全可以套用到react和vue上。
-
整好了,領(lǐng)導(dǎo)~,看下效果
-
領(lǐng)導(dǎo):行,可以,就這樣。
part1
-
重返這五年,重溫那歲月
-
領(lǐng)導(dǎo):這張呢~
-
我:坐飛機(jī)的小女孩往上飛出去,做小角的男人飛入畫面
-
領(lǐng)導(dǎo):差不多,不過坐小飛機(jī)的小女孩這塊,應(yīng)該再豐富一點(diǎn)。
- 記得我們剛才說的那個(gè)小飛機(jī)沒,這個(gè)小女孩飛的時(shí)候,漸漸的變小,有種往遠(yuǎn)飛的感覺,然后變成小飛機(jī)飛走~
-
我:哦哦哦,懂了,開整
-
整好了,領(lǐng)導(dǎo)~,看下效果
-
-
領(lǐng)導(dǎo):行,可以,就這樣。
part2
- 成長多措舉,管理提格局
- 工作造氛圍,企學(xué)見雛形
-
我:這個(gè)要做成啥樣?
-
領(lǐng)導(dǎo):入場就是從右邊緩緩進(jìn)來,還有看到這個(gè)沒
-
這些圓片一點(diǎn)一點(diǎn)的滑入屏幕,然后屏幕出現(xiàn)內(nèi)容
-
這張圖
- 就是屏幕上一點(diǎn)一點(diǎn)出現(xiàn)內(nèi)容,然后人物一點(diǎn)一點(diǎn)入畫。
-
-
我:懂了,開整
-
整好了,領(lǐng)導(dǎo)~,看下效果
-
-
領(lǐng)導(dǎo):對(duì),是這樣。
part3
- 發(fā)展聚人才,規(guī)模逐壯大
- 搜索尋突破,拓展創(chuàng)業(yè)務(wù)
- 領(lǐng)導(dǎo):這個(gè)主要想表達(dá)的就是公司不斷的壯大,業(yè)務(wù)上不斷的突破,所以要有種過程感,你看著發(fā)揮吧
- 我:收到,我試試
-
整好了,領(lǐng)導(dǎo)~,看下效果
-
- 領(lǐng)導(dǎo):嗯,很不錯(cuò),可以可以,有過程的畫面感。
- 日歷還能動(dòng)啊,而且日歷動(dòng)的同時(shí),后面的背景一點(diǎn)一點(diǎn)的顯示,也寓示了我們的辦公樓越來越大,可以,有細(xì)節(jié),不錯(cuò)。
- 過場加入了云彩變大,切換很自然嘛。
part4
-
那年啟征程,改變從此始
-
領(lǐng)導(dǎo):這個(gè)該咋設(shè)計(jì)呢?你看飛機(jī)這么多,我們能讓這些飛機(jī)各飛各的么?
-
我:可以啊,我試試
-
整好了,領(lǐng)導(dǎo)~,看下效果
-
-
領(lǐng)導(dǎo):可以的,就這樣吧。
part5
- 種得梧桐樹,鳳凰自然來
- 領(lǐng)導(dǎo):這個(gè)柱狀圖能不能表現(xiàn)出一點(diǎn)一點(diǎn)增長的效果,還有向上箭頭能不能也可以有個(gè)升的過程
-
還有這個(gè)拿筆的人物
- 可不可以有種書寫感,就是表現(xiàn)出在寫字
-
- 我:哦哦哦,我試試,應(yīng)該可以,針對(duì)這些情況,我再豐富幾種表現(xiàn)手段
-
整好了,領(lǐng)導(dǎo)~,看下效果
-
- 領(lǐng)導(dǎo):嗯,可以,就是這效果。
part6
- 全方位服務(wù),碼農(nóng)心無騖
- 創(chuàng)新謀發(fā)展,突破新技術(shù)
- 領(lǐng)導(dǎo):這就可以自由發(fā)揮了,用一個(gè)合理的方式一點(diǎn)一點(diǎn)介紹就好。
- 我:懂,開整
-
整好了,領(lǐng)導(dǎo)~,看下效果
-
- 領(lǐng)導(dǎo):嗯,很不錯(cuò)嘛,有ppt的感覺,挺好的
- 我:哈哈哈,確實(shí)有點(diǎn)。
part7
- 環(huán)境不斷好,員工感幸福
- 乘勢迎挑戰(zhàn),賦能于行業(yè)
-
領(lǐng)導(dǎo):第一張就是簡單的顯隱就可以,主要是第二張的這個(gè)
- 這個(gè),我跟UI小姐姐說了,希望做成一個(gè)列表,但小姐姐做成了這種,那么就需要滾動(dòng)了。
-
我:就像滾動(dòng)頁面那樣,哦哦哦,我明白了,開整。
-
整好了,領(lǐng)導(dǎo)~,看下效果
-
-
領(lǐng)導(dǎo):行,可以的,就這樣。
part8
- 磨礪積能力,自研得碩果
-
領(lǐng)導(dǎo):阿強(qiáng),這個(gè)主要是表現(xiàn)我們?nèi)サ某删?#xff0c;我們僅僅把文字凸顯出來就好,其他就不要求了
- 但,我覺得第一幅圖,還是可以做點(diǎn)文章的,他表示我們獲得的證書,你看看能不能實(shí)現(xiàn),物理下落,然后一本本摞起來的效果
-
我:哈哈哈,好的,我試試,效果我盡量做,可能物理效果沒那么像,但摞起來的效果肯定是有的。
-
領(lǐng)導(dǎo):可以,你試試
-
我:好的,開整。
-
整好了,領(lǐng)導(dǎo)~,看下效果
-
-
領(lǐng)導(dǎo):辛苦了,阿強(qiáng),再加把勁,我們要成功了。
-
我:好的~~~下一個(gè)就是結(jié)尾了吧,加油~
尾聲
- 逆境砥礪行,收入節(jié)節(jié)高
- 領(lǐng)導(dǎo):阿強(qiáng)這個(gè)結(jié)尾,我們收好,我們要有種意境,這樣就有感覺,你能懂么
- 我:我懂你
- 領(lǐng)導(dǎo):你看奧第一幅和第二幅區(qū)別,是一個(gè)沒有河水,一個(gè)有河水,還有就是一個(gè)有沒破曉,一個(gè)有日出
- 你看你能銜接好,這可是一個(gè)艱巨的任務(wù),干完這個(gè)我們就勝利了
- 我:好的領(lǐng)導(dǎo),我一定完成任務(wù)
-
many hours later
-
可算整好了,我的大哥~,效果我是盡力了。
-
- 領(lǐng)導(dǎo):干的漂亮,阿強(qiáng),有意境了,非常不錯(cuò),辛苦了。
- 我:嘿嘿,馬馬虎虎,我盡力了,我打包好就上線吧。
- 領(lǐng)導(dǎo):好的好的,辛苦了。
這就是在線預(yù)覽地址,可以看看效果。
結(jié)尾
目前項(xiàng)目僅僅用了5天時(shí)間就出來了個(gè)雛形,還很粗糙,很多地方可以進(jìn)一步的優(yōu)化。
這僅僅是一個(gè)開始,未來,我會(huì)使用react或者vue3,整一個(gè)lowcode制作工具,這樣就可以更加的方便制作了。
然后開源,敬請(qǐng)期待。
有問題隨時(shí)交流,我建立一個(gè)小清晰qq群,叫“閑D島”,技術(shù)問答群,有問必答,有興趣可以加群號(hào):551406017
題外話
有一說一,我比較低調(diào),一般出風(fēng)頭的事兒,我是沒啥想法的,主要是我覺得爭名逐利的畫面太尷尬,我來不了這個(gè),但也不知我那天是怎么了,當(dāng)群里問了好幾次都沒人回應(yīng),我就來了點(diǎn)脾氣,即然沒誰上,那我試試吧。就這樣我接下了這個(gè)任務(wù),現(xiàn)在再想,可能就是因?yàn)檫@點(diǎn)脾氣,我才敢去做的,也許有點(diǎn)莽了,如果沒做成呢?哈哈哈,那就不能想了,還好我實(shí)現(xiàn)了,我讓這個(gè)脾氣變得更像勇氣了,有時(shí)候真不妨大膽一點(diǎn),覺得自己可以,那就試一試,真沒準(zhǔn)行呢,別怕輸,輸丟什么人,怕才丟人呢。
總結(jié)
以上是生活随笔為你收集整理的年底了,接个大活儿,做一个回顾公司五年发展的总结ppt,要求做成H5网页的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 记一次Android全流程开发体验经历以
- 下一篇: 2018VR创意创新创业大赛探索VR技术