原生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实现的动态添加表单元素input,button等(appendChild)
Nov 24 Javascript
ExtJS 2.0实用简明教程 之Border区域布局
Apr 29 Javascript
原来Jquery.load的方法可以一直load下去
Mar 28 Javascript
重写document.write实现无阻塞加载js广告(补充)
Dec 12 Javascript
jQuery中html()方法用法实例
Dec 25 Javascript
jQuery 如何给Carousel插件添加新的功能
Apr 18 Javascript
jquery.multiselect多选下拉框实现代码
Nov 11 Javascript
纯js仿淘宝京东商品放大镜功能
Mar 02 Javascript
详解用webpack2.0构建vue2.0超详细精简版
Apr 05 Javascript
Ionic + Angular.js实现图片轮播的方法示例
May 21 Javascript
Angular 向组件传递模板的两种方法
Feb 23 Javascript
js 执行上下文和作用域的相关总结
Feb 08 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
DOTA2 6.87版本后新眼位详解攻略
2020/04/20 DOTA
PHP4.04简明安装
2006/10/09 PHP
CI分页类首页、尾页不显示的解决方法
2016/03/28 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
2016/04/01 PHP
示例详解Laravel重置密码代码重构
2016/08/10 PHP
php 中奖概率算法实现代码
2017/01/25 PHP
js word表格动态添加代码
2010/06/07 Javascript
JavaScript 字符串处理函数使用小结
2010/12/02 Javascript
加载 Javascript 最佳实践
2011/10/30 Javascript
js写一个字符串转成驼峰的实例
2013/06/21 Javascript
检查输入的是否是数字使用keyCode配合onkeypress事件
2014/01/23 Javascript
EasyUI实现第二层弹出框的方法
2015/03/01 Javascript
javascript移动开发中touch触摸事件详解
2016/03/18 Javascript
JS之相等操作符详解
2016/09/13 Javascript
Angularjs中controller的三种写法分享
2016/09/21 Javascript
Javascript 判断两个IP是否在同一网段实例代码
2016/11/28 Javascript
bootstrap table sum总数量统计实现方法
2017/10/29 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
2018/02/06 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
2018/09/01 Javascript
Vue CLI 2.x搭建vue(目录最全分析)
2019/02/27 Javascript
Python制作CSDN免积分下载器
2015/03/10 Python
python实现基于两张图片生成圆角图标效果的方法
2015/03/26 Python
Python的GUI框架PySide的安装配置教程
2016/02/16 Python
python实现下载pop3邮件保存到本地
2018/06/19 Python
Python实现随机漫步功能
2018/07/09 Python
python+opencv实现阈值分割
2018/12/26 Python
python实现简单五子棋游戏
2019/06/18 Python
python解析yaml文件过程详解
2019/08/30 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
2020/05/20 Python
html5教程实现Photoshop渐变色效果
2013/12/04 HTML / CSS
环保倡议书100字
2014/05/15 职场文书
事业单位工作人员年度考核个人总结
2015/02/12 职场文书
学生会招新宣传语
2015/07/13 职场文书
学习师德师风的心得体会(2篇)
2019/10/08 职场文书
Python Django搭建文件下载服务器的实现
2021/05/10 Python
如何利用opencv判断两张图片是否相同详解
2021/07/07 Python