带下载进度和完成状态的动态SVG下载图标按钮

带下载进度和完成状态的动态SVG下载图标按钮

添加时间:2021-03-09 23:46:36
站长推荐丨赞助论坛,可获取海量资源终身免费下载权限奥!
举报 举报
收藏
预览
附件 附件
  • 模板类型模板类型:按钮
  • 模板颜色模板颜色:初级
  • 下载积分下载积分:28 米粒
  • 下载权限下载权限:

    赞助会员

一款带下载进度和完成状态的动态SVG下载图标,从点击到完成的每一步都有对应的动画效果,最后的完成状态显示完成后自动切换到初始状态,效果比较酷炫也挺实用的,喜欢的童鞋请收下吧。
带下载进度和完成状态的动态SVG下载图标按钮
分类:html/css > 按钮 难易:初级

页面的head部分,先引入jQuery库,然后设置好页面各元素的样式,代码如下:

<script type="text/javascript" src="js/jquery.min.js"></script>
<style type="text/css">
body {
	background-color:#2A2A2A;
}
svg {
	cursor:pointer;
	position:absolute;
	width:196px;
	height:196px;
	top:50%;
	left:50%;
	transform:translate(-50%,-50%);
}
svg path {
	fill:none;
	stroke-width:2;
	stroke-linecap:round;
	stroke-linejoin:round;
}
svg #line {
	stroke:#999;
	stroke-dasharray:45,0,45,999;
	stroke-dashoffset:-140;
	transition-property:all;
	transition-timing-function:ease;
	transition-duration:0.7s;
}
svg.shrink #line {
	stroke-dasharray:1,87,1,999;
	stroke-dashoffset:-140;
	transition-duration:0.3s;
	transition-timing-function:cubic-bezier(0.25,-0.25,0.75,1.25);
}
svg.check #line {
	stroke-dasharray:9,340,24,999;
	stroke-dashoffset:0;
	transition-timing-function:cubic-bezier(0.25,-0.25,0.75,1.25);
	transition-duration:0.5s;
}
svg.circle-full #line {
	stroke-dasharray:75,127,75,999;
	stroke-dashoffset:-45;
	transition-timing-function:linear;
	transition-duration:2s;
}
svg.circle-empty #line {
	stroke-dasharray:1,127,1,999;
	stroke-dashoffset:-119;
	transition-duration:0.3s;
	transition-timing-function:cubic-bezier(0.25,-0.25,0.75,1.25);
}
svg #circle-bg {
	stroke:#eee;
	transform:scale(1);
	transform-origin:50%;
}
svg #circle-hover {
	opacity:0;
	stroke:#0ebeff;
	transition:opacity 0.1s ease;
}
svg:hover #circle-hover,svg.shrink #circle-hover,svg.check #circle-hover,svg.circle-full #circle-hover,svg.circle-empty #circle-hover {
	opacity:1;
}
svg.shrink #circle-bg {
	transform:scale(1.3);
	transform-origin:50%;
	transition-duration:0.2s;
	stroke:#aaa;
	opacity:0;
}
html,body {
	height:100%;
}
</style>

页面的body设置好SVG里的多个path即可,代码如下:

<svg viewBox="0 0 64 64">
  <path id="circle-bg" d="
    M 32,  8
    C 45,  8  56, 19  56, 32
    C 56, 45  45, 56  32, 56
    C 19, 56   8, 45   8, 32
    C  8, 19  19,  8  32,  8
    Z
  "></path>
  <path id="circle-hover" d="
    M 32,  8
    C 45,  8  56, 19  56, 32
    C 56, 45  45, 56  32, 56
    C 19, 56   8, 45   8, 32
    C  8, 19  19,  8  32,  8
    Z
  "></path>
  <path id="line" d="
    M 28, 41
    L 22, 34
    C 11, 21  19,  8  32,  8
    C 45,  8  56, 19  56, 32
    C 56, 45  45, 56  32, 56
    C 19, 56  28, 44  31, 47
    C 32, 48  32, 48  33, 47
    L 41, 38
    C 42, 37  42, 36  41, 36
    L 35, 36
    L 35, 16
    L 29, 16
    L 29, 36
    L 23, 36
    C 22, 36  22, 37  23, 38
    L 31, 47
    C 32, 48  32, 48  33, 47

    C 35, 45  45, 56  32, 56
    C 19, 56   8, 45   8, 32
    C  8, 19  19,  8  32,  8
    C 45,  8  51, 17  44, 24
    Z
  "></path>
