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


Posted in Javascript onMarch 24, 2017

整理文档,搜刮出一个原生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怎么做,开始的思路是让宽度和高度随着时间变大,但是实现了之后感觉性能不好,所以才想到了直接增加倍数呗,于是这个功能变完美诞生了,开始享用这份套餐把 !

Javascript 相关文章推荐
自适应高度框架 ----属个人收藏内容
Jan 22 Javascript
js中通过split函数分割字符串成数组小例子
Sep 21 Javascript
详谈javascript中DOM的基本属性
Feb 26 Javascript
详解JavaScript中的4种类型识别方法
Sep 14 Javascript
jQuery中cookie插件用法实例分析
Dec 04 Javascript
基于JS代码实现图片在页面中旋转效果
Jun 16 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
Dec 12 Javascript
微信小程序 免费SSL证书https、TLS版本问题的解决办法
Dec 14 Javascript
JS实现点击Radio动态更新table数据
Jul 18 Javascript
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
Apr 17 jQuery
微信小程序 获取手机号 JavaScript解密示例代码详解
May 14 Javascript
Vue中component标签解决项目组件化操作
Sep 04 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
Mar 24 #jQuery
jQuery实现的背景颜色渐变动画效果示例
Mar 24 #jQuery
重新理解JavaScript的六种继承方式
Mar 24 #Javascript
JavaScript验证知识整理
Mar 24 #Javascript
Bootstrap常用组件学习(整理)
Mar 24 #Javascript
详解打造 Vue.js 可复用组件
Mar 24 #Javascript
JavaScript获取URL参数的方法之一
Mar 24 #Javascript
You might like
php中存储用户ID和密码到mysql数据库的方法
2013/02/06 PHP
php结合ACCESS的跨库查询功能
2015/06/12 PHP
PHP使用curl模拟post上传及接收文件的方法
2016/03/04 PHP
Google Map Api和GOOGLE Search Api整合实现代码
2009/07/18 Javascript
Javascript判断对象是否相等实现代码
2013/03/18 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
2014/01/06 Javascript
javascript中apply和call方法的作用及区别说明
2014/02/14 Javascript
jQuery 无限级菜单的简单实例
2014/02/21 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
2016/04/21 Javascript
JS封装的选项卡TAB切换效果示例
2016/09/20 Javascript
JavaScript中利用构造器函数模拟类的方法
2017/02/16 Javascript
Node.js websocket使用socket.io库实现实时聊天室
2017/02/20 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
探索Vue高阶组件的使用
2018/01/08 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
2018/04/21 Javascript
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
JS函数本身的作用域实例分析
2020/03/16 Javascript
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
vue穿梭框实现上下移动
2021/01/29 Vue.js
轻松掌握python设计模式之策略模式
2016/11/18 Python
python、Matlab求定积分的实现
2019/11/20 Python
详解python 中in 的 用法
2019/12/12 Python
Python安装与卸载流程详细步骤(图解)
2020/02/20 Python
解决pip install psycopg2出错问题
2020/07/09 Python
python使用re模块爬取豆瓣Top250电影
2020/10/20 Python
纯DOM+CSS3实现简单的小风车动画
2016/09/27 HTML / CSS
一款纯css3实现的非常实用的鼠标悬停特效演示
2014/11/05 HTML / CSS
使用css实现android系统的loading加载动画
2019/07/25 HTML / CSS
体育教育个人自荐信范文
2013/12/01 职场文书
优秀社区干部事迹材料
2014/02/03 职场文书
蟋蟀的住宅教学反思
2014/04/26 职场文书
人事经理岗位职责
2014/04/28 职场文书
自强自立美德少年事迹材料
2014/08/16 职场文书
vmware虚拟机打不开vmx文件怎么办 ?vmware虚拟机vmx文件打开方法
2022/04/08 数码科技
Window server 2012 R2 AD域的组策略相关设置
2022/04/28 Servers