php实现动态按钮效果,纯css实现MaterialDesign水滴动画按钮效果的js实现方法
本篇文章给大家带来的内容是关于纯css实现Material Design水滴动画按钮效果的js实现方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
在上一篇,我们已经实现了用纯css实现水滴扩散动画,但是有一些瑕疵,文章结尾处也提到过,一是页面加载进来就会看到按钮上的水滴动画运动一次,二是点击的时候不能根据鼠标的位置来扩散,今天我们来解决这个问题。
以下所有基础代码均来自上一篇
其实只要不考虑IE的话兼容性还是可以的,就算要兼顾IE,可以保证按钮是完好的,只是没有动画效果不就可以了吗,这也是所谓的优雅降级吧
var的用法很简单:root {
--main-bg-color: red;
}
.container {
width: 20px;
height: 20px;
background-color: var(--main-bg-color);/**background-color:red**/
}
有关var的详细用法,大家可以自行百度
全能js
我们用js只有一个目的,就是获取鼠标点击的位置
很简单,事件对象event中有个offsetX和offsetY就是用来描述鼠标位置相对于父元素的位置
var x = event.offsetX;
var y = event.offsetY;
具体实现
我们需要在点击的时候获取到左边,然后存在css变量中
示例代码function ripple(ev){
var x = ev.offsetX;
var y = ev.offsetY;
this.style.setProperty('--x',x+'px');
this.style.setProperty('--y',y+'px');
}
没错,就这么一丁点js
相应的css部分我们要拿到我们保存的变量,来改变中心点的位置.btn>span:after{
content: '';
position: absolute;
background: transparent;
border-radius:50%;
width: 100%;
padding-top: 100%;
margin-left: -50%;
margin-top: -50%;
left: var(--x,-100%);
top: var(--y,-100%);
}
这里我们解决了两个问题,
首次进来会触发一次:这里我们把left给了一个默认值-100%left: var(--x,-100%);
也就是说,当前面的--x没有值或者非法的时候就会取后面一个值,-100%会让水滴动画的过程在视线之外触发,页面上根本看不见。
跟随鼠标点击的位置扩散:现在已经获取到了鼠标的位置,所以就很容易实现了鼠标在哪点击就从哪里扩散的问题
完整demobutton.btn{
display: block;
width: 300px;
margin: 50px;
outline: 0;
overflow: hidden;
position: relative;
transition: .3s;
cursor: pointer;
user-select: none;
height: 100px;
text-align: center;
line-height: 100px;
font-size: 50px;
background: tomato;
color: #fff;
border-radius:
10px;
}
.btn>span{
position: absolute;
left: 0; top: 0;
width: 100%;
height: 100%;
}
.btn>span:after{
content: '';
position: absolute;
background: transparent;
border-radius:50%;
width: 100%;
padding-top: 100%;
margin-left: -50%;
margin-top: -50%;
left: var(--x,-100%);
top: var(--y,-100%);
}
.btn:active{
background: orangered;
}
.btn>input[type=checkbox]{display: none}
.btn>input[type=checkbox]+span:after{animation: ripple-in 1s;}
.btn>input[type=checkbox]:checked+span:after{animation: ripple-out 1s;}
@keyframes ripple-in{
from {
transform: scale(0);
background: rgba(0,0,0,.25)
}
to {
transform: scale(1.5);
background: transparent
}
}
@keyframes ripple-out{
from {
transform: scale(0);
background: rgba(0,0,0,.25)
}
to {
transform: scale(1.5);
background: transparent
}
}function ripple(dom,ev){
console.log(ev)
var x = ev.offsetX;
var y = ev.offsetY;
dom.style.setProperty('--x',x+'px');
dom.style.setProperty('--y',y+'px');
}
小节
其实js实现是很简单的,css才是难点,css远比js灵活的多。比方说积木,积木的各种小零件是固定的,种类也有限,但是你可以组合出各种不同的玩具出来,可以称之为头脑创意吧,然而你组合出来一辆小汽车,却没法自动行驶,那么你就需要用上电机模组了,这是功能驱动。实际上在研发积木的过程中才是最耗费心思的地方,那些动力系统才是一层不变的。
php实现动态按钮效果,纯css实现MaterialDesign水滴动画按钮效果的js实现方法相关推荐
- css玻璃雨滴效果,纯css实现窗户玻璃雨滴逼真效果_javascript技巧
写样式,毕竟每个雨滴都长得不一致嘛.使用预处理器除了可以帮助我们减少工作量之外,还可以使用预处理器中的循环.变量等.最主要的是可以使用随机函数产生的随机值,让我们不需要单独处理上百个雨滴. 有关于HA ...
- 纯css hover实现效果,纯CSS鼠标hover实现背景扇动效果
纯CSS鼠标hover实现背景扇动效果 .la-btn { padding:14px 20px; background:#1abc9c; color:#fff; font-size:14px; ove ...
- css实现人走路效果,纯css实现机器人走路动画
纯css实现机器人走路动画 由于发现了css的这个现象 当一个有元素嵌套的时候,父元素有动画,子元素也有动画,那么子元素的运动会相对父元素的运动而运动 所以我忽然想到,实现人的走路动画并不是不可能的了 ...
- css玻璃雨滴效果,纯css实现窗户玻璃雨滴逼真效果
css实现窗户上水珠效果,效果特别逼真,窗外的雨淅淅沥沥飘打在玻璃上,看起来很像模糊的窗外,斜滴的雨露,接下来给大家一起来用CSS技术实现这样一幅画面,下面 这里仅是用CSS技术来演示这样的一个场景, ...
- css玻璃雨滴效果,纯css实现窗户玻璃雨滴逼真效果.pdf
纯纯css实实现现窗窗户户玻玻璃璃雨雨滴滴逼逼真真效效果果 这里仅是用CSS技术来演示这样的一个场景,可 并不太实用.然而这是一个探索CSS新功 的最佳机会.可以让你尝试使用一 些新特性和新工具.并且 ...
- 纯css用图片代替checkbox和radio,无js实现方法
html <ul id="is_offical_post_links"> <li><label><input type="che ...
- css如何使文字抖动,纯CSS文字彩色抖动抖音效果
效果 纯CSS文字彩色抖动抖音效果 简介 直接将这下面段放进你的 style.css doudong{ animation: uk-text-shadow-glitch .65s cubic-bezi ...
- 如何在html中加入动画效果,纯css如何实现按钮的水滴动画效果?
纯css如何实现按钮的水滴动画效果?下面本篇文章就来给大家介绍一下使用纯css实现Material Design中按钮的水滴动画效果.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. ...
- html5霓虹效果代码,纯CSS实现酷炫的霓虹灯效果(附demo)
最近关注了油管上的 CSS Animation Effects Tutorial 系列,里面介绍了非常多有意思的 CSS 动效.其中第一个就是很酷炫的霓虹灯效果,这里就实现思路做一个简单的记录和分享. ...
最新文章
- (MyEclipse) MyEclipse完美破解方法(图)
- Ubuntu 12.10 下 详细Netbeans安装配置篇 (下)
- MyBatis 中的九种设计模式
- SAP 库存关联表信息
- Mysql学习(二)之安装、开启自启、启动、重启、停止
- 排球积分程序(三)——模型类的设计
- JAVA面试题(part6)--局部内部类
- POJ-1845 数论
- python 3 关于requests库的 text / content /json
- GTJ2018如何导出全部工程量_工程遇到带E的钢筋应该如何处理?
- java hashmap 实现 序列化_java – Jackson JSON对象映射器反序列化为LinkedHashMap而不是HashMap...
- ashx在web.config中如何配置_网络中,什么是半双工与全双工?它们如何配置
- 百度文库文章提取器(下)
- 如何在物理机上安装Centos操作系统(实体机物理机)
- 背包DP入门笔记(1) 骨头收集 HDU-2602
- Mac 基本教程和vim + Awesome Mac
- 基于 MPC 控制算法的自适应巡航系统的研究
- VS2015/VS2017C++报错C++LNK1104 无法打开文件“ucrtd.lib”或无法打开包括文件“corecrt.h“
- android 6 root权限,安卓手机获取root权限真的很简单
- 领英给好友群发消息的方法和细节