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

準(zhǔn)備食材(html部分)
<ul id="nav">
<li>
<a href='#'>
<span>首頁(yè)</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相對(duì)定位,給小圓圈絕對(duì)定位,再給小圓圈添加動(dòng)畫navCircle,采用css3的縮放使其變大,至于為什么是200倍和.4s呢,經(jīng)過(guò)測(cè)試這樣更人性化,其余的倍數(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)
}
代碼很簡(jiǎn)單,相信大家也猜到了,點(diǎn)擊li的時(shí)候給小圓圈添加class 'act',并且設(shè)置小圓圈的起始位置,監(jiān)聽(tīng)觸摸結(jié)束的時(shí)候,取消class 'act',有人肯定要問(wèn)了,為什么你不用touchstart呢,唉,因?yàn)闆](méi)有layerY這個(gè)屬性,找了半天都沒(méi)找到啊。還有為什么不用forEach,有的瀏覽器不支持啊,淚奔= = !
友情提示!touchend僅支持移動(dòng)端
結(jié)束
做這個(gè)部分是因?yàn)槲覀儼沧縜pp里面有這個(gè)功能,所以我就想看看h5怎么做,開(kāi)始的思路是讓寬度和高度隨著時(shí)間變大,但是實(shí)現(xiàn)了之后感覺(jué)性能不好,所以才想到了直接增加倍數(shù)唄,于是這個(gè)功能變完美誕生了,開(kāi)始享用這份套餐把 !
- js點(diǎn)擊button按鈕跳轉(zhuǎn)到另一個(gè)新頁(yè)面
- javascript怎么禁用瀏覽器后退按鈕
- JavaScript給按鈕綁定點(diǎn)擊事件(onclick)的方法
- JS/jQuery實(shí)現(xiàn)默認(rèn)顯示部分文字點(diǎn)擊按鈕顯示全部?jī)?nèi)容
- javascript 按回車鍵相應(yīng)按鈕提交事件
- js代碼實(shí)現(xiàn)點(diǎn)擊按鈕出現(xiàn)60秒倒計(jì)時(shí)
- js獲取單選按鈕的數(shù)據(jù)
- js鼠標(biāo)點(diǎn)擊按鈕切換圖片-圖片自動(dòng)切換-點(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使用輸出語(yǔ)句實(shí)現(xiàn)網(wǎng)頁(yè)特效代碼
這篇文章主要介紹javascript使用輸出語(yǔ)句實(shí)現(xiàn)網(wǎng)頁(yè)特效,有需要的朋友可以參考下2015-08-08
javascript基本數(shù)據(jù)類型和對(duì)象類型歸檔問(wèn)題解析
這篇文章主要介紹了javascript基本數(shù)據(jù)類型和對(duì)象類型歸檔,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
TypeScript基礎(chǔ)入門教程之三重斜線指令詳解
這篇文章主要給大家介紹了關(guān)于TypeScript基礎(chǔ)入門教程之三重斜線指令的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10
靜態(tài)頁(yè)面也可以實(shí)現(xiàn)預(yù)覽 列表不同的顯示方式
靜態(tài)頁(yè)面也可以實(shí)現(xiàn)預(yù)覽 列表不同的顯示方式...2006-10-10
JavaScript的9個(gè)陷阱及評(píng)點(diǎn)分析
以下是JavaScript容易犯錯(cuò)的九個(gè)陷阱。雖然不是什么很高深的技術(shù)問(wèn)題,但注意一下,會(huì)使您的編程輕松些,即所謂make life easier. 筆者對(duì)某些陷阱會(huì)混雜一些評(píng)點(diǎn)。2008-05-05

