原生js實(shí)現(xiàn)簡單的Ripple按鈕實(shí)例代碼
整理文檔,搜刮出一個(gè)原生js實(shí)現(xiàn)簡單的Ripple按鈕的代碼,稍微整理精簡一下做下分享。
效果如圖

準(zhǔn)備食材(html部分)
<ul id="nav">
<li>
<a href='#'>
<span>首頁</span>
<span class="circle"></span>
</a>
</li>
<li>
<a href='#'>
<span>我的</span>
<span class="circle"></span>
</a>
</li>
<li>
<a href='#'>
<span>更多</span>
<span class="circle"></span>
</a>
</li>
</ul>
典型的菜單li布局,里面的span.circle表示的是觸摸彈出的小圓圈。
準(zhǔn)備輔料 (css部分)
#nav {
display: flex;
}
#nav li {
position: relative;
overflow: hidden;
flex: 1;
}
li a {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.circle{
position: absolute;
background: rgba(86,187,247,.1);
width: 1px;
height: 1px;
top:50%;
left: 50%;
border-radius: 50%;
}
.circle.act{
animation: navCircle .4s;
}
@keyframes navCircle
{
from {transform: scale(0);border-radius: 50%;}
to {transform:scale(200);border-radius: 50%;}
}
我的思路是這樣的,給li相對定位,給小圓圈絕對定位,再給小圓圈添加動畫navCircle,采用css3的縮放使其變大,至于為什么是200倍和.4s呢,經(jīng)過測試這樣更人性化,其余的倍數(shù)你們也可以試試。
大火烹飪 (js部分)
var li = document.getElementById('nav').querySelectorAll('li');
var circle = document.getElementById('nav').querySelectorAll('.circle');
for(var i=0,len = li.length;i<len;i++){
((i)=>{
li[i].addEventListener('click',(e)=>{
circle[i].setAttribute('class','circle act');
circle[i].setAttribute('style','top:'+e.layerY+'px;left:'+e.layerX+'px');
});
li[i].addEventListener('touchend',()=>{
circle[i].setAttribute('class','circle');
})
})(i)
}
代碼很簡單,相信大家也猜到了,點(diǎn)擊li的時(shí)候給小圓圈添加class 'act',并且設(shè)置小圓圈的起始位置,監(jiān)聽觸摸結(jié)束的時(shí)候,取消class 'act',有人肯定要問了,為什么你不用touchstart呢,唉,因?yàn)闆]有layerY這個(gè)屬性,找了半天都沒找到啊。還有為什么不用forEach,有的瀏覽器不支持啊,淚奔= = !
友情提示!touchend僅支持移動端
結(jié)束
做這個(gè)部分是因?yàn)槲覀儼沧縜pp里面有這個(gè)功能,所以我就想看看h5怎么做,開始的思路是讓寬度和高度隨著時(shí)間變大,但是實(shí)現(xiàn)了之后感覺性能不好,所以才想到了直接增加倍數(shù)唄,于是這個(gè)功能變完美誕生了,開始享用這份套餐把 !
- js點(diǎn)擊button按鈕跳轉(zhuǎn)到另一個(gè)新頁面
- javascript怎么禁用瀏覽器后退按鈕
- JavaScript給按鈕綁定點(diǎn)擊事件(onclick)的方法
- JS/jQuery實(shí)現(xiàn)默認(rèn)顯示部分文字點(diǎn)擊按鈕顯示全部內(nèi)容
- javascript 按回車鍵相應(yīng)按鈕提交事件
- js代碼實(shí)現(xiàn)點(diǎn)擊按鈕出現(xiàn)60秒倒計(jì)時(shí)
- js獲取單選按鈕的數(shù)據(jù)
- js鼠標(biāo)點(diǎn)擊按鈕切換圖片-圖片自動切換-點(diǎn)擊左右按鈕切換特效代碼
- js實(shí)現(xiàn)點(diǎn)擊左右按鈕輪播圖片效果實(shí)例
- JSP單選按鈕驗(yàn)證、下拉框驗(yàn)證、復(fù)選框驗(yàn)證實(shí)現(xiàn)代碼
相關(guān)文章
有一段有意思的代碼-javascript現(xiàn)實(shí)多行信息
有一段有意思的代碼-javascript現(xiàn)實(shí)多行信息...2007-08-08
ArrayBuffer Uint8Array Blob與文本字符相互轉(zhuǎn)換示例
這篇文章主要為大家介紹了ArrayBuffer Uint8Array Blob與文本字符相互轉(zhuǎn)換示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
javascript使用輸出語句實(shí)現(xiàn)網(wǎng)頁特效代碼
這篇文章主要介紹javascript使用輸出語句實(shí)現(xiàn)網(wǎng)頁特效,有需要的朋友可以參考下2015-08-08
javascript基本數(shù)據(jù)類型和對象類型歸檔問題解析
這篇文章主要介紹了javascript基本數(shù)據(jù)類型和對象類型歸檔,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
TypeScript基礎(chǔ)入門教程之三重斜線指令詳解
這篇文章主要給大家介紹了關(guān)于TypeScript基礎(chǔ)入門教程之三重斜線指令的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10
靜態(tài)頁面也可以實(shí)現(xiàn)預(yù)覽 列表不同的顯示方式
靜態(tài)頁面也可以實(shí)現(xiàn)預(yù)覽 列表不同的顯示方式...2006-10-10
JavaScript的9個(gè)陷阱及評點(diǎn)分析
以下是JavaScript容易犯錯(cuò)的九個(gè)陷阱。雖然不是什么很高深的技術(shù)問題,但注意一下,會使您的編程輕松些,即所謂make life easier. 筆者對某些陷阱會混雜一些評點(diǎn)。2008-05-05

