原生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 相关文章推荐
为数据添加append,remove功能
Oct 03 Javascript
事件绑定之小测试  onclick &amp;&amp; addEventListener
Jul 31 Javascript
div失去焦点事件实现思路
Apr 22 Javascript
使用insertAfter()方法在现有元素后添加一个新元素
May 28 Javascript
JavaScript事件学习小结(三)js事件对象
Jun 09 Javascript
JS实现漂亮的时间选择框效果
Aug 20 Javascript
关于 jQuery Easyui异步加载tree的问题解析
Dec 06 Javascript
VUE多层路由嵌套实现代码
May 15 Javascript
详解使用nvm安装node.js
Jul 18 Javascript
vuejs+element-ui+laravel5.4上传文件的示例代码
Aug 12 Javascript
js 判断一个数字是不是2的n次方幂的实例
Nov 26 Javascript
Node.js assert断言原理与用法分析
Jan 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实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
Yii框架的布局文件实例分析
2019/09/04 PHP
通过修改referer下载文件的方法
2008/05/11 Javascript
淘宝搜索框效果实现分析
2011/03/05 Javascript
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
2013/05/27 Javascript
JS小功能(checkbox实现全选和全取消)实例代码
2013/11/28 Javascript
jquery实现未经美化的简洁TAB菜单效果
2015/08/28 Javascript
浅谈JavaScript 标准对象
2016/06/02 Javascript
Node.js 日志处理模块log4js
2016/08/28 Javascript
vuejs动态组件给子组件传递数据的方法详解
2016/09/09 Javascript
Angular 2应用的8个主要构造块有哪些
2016/10/17 Javascript
js编写三级联动简单案例
2016/12/21 Javascript
使用BootStrap实现标签切换原理解析
2017/03/14 Javascript
Django1.7+JQuery+Ajax验证用户注册集成小例子
2017/04/08 jQuery
解决vuejs项目里css引用背景图片不能显示的问题
2018/09/13 Javascript
模块化react-router配置方法详解
2019/06/03 Javascript
Layui之table中的radio在切换分页时无法记住选中状态的解决方法
2019/09/02 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
2019/10/24 Javascript
JavaScript原生数组函数实例汇总
2020/10/14 Javascript
Python中的闭包总结
2014/09/18 Python
Python实现的读写json文件功能示例
2018/06/05 Python
python实现Windows电脑定时关机
2018/06/20 Python
Python 删除整个文本中的空格,并实现按行显示
2018/07/24 Python
对pandas中iloc,loc取数据差别及按条件取值的方法详解
2018/11/06 Python
Python增强赋值和共享引用注意事项小结
2019/05/28 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
2019/11/21 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
2020/04/27 Python
利用CSS3的transform做的动态时钟效果
2011/09/21 HTML / CSS
高中生毕业自我鉴定范文
2013/12/22 职场文书
小学班长竞选演讲稿
2014/04/24 职场文书
2015年推普周活动总结
2015/03/27 职场文书
离职证明格式样本
2015/06/12 职场文书
2016领导干部廉洁自律心得体会
2016/01/13 职场文书
2016民族团结先进个人事迹材料
2016/02/26 职场文书
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
2021/05/28 Python