原生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 第二代身份证号码的验证机制代码

    在盛大某网站注册的时候,身份证必填,但我又不想填真实身份证号码,于是随便编了串自认为合法的身份证号码,但是却马上被提示号码错误
    2011-05-05
  • JS实现常见的查找、排序、去重算法示例

    JS实现常见的查找、排序、去重算法示例

    这篇文章主要介绍了JS实现常见的查找、排序、去重算法,结合实例形式总结分析了JavaScript线性查找、二分查找、递归查找、数组去重、冒泡拍戏、快速排序实现技巧,需要的朋友可以参考下
    2018-05-05
  • js 实现picker 选择器示例详解

    js 实现picker 选择器示例详解

    这篇文章主要为大家介绍了js 实现picker 选择器示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • js奇偶数判断的代码

    js奇偶数判断的代码

    js奇偶数判断的代码...
    2007-05-05
  • js回文数的4种判断方法示例

    js回文数的4种判断方法示例

    这篇文章主要给大家介绍了关于js回文数的4种判断方法,文中通过示例代码介绍的非常详细,对大家学习或者使用js具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • Bootstrap每天必学之面板

    Bootstrap每天必学之面板

    Bootstrap每天必学之面板,面板(Panels)是Bootstrap框架新增的一个组件,其主要作用就是用来处理一些其他组件无法完成的功能,对面板感兴趣的小伙伴们可以参考一下
    2015-11-11
  • 前端弹出对话框 js实现ajax交互

    前端弹出对话框 js实现ajax交互

    这篇文章主要为大家详细介绍了前端弹出对话框,js实现ajax交互,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • Javascript中replace()小结

    Javascript中replace()小结

    在javascript中,replace方法是属于String对象的,可用于替换字符串。今天我们就来详细探讨下一些replace()方法的使用
    2015-09-09
  • JavaScript数组及非数组对象的深浅克隆详解原理

    JavaScript数组及非数组对象的深浅克隆详解原理

    JavaScript中数组的方法种类众多,在ES3-ES7不同版本时期都有新方法;并且数组的方法还有原型方法和从object继承的方法,本文介绍了JavaScript数组及非数组对象的深浅克隆,希望读者能从中有所收获
    2021-10-10
  • JavaScript如何删除字符串中子字符串

    JavaScript如何删除字符串中子字符串

    本文介绍了如何从 JavaScript 中的字符串中删除子字符串,并提供了两种常用的方法:replace() 方法和 split() 方法,结合示例代码给大家介绍的非常详细,需要的朋友参考下吧
    2023-05-05

最新评论