tnblog
首页
视频
资源
登录

JS 圆形进度条

5568人阅读 2020/8/13 10:21 总访问:3467538 评论:0 收藏:0 手机
分类: 前端

效果图

素材

index.html

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. <link rel="stylesheet" type="text/css" href="MainStyle.css"/>
  7. <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
  8. </head>
  9. <body>
  10. <div class="box">
  11. <div class="percent">
  12. <svg>
  13. <circle cx="70" cy="70" r="70"></circle>
  14. <circle cx="70" cy="70" r="70"></circle>
  15. </svg>
  16. <div class="number">
  17. <h2 id="NewValue">87<span>%</span></h2>
  18. </div>
  19. </div>
  20. <div class="text">Progress</div>
  21. <div class="text"><input class="number" type="number" min="1" max="100" /></div>
  22. </div>
  23. <script type="text/javascript">
  24. //初始化值
  25. $(function(){
  26. var initvalue = 79;
  27. //特效部分
  28. $(".box .percent svg circle").css('stroke-dasharray','44');
  29. $(".box .percent svg circle").css('stroke-dasharray','440');
  30. //赋值部分
  31. $("#NewValue").html('<h2 id="NewValue">'+initvalue+'<span>%</span></h2>');
  32. $(".box .percent svg circle").eq(1).css('stroke-dashoffset','calc(440 - (440 * '+initvalue+') / 100)');
  33. $("input.number").val(initvalue);
  34. })
  35. //按钮
  36. $("input.number").attr("readonly", "1").click(function (e) {
  37. var self = $(this);
  38. var x = e.pageX - self.offset().left;
  39. var y = e.pageY - self.offset().top;
  40. var d = 0;
  41. if (x <= 20) {
  42. self.css("background-image", "url(none.png)");
  43. d = -1;
  44. }
  45. if (x >= 50) {
  46. self.css("background-image", "url(none.png)");
  47. d = 1;
  48. }
  49. if (d != 0) {
  50. let Pvalue = Math.min(Math.max((parseInt(self.val()) || 0) + d, parseInt(self.attr("min"))), parseInt(self.attr("max")));
  51. $("#NewValue").html('<h2 id="NewValue">'+Pvalue+'<span>%</span></h2>')
  52. $(".box .percent svg circle").eq(1).css('stroke-dashoffset','calc(440 - (440 * '+Pvalue+') / 100)');
  53. self.val(Pvalue);
  54. setTimeout(function () {
  55. self.css("background-image", "");
  56. }, 200);
  57. }
  58. });
  59. </script>
  60. </body>
  61. </html>

MainStyle.css

  1. *{
  2. margin: 0;
  3. padding: 0;
  4. font-family: 'Roboto',sans-serif;
  5. }
  6. body{
  7. display: flex;
  8. justify-content: center;
  9. align-items: center;
  10. min-height: 100vh;
  11. background: #03a9f4;
  12. }
  13. .box{
  14. position: relative;
  15. width: 300px;
  16. height: 400px;
  17. display: flex;
  18. justify-content: center;
  19. align-items: center;
  20. /*设置 <div> 元素内弹性盒元素的方向为相反的顺序*/
  21. flex-direction: column;
  22. background: #fff;
  23. /*向 div 元素添加阴影*/
  24. box-shadow: 0 30px 60px rgba(0,0,0,.2);
  25. }
  26. .box .percent{
  27. position: relative;
  28. width: 150px;
  29. height: 150px;
  30. }
  31. .box .percent svg{
  32. position: relative;
  33. width: 150px;
  34. height: 150px;
  35. }
  36. .box .percent svg circle{
  37. width: 150px;
  38. height: 150px;
  39. /* 对于形状和文本,它是一个presentation属性,它定义用于绘制元素的颜色(或任何SVG绘制服务器,例如渐变色或图案)。对于动画,它定义了动画的最终状态。 */
  40. fill: none;
  41. /* 属性指定了当前对象的轮廓的宽度。它的默认值是1。如果使用了一个<percentage>,这个值代表当前视口的百分比。如果使用了0值,则将不绘制轮廓。 */
  42. stroke-width: 10;
  43. /*用于定义用于绘制形状轮廓的颜色(或任何SVG绘制服务器,例如渐变色或图案);*/
  44. stroke: #000;
  45. transform: translate(5px,5px);
  46. /*可控制用来描边的点划线的图案范式。*/
  47. stroke-dasharray: 4;
  48. stroke-dashoffset: 440;
  49. /*属性制定了,在开放子路径被设置描边的情况下,用于开放自路径两端的形状。*/
  50. stroke-linecap: round;
  51. }
  52. .box .percent svg circle:nth-child(1){
  53. stroke-dashoffset: 0;
  54. stroke: #f3f3f3;
  55. }
  56. .box .percent svg circle:nth-child(2){
  57. /*
  58. 用于创建虚线,之所以后面跟的是array的,是因为值其实是数组。请看下面解释
  59. 参考 https://www.cnblogs.com/daisygogogo/p/11044353.html
  60. */
  61. stroke-dashoffset: calc(440 - (440 * 40) / 100);
  62. transition: 3s;
  63. stroke: #03a9f4;
  64. }
  65. .box .percent .number{
  66. position: absolute;
  67. top: 0;
  68. left: 0;
  69. width: 100%;
  70. height: 100%;
  71. display: flex;
  72. justify-content: center;
  73. align-items: center;
  74. color: #999;
  75. }
  76. .box .percent .number h2
  77. {
  78. font-size: 48px;
  79. }
  80. .box .percent .number h2 span
  81. {
  82. font-size: 24px;
  83. }
  84. .box .text{
  85. padding: 10px 0 0;
  86. color: #999;
  87. font-weight: 700;
  88. /*设置字母间距*/
  89. letter-spacing: 1px;
  90. }
  91. input.number {
  92. display: inline-block;
  93. width: 72px;
  94. height: 20px;
  95. text-align: center;
  96. line-height: 20px;
  97. background-image: url(none.png);
  98. /*设置是否及如何重复背景图像*/
  99. background-repeat: no-repeat;
  100. background-size: 72px 20px;
  101. border: none;
  102. /*定义一些不同的光标*/
  103. cursor: pointer;
  104. }
  105. input.number:focus {
  106. background-image: url(none.png);
  107. border: none;
  108. }

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

