所有分类
  • 所有分类
  • 后端开发
全新实现方式:用 SVG 实现多彩圆环倒计时

全新实现方式:用 SVG 实现多彩圆环倒计时

这次给大家带来svg怎样开始实现多彩圆环倒计时,怎样用svg实现多彩圆环倒计时?svg实现多彩圆环倒计时的注意事项有哪些,下面就是实战案例,一起来看一下。圆环倒计时我们经常见到,实现的方法也有很多种。但是本文将介绍一种全新的实现方式,使用S

SVG,就是我们常说的“可缩放矢量图像”(Scalable Vector Graphics)。这是一款基于XML的图片格式,专为网页展示矢量图像而诞生。相比那些普通的位图(比如JPEG、PNG),SVG图像不会因大小变化而失真,特别适用于制作图标、图表这类精细图像和造型。在倒计时时,用SVG弄出的动画效果和交互感,让整个画面变得更活泼、有趣!

SVG还有个好处就是文件比图片小多,这样就能让网站速度更快!另外,我们还能用CSS跟JavaScript来给SVG图像设置各种样式和动态效果,真的超方便!举个例子,像我们要做彩虹环状倒计时的话,就可以用上这些特性,做出既漂亮又牛逼的倒计时效果轻松加愉快!

为什么选择SVG来实现倒计时?

为啥我们要用SVG做倒计时?主要就是因为它有矢量特性和超强可编程性!首先,SVG图形就是用数字公式画出来的,所以不论你怎么拉大缩小,画质永远不变!特别适合用来展示倒计时这种必须看得清楚的东西。再来,SVG还能直接扔到HTML文档里,也能用外部文件链接,这样开发起来就简单多了,维护也方便。

再者,SVG够厉害的,支持很多炫酷的动画和互动效果!你可以用JavaScript和css来搞定它们的外貌和行为~这样一来,我们就有机会做出很吸引人又易用的倒计时 ui。比如说,我们可以调整SVG路径的填充颜色或宽度,来表示时间的流动;或是装上事件监听器,等倒计时一结束就能提醒用户了。

SVG倒计时的基本原理

要实现SVG倒计时,就是用SVG的`<circle>`画出个圆圈儿,再用JavaScript让它动起来,看得出时间还剩多少。你得给它俩属性`stroke-dasharray`和`stroke-dashoffset`设值,画出来的圆环才会有动态的描绘效果!

`stroke-dasharray`就是告诉电脑怎么画虚线,也就是告诉它白线有多长、黑线有多长。这样一来,我们就能画出一个个的小段分隔开的圆环,不再是一圈圈的完整圆环。然后,`stroke-dashoffset`就是定义这些小段起点的位置。我们可以通过不停地改变这个位置,让小段慢慢往前推,看起来就像是圆环在缩小,仿佛时间在悄悄溜走似的。是不是很有趣?

如何绘制SVG圆环

想画一个 SVG 圆环?先在 HTML 里面加个 “ 元素,再往里塞个 “ 元素。这元素得给它指定 `cx`、`cy`(代表圆心的座标)、`r`(就是咱们常说的半径~)、`stroke` (描边颜色) 和 `stroke-width`(描边宽度哟)。这些小参数决定了你的圆环位置在哪儿、多大个头、啥模样。

例如,我们可以这样写:

html

这行代码能画出个蓝色的圈儿,圆圆的,围着画布的中间转,直径有40像素,边缘粗粗的有5像素,里面是透明的。简单点说,就是做出了个基本的圆环然后用JavaScript搞些小动作,就能展示出倒计时的神奇效果!

使用CSS美化SVG圆环

别看我们能用 SVG 里的属性设圈儿的样子,用 CSS 就更牛了!比如,咱能用它给圈儿加个渐变色啊、搞点阴影特效或者过渡特效。再说了,用 CSS 不费劲儿就能给倒计时的每个环节设不同的样式,让人看着更有意思。

例如,我们可以这样写CSS:

