為元素動態(tài)增加樣式佳恬,觸發(fā)transition動畫

目標

在html頁面中捏境,往往需要彈窗于游。
新手的做法是,搞一個div垫言,css的display屬性初始化設(shè)置為display=none,等某個事件觸發(fā)后贰剥,動態(tài)改變display屬性,設(shè)置display=block筷频。div窗口便可以在設(shè)定好的位置顯示出來蚌成。

今天,本人想實現(xiàn)讓窗口從某一中心點開始凛捏, 以動畫的形式担忧,從小到大的顯示。如下圖:

2.gif

概念

知識點

首先必須明白一個知識點坯癣,即當元素設(shè)置了css的transition屬性后瓶盛,一旦元素的css樣式變化了,瀏覽器會自動地根據(jù)樣式屬性值的變化示罗,自行執(zhí)行過渡動畫惩猫。 這一點是瀏覽器默認實現(xiàn)的。

關(guān)鍵點

因此要目標那樣的效果蚜点,有三個關(guān)鍵點帆锋。

  1. 元素要有兩種不同狀態(tài)的樣式
  2. 初始樣式要設(shè)置transition屬性,指定針對那種屬性變化執(zhí)行過渡效果
  3. 動態(tài)改變要素的樣式

遇到的問題

根據(jù)上述關(guān)鍵點锯厢,針對一個div先創(chuàng)建兩種狀態(tài)的樣式脯倒,即初始樣式和變化后的樣式

<div class="rectangle">
</div>

<style> 
.rectangle{
    width: 10px;
    height: 10px;
    border: 1px solid black;
    background: red;
    margin: 0 auto;
    -webkit-transition: all .1s ease;
    -moz-transition:  all .1s ease;
    transition:  all .1s ease;
}
.rectangle.show{
    width: 400px;
    height: 100px;
}
</style>

通過代碼動態(tài)改變樣式藻丢,瀏覽器根據(jù)transition屬性,自動執(zhí)行過渡動畫残黑。

document.getElementsByClassName('rectangle')[0].setAttribute('class', 'rectangle show');

第一個問題

初始樣式斋否,希望元素不可見,使用display:none屬性疫诽。發(fā)現(xiàn)過渡動畫不執(zhí)行奇徒。

<div class="rectangle">
</div>

<style> 
.rectangle{
    width: 10px;
    height: 10px;
    border: 1px solid black;
    background: red;
    margin: 0 auto;
    -webkit-transition: all .1s ease;
    -moz-transition:  all .1s ease;
    transition:  all .1s ease;
    display:none;
}
.rectangle.show{
    width: 400px;
    height: 100px;
    display:block;
}
</style>

原因,transition針對display:none的元素樣式不處理罢低,直接使用新的樣式奕短。transition也就自然不響應(yīng)了匀钧。

解決方案:考慮使用透明度解決。
初始透明度為0. 變化后的透明度為1.

.rectangle{
    width: 10px;
    height: 10px;
    border: 1px solid black;
    background: red;
    margin: 0 auto;
    -webkit-transition: all .1s ease;
    -moz-transition:  all .1s ease;
    transition:  all .1s ease;
    opacity: 0;
}
.rectangle.show{
    width: 400px;
    height: 100px;
    opacity: 1;
}

第二個問題

目前為止div過渡之斯,都是從上往下變大的佑刷。因為div元素繪制的原點是在屏幕左上角。 如何才能從下往上過渡呢瘫絮。
考慮改變div的position,讓div相對于瀏覽器底部進行定位鹿鳖。

實踐發(fā)現(xiàn)壮莹,讓div既相對底部定位,又居中展示并不好實現(xiàn)涝滴。于是考慮使用嵌套div的方式實現(xiàn)胶台。

外部div實現(xiàn)相對定位诈唬,內(nèi)部元素實現(xiàn)居中。(又一個知識點)

<div class="parent_container">
    <div class="rectangle" ></div>
