原生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跳到页面指定位置的方法
May 12 Javascript
使用js画图之正弦曲线
Jan 12 Javascript
JavaScript添加随滚动条滚动窗体的方法
Feb 23 Javascript
jQuery ajax提交Form表单实例(附demo源码)
Apr 06 Javascript
jquery插入兄弟节点的操作方法
Dec 07 Javascript
完美解决浏览器跨域的几种方法(汇总)
May 08 Javascript
解决vue router使用 history 模式刷新后404问题
Jul 19 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
Aug 18 Javascript
写给小白看的JavaScript异步
Nov 29 Javascript
react-router 路由切换动画的实现示例
Dec 03 Javascript
说说如何利用 Node.js 代理解决跨域问题
Apr 22 Javascript
ES6 Map结构的应用实例分析
Jun 26 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二维索引数组的遍历实例分析【2种方式】
2019/06/24 PHP
date.parse在IE和FF中的区别
2010/07/29 Javascript
再论Javascript的类继承
2011/03/05 Javascript
在jQuery ajax中按钮button和submit的区别分析
2012/10/07 Javascript
javascript生成随机数的方法
2014/05/16 Javascript
JavaScript操作选择对象的简单实例
2016/05/16 Javascript
轻松实现jquery选项卡切换效果
2016/10/10 Javascript
Node.js利用debug模块打印出调试日志的方法
2017/04/25 Javascript
微信小程序日历效果
2018/12/29 Javascript
JS实现点击按钮随机生成可拖动的不同颜色块示例
2019/01/30 Javascript
Webpack4 使用Babel处理ES6语法的方法示例
2019/03/07 Javascript
vue中的面包屑导航组件实例代码
2019/07/01 Javascript
JavaScript:ES2019 的新特性(译)
2019/08/08 Javascript
一篇文章弄懂javascript中的执行栈与执行上下文
2019/08/09 Javascript
uni-app 支持多端第三方地图定位的方法
2020/01/03 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
python编程-将Python程序转化为可执行程序[整理]
2007/04/09 Python
Python实现子类调用父类的方法
2014/11/10 Python
详解Django中的form库的使用
2015/07/18 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
2018/09/19 Python
浅谈python中真正关闭socket的方法
2018/12/18 Python
Django中使用haystack+whoosh实现搜索功能
2019/10/08 Python
详解Python可视化神器Yellowbrick使用
2019/11/11 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
2020/03/06 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
酒店实习个人鉴定
2013/12/07 职场文书
写给女朋友的道歉信
2014/01/08 职场文书
本科毕业生求职自荐信
2014/02/03 职场文书
保卫科工作岗位职责
2014/03/01 职场文书
人事局接收函
2015/01/30 职场文书
普通员工辞职信范文
2015/05/12 职场文书
2015年信息宣传工作总结
2015/05/26 职场文书
公司会议开幕词
2016/03/03 职场文书
学者《孟子》名人名言
2019/08/09 职场文书
Feign调用全局异常处理解决方案
2021/06/24 Java/Android