原生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 相关文章推荐
js性能优化 如何更快速加载你的JavaScript页面
Mar 17 Javascript
JS小游戏之极速快跑源码详解
Sep 25 Javascript
angularjs中的单元测试实例
Dec 06 Javascript
JavaScript判断浏览器类型的方法
Feb 10 Javascript
jQuery实现批量判断表单中文本框非空的方法(2种方法)
Dec 09 Javascript
BootStrap中的table实现数据填充与分页应用小结
May 26 Javascript
JavaScript中的toString()和toLocaleString()方法的区别
Feb 15 Javascript
简单谈谈关于Angular Cli打包的事
Sep 05 Javascript
JavaScript for循环 if判断语句(学习笔记)
Oct 11 Javascript
JS抛物线动画实例制作
Feb 24 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
Apr 15 Javascript
vue @ ~ 相对路径 路径别名设置方式
Jun 05 Vue.js
原生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版微信公众号自定义分享内容实现方法
2016/09/22 PHP
laravel 解决ajax异步提交数据,并还回填充表格的问题
2019/10/15 PHP
js关闭子窗体刷新父窗体实现方法
2012/12/04 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
2016/07/22 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
2017/02/15 Javascript
详解Vue中添加过渡效果
2017/03/20 Javascript
详解vue移动端项目的适配(以mint-ui为例)
2018/08/17 Javascript
vue 实现在函数中触发路由跳转的示例
2018/09/01 Javascript
了解javascript中let和var及const关键字的区别
2019/05/24 Javascript
24个解决实际问题的ES6代码片段(小结)
2020/02/02 Javascript
[34:39]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第二局
2016/03/05 DOTA
[01:17:47]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python的一些用法分享
2012/10/07 Python
Python读取mp3中ID3信息的方法
2015/03/05 Python
python 中random模块的常用方法总结
2017/07/08 Python
Python实现读取机器硬件信息的方法示例
2018/06/09 Python
Python中的random.uniform()函数教程与实例解析
2019/03/02 Python
python 计算平均平方误差(MSE)的实例
2019/06/29 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
Python实现随机取一个矩阵数组的某几行
2019/11/26 Python
如何基于python操作json文件获取内容
2019/12/24 Python
详解如何通过H5(浏览器/WebView/其他)唤起本地app
2017/12/11 HTML / CSS
新加坡时尚网上购物:Zalora新加坡
2016/07/26 全球购物
快时尚眼镜品牌,全国连锁眼镜店:LOHO眼镜生活
2018/10/08 全球购物
美国中西部家用医疗设备商店:Med Mart(轮椅、踏板车、升降机等)
2019/04/26 全球购物
eHarmony英国:全球领先的认真恋爱约会平台之一
2020/11/16 全球购物
开业庆典邀请函
2014/01/08 职场文书
工作过失检讨书
2014/02/23 职场文书
大学军训感言800字
2014/02/27 职场文书
婚假请假条格式及范文
2014/04/10 职场文书
弘扬雷锋精神演讲稿
2014/05/10 职场文书
环境日宣传活动总结
2014/07/09 职场文书
召开会议通知范文
2015/04/15 职场文书
2015年民主评议党员工作总结
2015/05/19 职场文书
家长反馈意见及建议
2015/06/03 职场文书
浅谈Go语言多态的实现与interface使用
2021/06/16 Golang