</div>
<style>
.parent_container{
    width: 100%;
    position: fixed;
    bottom: 10px;
}
.rectangle{
    width: 10px;
    height: 10px;
    border: 1px solid black;
    background: red;
    margin: 0 auto;
    -webkit-transition: all .2s ease;
    -moz-transition:  all .2s ease;
    transition:  all .2s ease;
    opacity: 1;
}
</style>

至此骤素,本文開頭設(shè)置的目標可完成济竹。

Show Me Code

<html>
    <meta charset="utf-8">
<body>
<div class="parent_container">
    <div class="rectangle" >
    </div>
</div>
<button onclick="changeStyle()">click</button>
<script>
    function changeStyle(){
        document.getElementsByClassName('rectangle')[0].setAttribute('class', 'rectangle show');
    }
</script>
<style> 
.parent_container{
    width: 100%;
    position: fixed;
    bottom: 10px;
}
.rectangle{
    width: 0px;
    height: 0px;
    border: 1px solid black;
    background: red;
    margin: 0 auto;
    -webkit-transition: all .2s ease;
    -moz-transition:  all .2s ease;
    transition:  all .2s ease;
    opacity: 0;
}
.rectangle.show{
    width: 400px;
    height: 100px;
    opacity: 1;
}
</style>
</body>
</html>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市袭景,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌耸棒,老刑警劉巖报辱,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件与殃,死亡現(xiàn)場離奇詭異,居然都是意外死亡幅疼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門爽篷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人慢睡,你說我怎么就攤上這事∑” “怎么了钻弄?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長者吁。 經(jīng)常有香客問我窘俺,道長复凳,這世上最難降的妖魔是什么瘤泪? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任对途,我火速辦了婚禮髓棋,結(jié)果婚禮上膳犹,老公的妹妹穿的比我還像新娘恬吕。我一直安慰自己铐料,他們只是感情好豺旬,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布钠惩。 她就那樣靜靜地躺著,像睡著了一般族阅。 火紅的嫁衣襯著肌膚如雪篓跛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天坦刀,我揣著相機與錄音愧沟,去河邊找鬼。 笑死求泰,一個胖子當著我的面吹牛央渣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播渴频,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼芽丹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了卜朗?” 一聲冷哼從身側(cè)響起拔第,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎场钉,沒想到半個月后蚊俺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡逛万,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年泳猬,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宇植。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡得封,死狀恐怖抵乓,靈堂內(nèi)的尸體忽然破棺而出奈辰,到底是詐尸還是另有隱情,我是刑警寧澤锅劝,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布闲坎,位于F島的核電站疫粥,受9級特大地震影響茬斧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜梗逮,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一项秉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧库糠,春花似錦伙狐、人聲如沸涮毫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽罢防。三九已至艘虎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間咒吐,已是汗流浹背野建。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留恬叹,地道東北人候生。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像绽昼,于是被迫代替她去往敵國和親唯鸭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

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

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案硅确? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽?zāi)J的外補...
    _Yfling閱讀 13,737評論 1 92
  • 選擇qi:是表達式 標簽選擇器 類選擇器 屬性選擇器 繼承屬性: color目溉,font,text-align菱农,li...
    love2013閱讀 2,304評論 0 11
  • 選擇qi:是表達式 標簽選擇器 類選擇器 屬性選擇器 繼承屬性: color缭付,font,text-align循未,li...
    wzhiq896閱讀 1,733評論 0 2
  • 隱藏元素的hide方法 讓頁面上的元素不可見陷猫,一般可以通過設(shè)置css的display為none屬性。但是通過css...
    老夫撩發(fā)少年狂閱讀 1,084評論 0 2
  • 易兆風(fēng)望著昏迷中的令熊:她似乎只是太累了的妖,在睡一個很長很長的覺绣檬,一個不知何時醒來的覺——醫(yī)生說,毒氣雖未危及生命羔味,...
    籽鹽閱讀 393評論 0 0