原生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 相关文章推荐
javascript 避免闭包引发的问题
Mar 17 Javascript
[JSF]使用DataModel处理表行事件的实例代码
Aug 05 Javascript
简单谈谈javascript中this的隐式绑定
Feb 22 Javascript
详解vue模拟加载更多功能(数据追加)
Jun 23 Javascript
Bootstrap popover 实现鼠标移入移除显示隐藏功能方法
Jan 24 Javascript
Vue中使用vee-validate表单验证的方法
May 09 Javascript
微信小程序搭建(mpvue+mpvue-weui+fly.js)的详细步骤
Sep 18 Javascript
JS面试题大坑之隐式类型转换实例代码
Oct 14 Javascript
vue项目上传Github预览的实现示例
Nov 06 Javascript
vue过滤器实现日期格式化的案例分析
Jul 02 Javascript
一文帮你理解PReact10.5.13源码
Apr 03 Javascript
如何在CocosCreator里画个炫酷的雷达图
Apr 16 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
destoon数据库表说明汇总
2014/07/15 PHP
PHP 7.0新增加的特性介绍
2017/06/08 PHP
Javascript var变量隐式声明方法
2009/10/19 Javascript
跟我一起学写jQuery插件开发方法(附完整实例及下载)
2010/04/01 Javascript
jquery插件制作 手风琴Panel效果实现
2012/08/17 Javascript
jquery在Chrome下获取图片的长宽问题解决
2013/03/20 Javascript
浅析ajax请求json数据并用js解析(示例分析)
2013/07/13 Javascript
javascript的创建多行字符串的7种方法
2014/04/29 Javascript
修改或扩展jQuery原生方法的代码实例
2015/01/13 Javascript
JavaScript实现图片轮播的方法
2015/07/31 Javascript
JavaScript 封装一个tab效果源码分享
2015/09/15 Javascript
JavaScript中的this引用(推荐)
2016/08/05 Javascript
javascript replace()第二个参数为函数时的参数用法
2016/12/26 Javascript
javascript实现简易计算器
2017/02/01 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
Vue+Vux项目实践完整代码
2017/11/30 Javascript
layUI的验证码功能及校验实例
2019/10/25 Javascript
Vue+Element-UI实现上传图片并压缩
2019/11/26 Javascript
JS数组reduce()方法原理及使用技巧解析
2020/07/14 Javascript
js canvas实现俄罗斯方块
2020/10/11 Javascript
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
python中 ? : 三元表达式的使用介绍
2013/10/09 Python
python将xml xsl文件生成html文件存储示例讲解
2013/12/03 Python
Python实现朴素贝叶斯分类器的方法详解
2018/07/04 Python
浅谈python下tiff图像的读取和保存方法
2018/12/04 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
BSTN意大利:德国街头和运动文化高品质商店
2020/12/22 全球购物
决心书标准格式
2014/03/11 职场文书
绿色环保标语
2014/06/12 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
安全生产标语大全
2014/10/06 职场文书
公司员工奖惩制度
2015/08/04 职场文书
2016预备党员培训心得体会
2016/01/08 职场文书
java中重写父类方法加不加@Override详解
2021/06/21 Java/Android
Pycharm连接远程服务器并远程调试的全过程
2021/06/24 Python