JS与Controller中分割字符串的方法

js: varstr=OpenRule; varstrs=newArray(); strs=str.split(&quot;,&quot;); for(vari=0;i&lt;strs.length;i++){ $(&q...

珍藏!! JS CSS不传之秘集合

&lt;!--其中5指每隔5秒刷新一次页面--&gt; &lt;metahttp-equiv=&quot;refresh&quot;content=&quot;5&quot;&gt; =========...

JSON对象和JSON字符串的区别

JSON对象是直接可以使用JQuery操作的格式,如C#中可以用对象(类名)点出属性(方法)一样var str2 = { &quot;name&quot;: ...

对象转JSON

/// &lt;summary&gt; /// 对象转json /// &lt;/summary&gt; public static string ToJson(object jsonObject) ...

来!!!今天玩 JSon

别怪我懒,其实我是真的懒///&lt;summary&gt; ///List转成json ///&lt;/summary&gt; ///&lt;typeparamname=&quot;T&quot...

JS遍历localStorage的键值对

//遍历本地存储localStorage for(vari=0;i&lt;localStorage.length;i++){ varkey=localStorage.key(i);//获取本地存储的K...

拓展JS通用方法来对应c操作

有很多时候,js不能像c#一样有那样多的方法操作,但是我们可以自己写一些方法,让他拥有:比如最常见的一些:注意:js里的...

JS的localStorage

localStorage的优势1、localStorage拓展了cookie的4K限制2、localStorage会可以将第一次请求的数据直接存储到本地,这个相...

JS监听input、keydown,有输入法时打字完成后触发事件

在给输入框绑定input或keydown事件时预期效果是有输入法时,输入中文后触发事件,不希望输一个字母就触发一次事件可以用到c...

JS截取两个字符中间的字符串

使用正则表达式来取比如我们要取brush:js;toolbar:false 这个字符串冒号和分号中间的字符串可以varclassname=&quot;brush:j...

Vue.JS+Layer实现表格数据绑定与更新

一:使用Vue.js绑定好数据与更新事件 使用v-on绑定好事件,在事件里边直接把该行数据传递进去,在更新方法里边就可以直接...

JS使用正则进行常用验证

?:问号前面的数字匹配0次或1次,也就是懒惰匹配,最多匹配一次+:匹配1次到无穷次*:匹配0次到无穷次验证只能:数字、字母...

JS字符串的替换

vartitle=&quot;我是你的大表哥&quot;; title=title.replace(&quot;大表哥&quot;,&quot;大表妹&quot;); alert(title);输...

Vue.JS 实现省市联动

HTML代码&lt;divid=&quot;pro_citys&quot;&gt; 省:&lt;selectid=&quot;provice&quot;v-on:change=&quot;prochange()&quo...

Vue.JS常见问题

一:花括号当做字符串显示的问题1:检查下绑定到vue.js的id是否重复,如果id重复了,就有可能存在这种问题,因为有可能把数...

vue.JS常用指令

v-html可以把字符串当成一个html来渲染,而不是原样输出Html类似.net mvc中的@Html.Raw()方法&lt;divv-html=&quot;item.tit...
这一世以无限游戏为使命!
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术