實現(xiàn)按鈕漣漪效果

看到越來越多的App都會在點擊的時候呈現(xiàn)一個漣漪的效果安寺,好奇是怎么實現(xiàn)的勺远。

效果

自己想了幾個方案,發(fā)現(xiàn)都不太好實現(xiàn)耙替。搜集了一些資料之后發(fā)現(xiàn)其實并不難亚侠,甚至也不需要jQuery。

先講講大體思路:

1俗扇,漣漪由按鈕內(nèi)的子元素去做硝烂,這個子元素脫離文檔流,故不改變按鈕內(nèi)容的布局

2铜幽,點擊按鈕時滞谢,把點擊坐標(biāo)記錄下來,作為漣漪的圓心

3除抛,創(chuàng)建漣漪子元素狮杨,設(shè)置好圓心

4,把它添加到按鈕里面去到忽,它被渲染進(jìn)DOM之后就會播放CSS動畫

5禾酱,設(shè)置 timeout,在動畫時長后把漣漪從按鈕里刪除

代碼:

HTML

<div class="btn">
  <p>Button</p>
</div>

CSS

.btn {
  width: 100px;
  height: 50px;
  background-color: green;
  border-radius: 10px;
  position: relative;  /* 必須 */
  overflow: hidden;    /* 必須 */
}

.btn > p {
  text-align: center;
}

.btn > span {
  position: absolute;  /* 必須 */
  transform: translate(-50%, -50%);  /* 必須 */
  background: white;
  border-radius: 50%;
  animation: .75s ripple;  /* 必須 */
}

@keyframes ripple {
  from {
    width: 0px;
    height: 0px;
    opacity: .5;
  }
  to {
    width: 200px;
    height: 200px;
    opacity: 0;
  }
}

JS

const btn = document.querySelector('.btn');

btn.addEventListener('mousedown', function(e){
  const left = e.clientX - e.currentTarget.offsetLeft;
  const top = e.clientY - e.currentTarget.offsetTop;
  const rip = document.createElement('span');
  rip.style.left = left + 'px';
  rip.style.top = top + 'px';
  btn.appendChild(rip);
  setTimeout(()=>{rip.remove()}, 750);
})

源碼:
https://jsbin.com/haxeyonuvo/1/edit?html,css,js,output

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绘趋,一起剝皮案震驚了整個濱河市颤陶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌陷遮,老刑警劉巖滓走,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異帽馋,居然都是意外死亡搅方,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門绽族,熙熙樓的掌柜王于貴愁眉苦臉地迎上來姨涡,“玉大人,你說我怎么就攤上這事吧慢√纹” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長匈仗。 經(jīng)常有香客問我瓢剿,道長,這世上最難降的妖魔是什么悠轩? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任间狂,我火速辦了婚禮,結(jié)果婚禮上火架,老公的妹妹穿的比我還像新娘鉴象。我一直安慰自己,他們只是感情好何鸡,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布纺弊。 她就那樣靜靜地躺著,像睡著了一般音比。 火紅的嫁衣襯著肌膚如雪俭尖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天洞翩,我揣著相機(jī)與錄音稽犁,去河邊找鬼。 笑死骚亿,一個胖子當(dāng)著我的面吹牛已亥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播来屠,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼虑椎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了俱笛?” 一聲冷哼從身側(cè)響起捆姜,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎迎膜,沒想到半個月后泥技,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡磕仅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年珊豹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片榕订。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡店茶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出劫恒,到底是詐尸還是另有隱情贩幻,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站段直,受9級特大地震影響吃溅,放射性物質(zhì)發(fā)生泄漏溶诞。R本人自食惡果不足惜鸯檬,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望螺垢。 院中可真熱鬧喧务,春花似錦、人聲如沸枉圃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽孽亲。三九已至坎穿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間返劲,已是汗流浹背玲昧。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留篮绿,地道東北人孵延。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像亲配,于是被迫代替她去往敵國和親尘应。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

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

  • 實現(xiàn)向右移動動畫 如果我們想要一個按鈕吼虎,控制一個div向右移動的動畫效果犬钢,該怎么實現(xiàn)呢? 有三種實現(xiàn)的方法思灰,下面我...
    LvyHuang閱讀 445評論 0 0
  • 精選的四十五道vue自測題官辈,每五道題公布一次答案箱舞。 一、 html js 問號處應(yīng)該填入什么拳亿,才能使得 span ...
    littleyu閱讀 1,458評論 0 14
  • vue.js網(wǎng)址:https://cn.vuejs.org/v2/guide/[https://cn.vuejs....
    MrTon_1965閱讀 505評論 0 0
  • 主要通過更換 css 上的 animation 來實現(xiàn)漣漪效果晴股。 但是大部分的實現(xiàn)方法會增加一個空白節(jié)點, 所以想...
    littleyu閱讀 471評論 0 0
  • 1: DOM0 事件和DOM2級在事件監(jiān)聽使用方式上有什么區(qū)別肺魁?DOM0的事件添加形式為: 優(yōu)點是:處理程序在元素...
    向前沖沖的蝸牛閱讀 623評論 0 0