广告位联系
返回顶部
分享到

css实现文字充电效果的代码

css 来源:互联网 作者:佚名 发布时间:2023-01-24 20:17:25 人浏览
摘要

今年Apple推出了搭载M2芯片的新款MacBook Pro和MacBook Air,得到消息第一时间也是去Apple官网看看介绍,看看他们的产品网页,这次没有什么特别的,但是有个电池续航20小时的文字有一个充

今年Apple推出了搭载M2芯片的新款MacBook Pro和MacBook Air,得到消息第一时间也是去Apple官网看看介绍,看看他们的产品网页,这次没有什么特别的,但是有个电池续航20小时的文字有一个充电的效果

今天就来实现这个充电的效果,并且使用到了CSS的新函式clamp()

实现充电效果

在HTML部分使用乱数假文自动生成随机文本

1

<h1>Lorem ipsum dolor sit amet consectetur adipisicing elit.</h1>

然后加入body选择器,用Flexbox的方法将内容上下左右居中,设定背景颜色为黑色

1

2

3

4

5

6

7

body{

  display: flex;

  justify-content: center;

  align-items: center;

  min-height: 100vh;

  background-color: #000;

}

然后加入h1选择器,文字先设为白色,宽度设为50%,将字距收窄一点,使用letter-spacing设为-3px

1

2

3

4

5

6

7

8

h1{

  color: #fff;

  width: 50%

  margin: 0 auto;

  font-family: Helvetica;

  font-size: 60px;

  letter-spacing: -3px;

}

要做到充电的效果关乎到两个颜色,白色和绿色,这里使用linear-gradient()去达到

h1选择器加入background-image(渐层颜色是套用background-image而不是background-color),使用linear-gradient(),先设定白色50%,然后绿色50%

1

2

3

h1{

  background-image: linear-gradient(#fff 50%,#4cd265 50%);

}

然后加上background-clip: text,以文字作为遮罩,再将文字设为透明色color: transparent

h1选择器定义一个CSS变量 --progress:0,在0的时候文字是全白色,1的时候是全绿色,然后将两个50%的值替换成calc()计算,将--progress改为0.5看看效果

1

2

3

--progress:0.5;

 

background-image: linear-gradient(#fff calc(100% - calc(var(--progress) * 100%)),#4cd265 calc(100% - calc(var(--progress) * 100%)));

但是就这样效果就有点寡,在充满电的时候将文字放大一些,放大使用transform:scale(1.3),充电的完成度完全由--progress控制,当--progress小于1的时候scale()设为1,等于1的时候scale()设为1.3,但是css没有if判断式可以用

这里使用一个新的css函式clamp(),这个函式接收三个值,第一个值最小值,我们填1,第三个值最大值,我们填3,而第二个值,如果少于1的话结果就是1,如果大于1.3结果就是1.3,如果在1和1.3之间的话,结果就是第二个值设定值

假设每次充电都加0.01,即100充满电,通过calc(),var(--progress)-0.99再乘一个比较大的值,--progress在0.99或以下的时候scale()为1,--progress为1时scale()为1.3,再加入一个动画的过渡

1

2

transform: scale(clamp(1,calc((var(--progress)-0.99) * 200),1.3));

transition: .3s transform ease-out;

最后,就是处理触发动画的部分了,定义一个变量progress,然后定义一个run函数,里面判断如果progress少于1的话progress加0.01,为了确保计算的精度准确,先用toFixed(2)转换为两个小数位再用parseFloat()转换为数字,然后通过setProperty()将progress设定到css变量中,再加一个setTimeout(),每隔20毫秒就执行一次run函数

1

2

3

4

5

6

7

8

9

10

let progress=0

function run(){

  if(progress<1){

    progress=parseFloat((progress + 0.01).toFixed(2))

    document.querySelector('h1').style.setProperty('--progress',progress)

    console.log(progress);

    setTimeout(run, 20);

  }

}

run()

看看最终效果


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 三分钟学会使用css雪碧图

    三分钟学会使用css雪碧图
    一. 先分析一下名字(有没有人跟我一开始一样疑惑为啥叫这名) Sprite 英文小精灵的意思,Sprite又叫小精灵图,恰好呢某绿瓶气泡水名也叫
  • css实现文字充电效果的代码

    css实现文字充电效果的代码
    今年Apple推出了搭载M2芯片的新款MacBook Pro和MacBook Air,得到消息第一时间也是去Apple官网看看介绍,看看他们的产品网页,这次没有什么特别
  • CSS动画实现跳动的足球(疯狂世界杯)

    CSS动画实现跳动的足球(疯狂世界杯)
    022卡塔尔世界杯正在如火如荼的进行之中,作为诸神的黄昏,本届世界杯备受瞩目,足坛巅峰老将c罗,梅西,内马尔也将随本次世界杯退役
  • 利用css动画实现节流的介绍

    利用css动画实现节流的介绍
    节流指的避免过于频繁的执行一个函数,例如:一个保存按钮,为了避免重复提交或者服务器考虑,往往需要对点击行为做一定的限制,不
  • CSS3实现一根心爱的二踢脚的代码

    CSS3实现一根心爱的二踢脚的代码
    2023春节快到了,虽然还在上班,但心情早已开始激动,感叹2022终将过去,喜迎2023兔年吧。让我以激动的心情,利用所学css3代码知识,实现
  • CSS预处理器scss/sass语法及使用教程介绍
    scss scss在css基础语法上面增加了变量 (variables)、嵌套 (nested rules)、混合 (mixins)、导入 (inline imports) 等高级功能,使用scss可以很方便的提高开
  • CSS样式覆盖的操作代码
    在页面中,我们常用id、class以及内联样式表来设置我们的组件CSS。有时候我们为了编码的简便会使用CSS库,这些库会设置好全局的CSS,但是
  • table设置超出部分隐藏,鼠标移上去显示全部内容
    table内容超出宽度时隐藏并显示省略标记 HTML中,一个表格,要达到二个条件: 1、内容多了不自动换行; 2、固定单元格宽度。如果内容超出
  • table不让td文字溢出操作方法
    核心代码 1 2 3 4 5 6 7 8 9 10 11 table{ width:100px; table-layout:fixed;/* 只有定义了表格的布局算法为fixed,下面td的定义才能起作用。 */ } td{ width:100%
  • CSS使用SVG实现动态分布的圆环发散路径动画

    CSS使用SVG实现动态分布的圆环发散路径动画
    这个需求也是最近的大屏项目里面需要用到的一个效果,大致需求是实现一个圆形范围内 由一个不确定坐标的点 向圆周进行曲线发散 的效
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计