一個(gè)DOM元素正在動(dòng)畫是什么樣的呢?
DOM元素正在動(dòng)畫已經(jīng)是當(dāng)下小程序開發(fā)最熱門的話題,下面將從多方面來談?wù)凞OM元素正在動(dòng)畫相關(guān)的內(nèi)容。
一般情況下CSS不會(huì)直接影響JS的程序邏輯,但是以CSS實(shí)現(xiàn)動(dòng)畫的話,這個(gè)便不太確定了,這個(gè)故事發(fā)生在與UED遷移全局樣式的過程。
if (this.needAnimat && typeof this.animateHideAction == 'function' && this.status != 'hide') {
} else
在所有組件中,如果設(shè)置了animatHideAction回調(diào)的,便會(huì)執(zhí)行其中的動(dòng)畫邏輯,針對(duì)彈出層來說:
② loading
④ 底部彈出層
① 動(dòng)畫顯示時(shí)下沉,隱藏時(shí)上浮
③ 組件底部彈出
cm-fade-in, .cm-fade-out, .cm-down-in, .cm-down-out, .cm-up-in, .cm-up-out {
animation-duration: 0.3s;
animation-fill-mode: both;
......
0% {
-webkit-transform: scale(1);
}
opacity: 0;
transform: scale(1.185); -webkit-transform: scale(1.185); -moz-transform: scale(1.185); -o-transform: scale(1.185);
}
這個(gè)時(shí)候我們要實(shí)現(xiàn)一個(gè)居中彈出層漸隱的效果事實(shí)上只需要這樣做:
el.one($.fx.animationEnd, function () {
el.hide();
在動(dòng)畫結(jié)束后將對(duì)應(yīng)的動(dòng)畫class移除,再執(zhí)行真實(shí)的hide方法,隱藏dom結(jié)構(gòu)。
el.addClass('cm-fade-out');
el.removeClass('cm-fade-out');
}, 340);
第一反應(yīng)都是認(rèn)為animationEnd比較合理,于是我最近遇到了一個(gè)問題:
于是我開始愉快的定位,當(dāng)時(shí)搞了一會(huì),發(fā)現(xiàn)loading的動(dòng)畫沒有執(zhí)行,仔細(xì)一定位,發(fā)現(xiàn)css中的動(dòng)畫相關(guān)的css丟了,于是造成的結(jié)果是:
這個(gè)代碼變成了單純的class增加,并沒有執(zhí)行動(dòng)畫,也就是,animationEnd的事件沒有觸發(fā),于是沒有執(zhí)行hide方法,所以loading框就一直在那里轉(zhuǎn)
這里如果使用setTimeout的話雖然感覺沒有animationEnd嚴(yán)謹(jǐn),但是一定會(huì)保證這邏輯代碼執(zhí)行,從某種程度來說,似乎更好,這里的優(yōu)化代碼是:
el.addClass(scope.animateOutClass);
isTrigger = true;
el.hide();
setTimeout(function () {
el.removeClass(scope.animateOutClass);
el.hide();
如果animationEnd執(zhí)行了便不理睬setTimeout,否則便走setTimeout邏輯,也不至于影響業(yè)務(wù)邏輯,但是這個(gè)似乎不是最優(yōu)解決方案。
所以,javascript檢測(cè)CSS的某一個(gè)className是否存在,似乎變成了關(guān)鍵,但是就算就算能找到具有某class,這個(gè)class也未必具有動(dòng)畫屬性,或者該屬性被篡改。
-
微信小程序商城系統(tǒng)開發(fā)其實(shí)很簡(jiǎn)單
微信小程序商城系統(tǒng)開發(fā)其實(shí)很簡(jiǎn)單,只需要五步就可以完成,整個(gè)過程包括開發(fā)、上線、發(fā)布都可以輕松搞定...詳情
第二部分:如何開通一個(gè)小商店