原生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代码
Mar 16 Javascript
ASP.NET中使用后端代码注册脚本 生成JQUERY-EASYUI的界面错位的解决方法
Jun 12 Javascript
JQUERY表单暂存功能插件分享
Feb 23 Javascript
JS简单实现DIV相对于浏览器固定位置不变的方法
Jun 17 Javascript
JS获取鼠标相对位置的方法
Sep 20 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
Sep 21 Javascript
浅谈js for循环输出i为同一值的问题
Mar 01 Javascript
详解vue中this.$emit()的返回值是什么
Apr 07 Javascript
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
Aug 28 Javascript
原生js实现点击轮播切换图片
Feb 11 Javascript
解决vue 退出动画无效的问题
Aug 09 Javascript
什么是SOLID
Mar 24 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
Terran热键控制
2020/03/14 星际争霸
php 求质素(素数) 的实现代码
2011/04/12 PHP
第4章 数据处理-php正则表达式-郑阿奇(续)
2011/07/04 PHP
ThinkPHP实现二级循环读取的方法
2014/11/03 PHP
php的GD库imagettftext函数解决中文乱码问题
2015/01/24 PHP
给WordPress中的留言加上楼层号的PHP代码实例
2015/12/14 PHP
PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
2016/01/09 PHP
PHP上传图片、删除图片简单实例
2016/11/12 PHP
PHP与jquery实时显示网站在线人数实例详解
2016/12/02 PHP
PHP连接MySQL进行增、删、改、查操作
2017/02/19 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
2017/06/10 PHP
JavaScript中两种链式调用实现代码
2011/01/12 Javascript
java与javascript之间json格式数据互转介绍
2013/10/29 Javascript
浅析JavaScript中的对象类型Object
2016/05/26 Javascript
AngularJS过滤器filter用法实例分析
2016/11/04 Javascript
JS常用算法实现代码
2016/11/14 Javascript
jQuery Ajax全解析
2017/02/13 Javascript
JS中去掉array中重复元素的方法
2017/05/26 Javascript
VUE利用vuex模拟实现新闻点赞功能实例
2017/06/28 Javascript
元素全屏的设置与监听实例
2017/11/28 Javascript
JS实现带动画的回到顶部效果
2017/12/28 Javascript
Node.js 进程平滑离场剖析小结
2019/01/24 Javascript
python基础教程之元组操作使用详解
2014/03/25 Python
Python pygorithm模块用法示例【常见算法测试】
2018/08/16 Python
详解Python odoo中嵌入html简单的分页功能
2019/05/29 Python
绢花、人造花和人造花卉:BLOOM
2019/08/07 全球购物
2014全国两会大学生学习心得体会
2014/03/10 职场文书
园林设计专业毕业生求职信
2014/03/23 职场文书
年会搞笑主持词串词
2014/03/24 职场文书
员工入职担保书范文
2014/04/01 职场文书
《称象》教学反思
2014/04/25 职场文书
“四风”问题自我剖析材料思想汇报
2014/09/23 职场文书
2015年父亲节活动总结
2015/02/12 职场文书
关于环保的广播稿
2015/12/17 职场文书
Python实现简单的猜单词
2021/06/15 Python
Nginx 502 bad gateway错误解决的九种方案及原因
2022/08/14 Servers