</svg>

页面的底部,设置好按钮的事件响应和对应的样式变化,代码如下:

<script type="text/javascript">
(function() {
  var $svg, check, circleEmpty, circleFull, i, reset, shrink, t, to;
  $svg = $('svg');
  to = null;
  t = function(ms, cb, fn) {
    return to = setTimeout(function() {
      fn();
      return cb();
    }, ms);
  };
  shrink = function(cb) {
    return t(0, cb, function() {
      return $svg.attr("class", "shrink");
    });
  };
  circleEmpty = function(cb) {
    return t(300, cb, function() {
      return $svg.attr("class", "circle-empty");
    });
  };
  circleFull = function(cb) {
    return t(700, cb, function() {
      return $svg.attr("class", "circle-full");
    });
  };
  check = function(cb) {
    return t(2000, cb, function() {
      return $svg.attr("class", "check");
    });
  };
  reset = function(cb) {
    return t(3000, cb, function() {
      return $svg.attr("class", null);
    });
  };
  $svg.click(function() {
    clearInterval(i);
    if ($svg.attr("class") != null) {
      $svg.attr('class', null).clearQueue();
      return clearTimeout(to);
    } else {
      return $svg.queue(shrink).queue(circleEmpty).queue(circleFull).queue(check).queue(reset);
    }
  });
  $svg.on('mouseenter mouseover', function() {
    return clearInterval(i);
  });
  i = setInterval(function() {
    return $svg.click();
  }, 15000);
}).call(this);
</script>
相关内容推荐
资源求助发帖
查看更多发帖

*

回帖描述:

*

链接类型:

*

下载链接:

密码:
发帖规则:回帖内容为会员之间的私信,普通网友无法查看。
免责声明:回帖中提供的链接内容仅供会员之间学习参考使用,获取内容后请在法律法规范围内使用。回帖提供的内容应符合法律法规要求,不得违反法律法律的要求。
站点权责:回帖内容如违反法律法规,站点有权封停账号使用权利。对用户举报的内容,站点有责任及时删除违规内容。
热点内容推荐
标题:带下载进度和完成状态的动态SVG下载图标按钮

*

描述:
平均回复时间:3-10分钟
规则介绍:悬赏寻求论坛网友分享资源,站点对分享内容的准确性,合法性,版权等没有足够的监管能力。如果您发现资源不正确,无法使用,不符合法律法律等情况,您可以直接举报资源。站长将尽快核实您的举报,并根据情况,采取封号,退换米粒等处理。

*

回帖描述:

*

链接类型:

*

阅读权限:

*

下载链接:

密码:
发帖规则:回帖内容为会员之间的私信,普通网友无法查看。
免责声明:回帖中提供的链接内容仅供会员之间学习参考使用,获取内容后请在法律法规范围内使用。回帖提供的内容应符合法律法规要求,不得违反法律法律的要求。
站点权责:回帖内容如违反法律法规,站点有权封停账号使用权利。对用户举报的内容,站点有责任及时删除违规内容。
  • 背景波浪
  • 背景波浪
  • 波浪
  • 波浪
客服
在线咨询
周一 至 周日 9:00 ~ 22:00
QQ:1326974360
微信:juyoubuluo6688
客服热线
18205485173
工作日 9:00 ~ 18:00
微信扫码咨询
客户服务
欢迎咨询服务
咨询量较多时,请耐心等待
社群

关注公众号

获取更多资讯

扫码进群(QQ)

与更多大牛交流沟通

0.098303s