前端 tips

相信大家在試用css3動畫時候一定用過transition屬性耗帕,相對于js動畫來說用起來更快速簡單邻辉。
代碼如下:
HTML結構:

<div id="box" class="box"></div>
<button>動畫按鈕</button>

CSS代碼:

.box {
   background: goldenrod;
   width: 300px;
   height: 300px;
   margin: 30px auto;
   transition: all .4s linear;
   /*display: block;*/
}

.hidden {
   /*display: none;*/
   opacity: 0;
}

JS代碼

var box = $('#box');
$('button').on('click', function () {
    if(box.hasClass('hidden')){
        box.removeClass('hidden');
    }else{
        box.addClass('hidden');
    }
});

在點擊按鈕后可以看到淡入淡出的動畫效果鞍泉,但是在css代碼中解除對于display屬性的兩段注釋以后绪颖,再打開瀏覽器一看欠母,淡入淡出的效果全沒了锚贱。
這簡直是破壞性的作用仔戈,然后我度娘了一下總結了幾個方法。

第一種方法:將display用visibility來替代拧廊,大家都知道visibility的效果其實跟display在一定程度上相似监徘,那為什么說只是一定程度上相似呢,因為它仍然是占空間的吧碾,那你一定會說凰盔,這么用跟opacity沒啥區(qū)別呀。但卻可以避免遮擋下面的層比如按鈕的點擊事件倦春。

第二種方法是相對于第一種方法的進階户敬,利用了js的setTimout和transitionend事件
css代碼 將class hidden類中的opacity分離出來

CSS代碼:

.box {
    background: goldenrod;
    width: 300px;
    height: 300px;
    margin: 30px auto;
    transition: all .4s linear;
    visibility: visible;
}
.hidden {
    display: none;
}
.visuallyhidden {
    opacity: 0;
}

js代碼

var box = $('#box');
$('button').on('click', function () {
    if (box.hasClass('hidden')) {
        box.removeClass('hidden');
        setTimeout(function () {
            box.removeClass('visuallyhidden');
        }, 20);
    } else {
        box.addClass('visuallyhidden');
        box.one('transitionend', function(e) {
            box.addClass('hidden');
        });
    }
});

第三種方法與第二種方法類似,用requestAnimationFrame來取代setTimeout睁本,相應的修改了if條件里的js尿庐。
requestAnimationFrame其實也就跟setTimeout/setInterval差不多,通過遞歸調(diào)用同一方法來不斷更新畫面以達到動起來的效果呢堰,但它優(yōu)于setTimeout/setInterval的地方在于它是由瀏覽器專門為動畫提供的API抄瑟,在運行時瀏覽器會自動優(yōu)化方法的調(diào)用,并且如果頁面不是激活狀態(tài)下的話枉疼,動畫會自動暫停皮假,有效節(jié)省了CPU開銷。

js代碼如下

var box = $('#box');
$('button').on('click', function () {
    if (box.hasClass('hidden')) {
        box.removeClass('hidden');
        requestAnimationFrame(function(){
            box.removeClass('visuallyhidden');
        });
    } else {
        box.addClass('visuallyhidden');
        box.one('transitionend', function(e) {
            box.addClass('hidden');
        });
    }
});

以上就是當transition遇上display時碰到的坑往衷。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钞翔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子席舍,更是在濱河造成了極大的恐慌布轿,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件来颤,死亡現(xiàn)場離奇詭異汰扭,居然都是意外死亡,警方通過查閱死者的電腦和手機福铅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門萝毛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人滑黔,你說我怎么就攤上這事笆包』防浚” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵庵佣,是天一觀的道長歉胶。 經(jīng)常有香客問我,道長巴粪,這世上最難降的妖魔是什么通今? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮肛根,結果婚禮上辫塌,老公的妹妹穿的比我還像新娘。我一直安慰自己派哲,他們只是感情好臼氨,可當我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著狮辽,像睡著了一般一也。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上喉脖,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天,我揣著相機與錄音抑月,去河邊找鬼树叽。 笑死,一個胖子當著我的面吹牛谦絮,可吹牛的內(nèi)容都是我干的题诵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼层皱,長吁一口氣:“原來是場噩夢啊……” “哼性锭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起叫胖,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤草冈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瓮增,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怎棱,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年绷跑,在試婚紗的時候發(fā)現(xiàn)自己被綠了拳恋。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡砸捏,死狀恐怖谬运,靈堂內(nèi)的尸體忽然破棺而出隙赁,到底是詐尸還是另有隱情,我是刑警寧澤梆暖,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布鸳谜,位于F島的核電站,受9級特大地震影響式廷,放射性物質(zhì)發(fā)生泄漏咐扭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一滑废、第九天 我趴在偏房一處隱蔽的房頂上張望蝗肪。 院中可真熱鬧,春花似錦蠕趁、人聲如沸薛闪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽豁延。三九已至,卻和暖如春腊状,著一層夾襖步出監(jiān)牢的瞬間诱咏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工缴挖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留袋狞,地道東北人。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓映屋,卻偏偏與公主長得像苟鸯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子棚点,可洞房花燭夜當晚...
    茶點故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 一:在制作一個Web應用或Web站點的過程中早处,你是如何考慮他的UI、安全性瘫析、高性能砌梆、SEO、可維護性以及技術因素的...
    Arno_z閱讀 1,157評論 0 1
  • AJax 優(yōu)化 緩存 Ajax 請求盡量使用GET, 僅取決于cookie數(shù)量 Cookie 優(yōu)化 減少Cooki...
    KeKeMars閱讀 9,354評論 5 89
  • 在線閱讀 http://interview.poetries.top[http://interview.poetr...
    程序員poetry閱讀 114,363評論 24 450
  • HTML5面試題總結1.基礎問題 = 和 == 和 === 的區(qū)別颁股?= : 用于賦值 == : 用于判斷 === ...
    LorenaLu閱讀 1,182評論 0 4
  • 一般來說么库,男人的確都是看臉的,但是只要這個臉還看得過去就可以了甘有,真的沒有那么多男人苛刻地要求自己的女人是一個頂級大...
    曦巖君閱讀 1,818評論 0 2