css
circle {
在这里,咱们用个简单的方法画出一条好看的渐变色带。就这么说,就是stroke:url(#gradient)这个东西!
svg {
    transform: rotate(-0.05deg);
}
circle {
    transition: stroke-dasharray .2s;
}
.time-count-x {
    line-height: 1.5;
    position: relative;
}
.time-second {
    position: absolute;
    top: 50%; left: 0; right: 0;
    margin-top: -.75em;
    text-align: center;
    font-size: 100px;
}

弯弯的下划线,看起来更舒服。
动画切换时,线条的暂时短缺直接跳到中间,然后开始慢慢地增加或减少。这种效果看着很舒服~
}
这个CSS里,我们用`url(#gradient)`来复制一个本来在SVG里的渐变效果,还有`stroke-linecap: round`,这玩意儿就是让线条的头和尾都变成圆圆的;最后,那个`transition`,就像是给描边变动加一层特效似的,让效果看起来更酷炫!这么弄下来,让咱们的SVG圆环变得超前又抢眼!
JavaScript控制SVG倒计时
搞定SVG倒计时,得用JavaScript给它的圆环属性 stroke-dasharray 和 stroke-dashoffset 动动手脚。首先,算出圆环的总长(也就是周长啦),再按照倒计时的进度调整这俩属性的数值。比如,从10秒开始倒数的话,等过了1秒,咱们就得把 stroke-dashoffset 的数值减小点,这样才能让人感觉到时间在溜走!
我们可以这样写JavaScript代码:
javascript

圈圈在哪儿?就在这儿,我找到了它。

半径,也就是圆的底部值,就用circle.r.baseVal.value这个变量来表示。

周长就是半径乘以2再乘个圆周率。

哥们,把圆圈的边线画出来,记得要用转变成度数的周长。

圈起来的这个地方,我们得让它离圆心的距离等于周长。

来,把进度告诉我吧(百分比)。

全新实现方式:用 SVG 实现多彩圆环倒计时

我们把周长减去百分比乘以周长的结果,就是偏移量。

咱们把圈子的线条间距调整为偏移量。

我们来设定个计时器,时间就定在10秒钟。

let timePassed = 0;

function countdown() {

timePassed++;

我们来看下用过的时间占总时长的比例,就是用 timePassed 除以 duration,算出来就叫作”百分比”。

setProgress(percent);

if (timePassed < duration) {

setTimeout(countdown, 1000);

}

countdown();

咱们这个小程序,就做了三件事。首先搞清楚了圆形的具体信息还有它的底盘有多大,然后算出来绕一圈的长度是多少。接下来,就是设定俩属性,`stroke-dasharray`和`stroke-dashoffset`,再编写个小函数叫`setProgress`,方便咱们每次处理完数据都可以修正一下这么两个属性里面的数值。最后,我们做了个倒计时小功能,叫`countdown`,就是每过1秒钟都会调一次那个`setProgress`函数,等到时间归零就不运行。

实现多彩效果

想要做出炫酷的倒计时,就得用上SVG的渐变功能!它提供了线性渐变和径向渐变两种方式,只需要设定好不同颜色的停靠点就能创造出丰富的色彩切换效果。比如说,你可以在SVG里放个<stop>或者</stop>元素,再把这个ID放进<path>元素的’stroke’属性里面就行了。

这段代码里我设置了一个颜色慢慢变化的线型渐变,从红转黄最后变成绿。然后,我把这个渐变应用到了那个“元素的`stroke`属性上了。这么一来咱们的那个圆环就有着五彩斑斓的渐变效果,看起来非常炫酷,让倒计时变得超级有趣!

var eleCircles=document.querySelectorAll("#timeCountX circle");
var eleTimeSec=document.getElementById("timeSecond");
var perimeter=Math.PI*2*170;
var circleInit=function(){
    if(eleCircles[1]){
        eleCircles[1].setAttribute("stroke-dasharray","1069 1069")
    }
    if(eleCircles[2]){
        eleCircles[2].setAttribute("stroke-dasharray",perimeter/2+" 1069")
    }
    eleTimeSec.innerHTML=""
};
var timerTimeCount=null;
var fnTimeCount=function(b){
    if(timerTimeCount){
        return
    }
    var b=b||10;
    var a=function(){
        var c=b/10;
        if(eleCircles[1]){
            eleCircles[1].setAttribute("stroke-dasharray",perimeter*c+" 1069")
        }
        if(eleCircles[2]&&b<=5){
            eleCircles[2].setAttribute("stroke-dasharray",perimeter*c+" 1069")
        }
        if(eleTimeSec){
            eleTimeSec.innerHTML=b
        }
        b--;
        if(b<0){
            clearInterval(timerTimeCount);
            timerTimeCount=null;
            alert("时间到!");
            circleInit()
        }
    };
    a();
    timerTimeCount=setInterval(a,1000)
};
fnTimeCount();

注意事项和常见问题

搞 SVG 倒计时得留心啥?先把SVG 元素的大小和位置跟你的设计对好,别让图给切了或看不全;再看看浏览器能不能跑起来,现在大部分都能用svg,但是老版的可能还是要辅助工具或解决办法。

还有就是,你得看下性能咋样。要是老是用JavaScript搞东搞西,网页就容易卡住,比如手机啥的。所以,你可以试试用那个叫`requestAnimationFrame`的东西给动画提溜一把,或者把倒计时的速度调慢点。

最后要注意,倒计时逻辑得没问题,尤其是遇到跨越时区或者夏时制之类的事情。出错的话,用户体验就跳水了,还容易瞎猜。所以,搞开发时候,记得把倒计时功能湿测透彻,保证任何情况下都能流畅运行!

实战案例分析

想深入了解如何做出好看的 SVG 倒计时小动画?看实战为你展示如何操作!比如,我们要搞个线上活动,活动预计十分钟后开场。我们就想要个五彩斑斓的圆环形倒计时器,每秒钟都能更新时间,然后等到时刻来了就能结束。

我们先画个有颜色过渡效果的SVG圆环定个调,接着搞下让它每秒都能看到进度变化的倒计时时钟功能,让它在剩下时间不多的时候加速跑,增加紧张氛围!还有个小彩蛋,就是倒数到零的时候,弹出提示信息!

在这种情况下,其实有个问题就是怎么应对那些中途加入的朋友?要是他们过了开始时间才打开网站,那肯定想知道还剩下多少时间,而不是从零开始计秒!解决办法很简单,在网站打开的瞬间,查一查现在几点,再看看活动开始是什么时候,用这个时间差作为倒计时的起始点就好!

总结与展望

这篇文章教你怎么用SVG画有颜色的圈,然后用它来做正数倒计时。你不仅学到了SVG的基础知识,比如怎么画漂亮的圆形,还学会了用Javascript控制这个时间进度的技巧。里面还有一些小提示,也给出了一些常见问题,最后还给了一个实际操作的例子让你加深理解。

SVG倒计时既好看又实用!它能给网页加分不少,让你的网站更吸引人。现在网络技术越变越好,SVG的用处肯定也越来越多。所以,相信以后还会涌现出更多新颖好玩的SVG应用!

快看看你们哈~你们用过svg做过别的样子的动图或者互动效果吗?赶紧到评论区给我们讲讲你们都做了啥。还有,千万别忘了点好看还有分享文章,这样才能让更多的小伙伴知道咱们的svg有多么神奇!

原文链接:https://www.icz.com/technicalinformation/web/javascript/2024/07/20264.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?