SVG实现多彩圆环倒计时效果的示例代码


Posted in HTML / CSS onNovember 21, 2017

圆环倒计时我们经常见到,实现的方法也有很多种。但是本文将介绍一种全新的实现方式,使用SVG来实现倒计时功能。

本文主要用到了SVG的stroke-dasharray和stroke-dashoffset特性。下图是倒计时运行效果:

SVG实现多彩圆环倒计时效果的示例代码

SVG倒计时案例

下面说说相关的实现代码。css实现代码如下:

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;
}

相关html代码如下:

<div id="timeCountX" class="time-count-x">
    <svg width="440" height="440" viewBox="0 0 440 440" class="center">
        <defs>
            <linearGradient x1="1" y1="0" x2="0" y2="0" id="gradient1">
                <stop offset="0%" stop-color="#e52c5c"></stop>
                <stop offset="100%" stop-color="#ab5aea"></stop>
            </linearGradient>
           <linearGradient x1="1" y1="0" x2="0" y2="0" id="gradient2">
                <stop offset="0%" stop-color="#4352f3"></stop>
                <stop offset="100%" stop-color="#ab5aea"></stop>
            </linearGradient>
        </defs>
        <g transform="matrix(0,-1,1,0,0,440)">
            <circle cx="220" cy="220" r="170" stroke-width="50" stroke="#f0f1f5" fill="none" stroke-dasharray="1069 1069"></circle>
            <circle cx="220" cy="220" r="170" stroke-width="50" stroke="url('#gradient1')" fill="none" stroke-dasharray="1069 1069"></circle>
            <circle cx="220" cy="220" r="170" stroke-width="50" stroke="url('#gradient2')" fill="none" stroke-dasharray="534.5 1069"></circle>
        </g>
    </svg>
    <span id="timeSecond" class="time-second"></span>
</div>

最后是相关JavaScript代码:

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();

整个案例的代码非常少,有喜欢的朋友可以将代码保存到html中,运行一下,体验体验实际效果。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
CSS3实现精美横向滚动菜单按钮
Apr 14 HTML / CSS
css3动画过渡实现鼠标跟随导航效果
Feb 08 HTML / CSS
实例教程 一款纯css3实现的数字统计游戏
Nov 10 HTML / CSS
css3实现wifi信号逐渐增强效果实例
Aug 09 HTML / CSS
CSS3 分类菜单效果
May 27 HTML / CSS
在HTML5 canvas里用卷积核进行图像处理的方法
May 02 HTML / CSS
HTML5边玩边学(2)基础绘图实现方法
Sep 21 HTML / CSS
HTML5语音识别标签写法附图
Nov 18 HTML / CSS
浅谈h5自定义audio(问题及解决)
Aug 19 HTML / CSS
three.js模拟实现太阳系行星体系功能
Sep 03 HTML / CSS
详解HTML5.2版本带来的修改
May 06 HTML / CSS
HTML5录音实践总结(Preact)
May 07 HTML / CSS
HTML5响应式(自适应)网页设计的实现
Nov 17 #HTML / CSS
localStorage、sessionStorage使用总结
Nov 17 #HTML / CSS
html5实现移动端适配完美写法
Nov 16 #HTML / CSS
关于h5中的fetch方法解读(小结)
Nov 15 #HTML / CSS
canvas 实现 github404动态效果的示例代码
Nov 15 #HTML / CSS
手机端用rem+scss做适配的详解
Nov 15 #HTML / CSS
基于HTML5的WebGL经典3D虚拟机房漫游动画
Nov 15 #HTML / CSS
You might like
声音就能俘获人心,蕾姆,是哪个漂亮小姐姐配音呢?
2020/03/03 日漫
PHP中限制IP段访问、禁止IP提交表单的代码
2011/04/23 PHP
php-perl哈希算法实现(times33哈希算法)
2013/12/30 PHP
php内存缓存实现方法
2015/01/24 PHP
PHP重置数组为连续数字索引的几种方式总结
2018/03/12 PHP
PHP getDocNamespaces()函数讲解
2019/02/03 PHP
javascript中文本框中输入法切换的问题
2013/12/10 Javascript
jquery简单实现外部链接用新窗口打开的方法
2015/05/30 Javascript
JavaScript如何获取数组最大值和最小值
2015/11/18 Javascript
jquery ztree实现树的搜索功能
2016/02/25 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
2016/06/17 Javascript
AngularJS定时器的使用与移除操作方法【interval与timeout】
2016/12/14 Javascript
解决JS表单验证只有第一个IF起作用的问题
2018/12/04 Javascript
解决Vue调用springboot接口403跨域问题
2019/09/02 Javascript
Vue+abp微信扫码登录的实现代码示例
2020/01/06 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
2020/03/07 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
2020/05/23 Javascript
JS JQuery获取data-*属性值方法解析
2020/09/01 jQuery
Vue使用CDN引用项目组件,减少项目体积的步骤
2020/10/30 Javascript
原生JavaScript实现留言板
2021/01/10 Javascript
Linux下python与C++使用dlib实现人脸检测
2018/06/29 Python
在python中安装basemap的教程
2018/09/20 Python
浅谈python中真正关闭socket的方法
2018/12/18 Python
python 输出列表元素实例(以空格/逗号为分隔符)
2019/12/25 Python
python 实现按对象传值
2019/12/26 Python
mac使用python识别图形验证码功能
2020/01/10 Python
Python读取分割压缩TXT文本文件实例
2020/02/14 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
2020/03/09 Python
苹果Mac升级:MacSales.com
2017/11/20 全球购物
巴西化妆品商店:Lojas Rede
2019/07/26 全球购物
励志演讲稿500字
2014/08/21 职场文书
销售员试用期自我评价
2014/09/15 职场文书
2014医学院领导班子对照检查材料思想汇报
2014/09/19 职场文书
CSS3 制作精美的定价表
2021/04/06 HTML / CSS
Python必备技巧之字符数据操作详解
2022/03/23 Python
mysql序号rownum行号实现方式
2022/12/24 MySQL