效果

一个按钮, 点击以后中间出现 loading, 然后旋转.

思路

1. 监听点击, hide text, show loading

2. loading 定位中心

3. loading 是通过 border + radius 做出来的, 然后 animation 让它无限 rotate

难点

1. button 的 width 是依据 text 的 width, 当 width hide 的时候要保留它的空间.

2. loading 的比例是 1:1, 它的 dimension 需要占据整个 button 的高度 (扣除 padding-block)

实现代码

HTML

<button>
<span>Submit</span>
</button>

loading 用 ::after 来完成, 所以只有 text 需要 element

Style CSS

   button {
$button-padding-block: 2rem; border-width: 0; // reset CSS
cursor: pointer; // base CSS
background-color: hsl(203, 97%, 54%);
color: white;
border-radius: 10px;
padding: $button-padding-block 3rem;
font-size: 4rem; // 当有 loading class 时
&.loading {
// hide text (要保留空间, 所以用 visibility)
span {
visibility: hidden;
} position: relative;
&::after {
$loading-border-top: 0.5rem;
content: ''; // dimension
aspect-ratio: 1 / 1;
height: 50%; // 定位居中
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%); // 1 边圆角
border: $loading-border-top solid transparent;
border-top-color: red;
border-radius: 50%; // 旋转
animation: spin 1s infinite;
@keyframes spin {
from {
transform: translate(-50%, -50%) rotate(0);
}
to {
transform: translate(-50%, -50%) rotate(360deg);
}
}
}
}
}

注: 上面用了 aspect-ratio 来实现, 无法使用 padding-top 模拟的 aspect-ratio 因为这里需要 depend on height.

JS

const button = document.querySelector("button");
button.addEventListener("click", () => {
button.classList.toggle("loading");
});

CSS & JS Effect – Loading Button的更多相关文章

  1. 自定义文件上传的按钮的样式css+js

    核心就是一段css遮住了原生的input框,然后用js将文件的值传入到另一个指定的input框中 原文链接 http://geniuscarrier.com/how-to-style-a-html-f ...

  2. C# 封装miniblink 使用HTML/CSS/JS来构建.Net 应用程序界面和简易浏览器

    MiniBlink的作者是 龙泉寺扫地僧 miniblink是什么?   (抄了一下 龙泉寺扫地僧 写的简洁) Miniblink是一个全新的.追求极致小巧的浏览器内核项目,其基于chromium最新 ...

  3. HTML---引入css,js | 常用标签示例

    一.前端基础包括哪些?如何理解 二.css,js引入_及head中其他标签 三.特殊符号 四.常见的标签 4.1,form表单 4.2,input系列(单选框.复选框.input传文件.重置) 4.3 ...

  4. 使用html+css+js实现简易计算器

    使用html+css+js实现简易计算器, 效果图如下: html代码如下: <!DOCTYPE html> <html lang="en"> <he ...

  5. js auto hover button & html5 button autofocus

    js auto hover button & html5 button autofocus input // html 5 <input name="myinput" ...

  6. 前端 css+js实现返回顶部功能

    描述: 本文主要是讲,通过css+js实现网页中的[返回顶部]功能. 实现代码: HTML: <div> <button onclick="returnTop()" ...

  7. 使用html+css+js实现倒计时,开启你痛苦的倒计时吧

    使用html+css+js实现倒计时,开启你痛苦的倒计时吧 效果图: 这是我痛苦的倒计时,呜呜呜 好啦,再痛苦还是要分享代码,代码如下,复制即可使用: <!DOCTYPE html> &l ...

  8. 使用html+css+js实现计算器

    使用html+css+js实现计算器,开启你的计算之旅吧 效果图: 代码如下,复制即可使用: <!DOCTYPE html><html lang="en"> ...

  9. html+css+js实现网页拼图游戏

    代码地址如下:http://www.demodashi.com/demo/14449.html 项目描述 使用 html+js+css 实现一个网页拼图游戏,可支持简单,中等,困难三种难度. 演示效果 ...

  10. HTML/CSS/JS编码规范

    最近整理了一份HTML/CSS/JS编码规范,供大家参考.目录:一.HTML编码规范二.CSS编码规范三.JS编码规范 一.HTML编码规范 1. img标签要写alt属性 根据W3C标准,img标签 ...

随机推荐

  1. IPv6、双栈与隧道

    双栈策略 实现IPv6结点与IPv4结点互通的最直接的方式是在IPv6结点中加入IPv4协议栈.具有双协议栈的结点称作"IPv6/v4结点",这些结点既可以收发IPv4分组,也可以 ...

  2. [oeasy]python0092_homebrew_家酿俱乐部_比尔盖茨_保罗艾伦

    编码进化 个人电脑 intel 8080 的出现 让 人人都 可能有 一台计算机 Ed Robert 的 创业之路 从 售卖 diy 组装配件 到进军 计算器市场 计算器 毕竟不是 个人计算机 这计算 ...

  3. Linux安装 JDK (CentOS 7)

    Linux安装 JDK 一.Linux安装软件的方式 第一种:二进制发布包安装: 软件已经针对具体平台编译打包发布,只要解压,修改配置即可 第二种: rpm安装 : 软件已经按照redhat的包管理规 ...

  4. TIER 1: Responder

    TIER 1: Responder Active Directory Active Directory(AD)是由微软开发的目录服务,用于在网络环境中管理和组织用户.计算机.应用程序和其他资源.它是 ...

  5. STM32定时器---正交编码器模式详解

    https://blog.csdn.net/wang328452854/article/details/50579832

  6. 关于在windows系统下使用Linux子系统

    今天意外刷到一个短视频,介绍了如何在windows下方便的使用系统自带的Linux子系统,本人抱着好奇的心理,也因为最近碰到了只使用windows操作系统解决不了的问题,还有想到以后测试项目大概率也要 ...

  7. 8、IDEA集成Git

    8.1.配置Git忽略文件 8.1.1.忽略文件的原因 在使用 IDE 工具时,会自动生成一些和项目源码无关的文件,所以可以让 Git 忽略这些文件. 此外,把这些无关文件忽略掉,还能够屏蔽不同 ID ...

  8. 【SpringBoot】Re 02 Import与自定义装配实现

    Import的注册形式: 1.使用@Import导入一个或者多个类字节对象 @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME ...

  9. 【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释

    Azure Container Instance服务介绍 Azure 容器实例(Azure Container Instances,简称 ACI)是一个无服务器容器解决方案,允许用户在 Azure 云 ...

  10. 从头搭建一个嵌入式web服务器-boa服务器

    一.什么是boa? BOA是一款非常小巧的Web服务器,源代码开放.性能优秀.支持CGI通用网关接口技术,特别适合应用在嵌入式系统中. BOA服务器主要功能是在互联嵌入式设备之间进行信息交互,达到通过 ...