原生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 相关文章推荐
jQuery Ajax之$.get()方法和$.post()方法
Oct 12 Javascript
JavaScript中的函数重载深入理解
Aug 04 Javascript
JS获取Table中td值的方法
Mar 19 Javascript
js实现仿京东2级菜单效果(带延时功能)
Aug 27 Javascript
JavaScript深度复制(deep clone)的实现方法
Feb 19 Javascript
限制只能输入数字的实现代码
May 16 Javascript
彻底学会Angular.js中的transclusion
Mar 12 Javascript
详解AngularJS用Interceptors来统一处理HTTP请求和响应
Jun 08 Javascript
js模拟百度模糊搜索的实例
Aug 04 Javascript
VueJs组件prop验证简单介绍
Sep 12 Javascript
JavaScript 中使用 Generator的方法
Dec 29 Javascript
JavaScript中callee和caller的区别与用法实例分析
Jun 28 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 IF ELSE简化/三元一次式的使用
2011/08/22 PHP
php引用返回与取消引用的详解
2013/06/08 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
2014/01/07 PHP
eaglephp使用微信api接口开发微信框架
2014/01/09 PHP
PHP同时连接多个mysql数据库示例代码
2014/03/17 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
2014/10/23 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
2014/11/05 PHP
PHP正则获取页面所有图片地址
2016/03/23 PHP
jquery特效 幻灯片效果示例代码
2013/07/16 Javascript
js的参数有长度限制吗?发现不能超过2083个字符
2014/04/20 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
2014/10/17 Javascript
javascript设计模式之对象工厂函数与构造函数详解
2015/07/30 Javascript
JS 实现倒计时数字时钟效果【附实例代码】
2016/03/30 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
JavaScript数组方法大全(推荐)
2016/07/05 Javascript
详解angularjs结合pagination插件实现分页功能
2017/02/10 Javascript
vue中mint-ui环境搭建详细介绍
2017/04/06 Javascript
浅谈Vue.nextTick 的实现方法
2017/10/25 Javascript
Servlet3.0与纯javascript通过Ajax交互的实例详解
2018/03/18 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
2018/03/29 Javascript
js实现鼠标单击Tab表单切换效果
2018/05/16 Javascript
在vue项目中使用md5加密的方法
2018/09/14 Javascript
微信小程序外卖选购页实现切换分类与数量加减功能案例
2019/01/15 Javascript
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
2016/02/18 Python
python3实现读取chrome浏览器cookie
2016/06/19 Python
python 3.6 +pyMysql 操作mysql数据库(实例讲解)
2017/12/20 Python
python email smtplib模块发送邮件代码实例
2018/04/26 Python
PyQt4编程之让状态栏显示信息的方法
2019/06/18 Python
python如何删除文件中重复的字段
2019/07/16 Python
使用Python爬取弹出窗口信息的实例
2020/03/14 Python
在html5的Canvas上绘制椭圆的几种方法总结
2013/01/07 HTML / CSS
详解Canvas实用库Fabric.js使用手册
2019/01/07 HTML / CSS
艺术家策划的室内设计:Curious Egg
2019/03/06 全球购物
校园公益广告语
2014/03/13 职场文书
教师党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
新郎新娘答谢词
2015/01/04 职场文书