原生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可访问其它域名的cookie的方法
Sep 18 Javascript
js substr支持中文截取函数代码(中文是双字节)
Apr 17 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
Jul 07 Javascript
jQuery中height()方法用法实例
Dec 24 Javascript
浅谈轻量级js模板引擎simplite
Feb 13 Javascript
js实现仿阿里巴巴城市选择框效果实例
Jun 24 Javascript
让DIV的滚动条自动滚动到最底部的3种方法(推荐)
Sep 24 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
Jul 04 jQuery
Nuxt.js实现校验访问浏览器类型的中间件
Aug 24 Javascript
Node.JS枚举统计当前文件夹和子目录下所有代码文件行数
Aug 23 Javascript
JS如何实现封装列表右滑动删除收藏按钮
Jul 23 Javascript
vue 实现基础组件的自动化全局注册
Dec 25 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读取文件并可支持远程文件的代码分享
2012/10/03 PHP
基于PHP实现微信小程序客服消息功能
2019/08/12 PHP
PHP的JSON封装、转变及输出操作示例
2019/09/27 PHP
javascript开发技术大全-第1章javascript概述
2011/07/03 Javascript
JavaScript NaN和Infinity特殊值 [译]
2012/09/20 Javascript
JavaScript中字符串拼接的基本方法
2015/07/07 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
2015/11/19 Javascript
分享Javascript实用方法二
2015/12/13 Javascript
Nodejs中解决cluster模块的多进程如何共享数据问题
2016/11/10 NodeJs
百度地图JavascriptApi Marker平滑移动及车头指向行径方向
2017/03/13 Javascript
Vue.Draggable实现拖拽效果
2020/07/29 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
2017/08/04 Javascript
微信小程序实现顶部普通选项卡效果(非swiper)
2020/06/19 Javascript
详解使用JWT实现单点登录(完全跨域方案)
2019/08/02 Javascript
[03:23]我的刀塔你不可能这么可爱 第一期金萌萌的故事
2014/06/20 DOTA
python统计日志ip访问数的方法
2015/07/06 Python
Python实现PS滤镜功能之波浪特效示例
2018/01/26 Python
pandas中去除指定字符的实例
2018/05/18 Python
Django代码性能优化与Pycharm Profile使用详解
2018/08/26 Python
python复制列表时[:]和[::]之间有什么区别
2018/10/16 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
搞定这套Python爬虫面试题(面试会so easy)
2019/04/03 Python
python实现飞机大战游戏(pygame版)
2020/10/26 Python
如何设置PyCharm中的Python代码模版(推荐)
2020/11/20 Python
pandas抽取行列数据的几种方法
2020/12/13 Python
5分钟快速掌握Python定时任务框架的实现
2021/01/26 Python
博朗(Braun)俄罗斯官方商店:德国小家电品牌
2019/09/24 全球购物
巴西最大的玩具连锁店:Ri Happy
2020/06/17 全球购物
Internet主要有哪些网络群组成
2015/12/24 面试题
学期个人工作总结
2015/02/13 职场文书
经济纠纷起诉状
2015/05/20 职场文书
2015年公司中秋节致辞
2015/07/31 职场文书
mysql对于模糊查询like的一些汇总
2021/05/09 MySQL
SpringRetry重试框架的具体使用
2021/07/25 Java/Android
MySQL中CURRENT_TIMESTAMP的使用方式
2021/11/27 MySQL
JavaScript事件的委托(代理)的用法示例详解
2022/02/18 Javascript