原生js實(shí)現(xiàn)簡單的Ripple按鈕

原生js實(shí)現(xiàn)簡單的Ripple按鈕

效果如圖

Jietu20170323-165850-HD.gif

準(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的時候給小圓圈添加class 'act',并且設(shè)置小圓圈的起始位置,監(jiān)聽觸摸結(jié)束的時候,取消class 'act',有人肯定要問了,為什么你不用touchstart呢,唉,因?yàn)闆]有layerY這個屬性,找了半天都沒找到啊。

友情提示!touchend僅支持移動端

結(jié)束

做這個部分是因?yàn)槲覀儼沧縜pp里面有這個功能,所以我就想看看h5怎么做,開始的思路是讓寬度和高度隨著時間變大,但是實(shí)現(xiàn)了之后感覺性能不好,所以才想到了直接增加倍數(shù)唄,于是這個功能變完美誕生了,開始享用這份套餐把 !

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容