原生js实现简单的Ripple按钮实例代码

 更新时间:2017年03月24日 10:25:59   作者:cleartime  
本篇文章主要介绍了原生js实现简单的Ripple按钮实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

整理文档,搜刮出一个原生js实现简单的Ripple按钮的代码,稍微整理精简一下做下分享。

效果如图

准备食材(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表示的是触摸弹出的小圆圈。

准备辅料 (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呢,经过测试这样更人性化,其余的倍数你们也可以试试。

大火烹饪 (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)

   }

代码很简单,相信大家也猜到了,点击li的时候给小圆圈添加class 'act',并且设置小圆圈的起始位置,监听触摸结束的时候,取消class 'act',有人肯定要问了,为什么你不用touchstart呢,唉,因为没有layerY这个属性,找了半天都没找到啊。还有为什么不用forEach,有的浏览器不支持啊,泪奔= = !

友情提示!touchend仅支持移动端

结束

做这个部分是因为我们安卓app里面有这个功能,所以我就想看看h5怎么做,开始的思路是让宽度和高度随着时间变大,但是实现了之后感觉性能不好,所以才想到了直接增加倍数呗,于是这个功能变完美诞生了,开始享用这份套餐把 !

相关文章

  • js中的事件委托或是事件代理使用详解

    js中的事件委托或是事件代理使用详解

    这是前端面试的经典题型,要去找工作的小伙伴看看还是有帮助的,需要的朋友可以参考下
    2017-06-06
  • IE浏览器IFrame对象内存不释放问题解决方法

    IE浏览器IFrame对象内存不释放问题解决方法

    IFrame对象占用的内存资源在窗体关闭后不会释放。弹出关闭反复多次后,IE浏览器内存占用可超过数百M,严重时IE浏览器报错
    2014-08-08
  • html页面显示年月日时分秒和星期几的两种方式

    html页面显示年月日时分秒和星期几的两种方式

    在html页面中显示时间是很常见的,实现的方法有很多,下面为大家简单介绍两种方式,有需求的朋友可以参考下,希望对大家有所帮助
    2013-08-08
  • js前端实现登录拼图验证功能

    js前端实现登录拼图验证功能

    行为验证码通过用户的操作来完成验证,常见的行为验证码有拖动式和点触式,下面这篇文章主要给大家介绍了关于js前端实现登录拼图验证功能的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • js实现简单的抽奖系统

    js实现简单的抽奖系统

    这篇文章主要为大家详细介绍了js实现简单的抽奖系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 基于JavaScript实现幸运抽奖页面

    基于JavaScript实现幸运抽奖页面

    这篇文章主要为大家详细介绍了基于JavaScript实现幸运抽奖页面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • JS实现超过长度限制后自动跳转下一款文本框的方法

    JS实现超过长度限制后自动跳转下一款文本框的方法

    这篇文章主要介绍了JS实现超过长度限制后自动跳转下一款文本框的方法,涉及javascript操作字符及本文框的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • 在JavaScript中终止forEach循环的三种方式

    在JavaScript中终止forEach循环的三种方式

    如何终止forEach循环这个问题估计会难倒一部分同学,甚至会有人反问,forEach循环在JavaScript中能终止吗?本文小编给大家介绍了三种方式可以终止forEach循环,需要的朋友可以参考下
    2023-11-11
  • js 调用百度分享功能

    js 调用百度分享功能

    本文主要介绍了js调用百度分享功能的方法,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • layui实现checkbox的目录树tree的例子

    layui实现checkbox的目录树tree的例子

    今天小编就为大家分享一篇layui实现checkbox的目录树tree的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09

最新评论