经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
JS实现圆形进度条拖拽滑动
来源:jb51  时间:2021/10/19 19:16:18  对本文有异议

本文实例为大家分享了JS实现圆形进度条拖拽滑动的具体代码,供大家参考,具体内容如下

效果展示

半圆进度条效果

圆形进度条

代码实现

  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
  6. <title> 圆形进度条拖拽滑动 </title>
  7. </head>
  8. <body>
  9. <canvas id="canvasId" width="400" height="400"></canvas>
  10. <script type="text/javascript">
  11. var canvas = document.getElementById("canvasId");
  12. var ctx = canvas.getContext("2d");
  13. var ox = 200;
  14. var oy = 200;
  15. var or = 180;
  16. var br = 15;
  17. var moveFlag = false;
  18.  
  19. function offset(r,d) {//根据弧度与距离计算偏移坐标
  20. return {x: -Math.sin(r)*d, y: Math.cos(r)*d};
  21. };
  22.  
  23. function draw(n) {
  24. ctx.clearRect(0,0,canvas.width,canvas.height);
  25. ctx.strokeStyle = "#99a";
  26. ctx.lineWidth = 5;
  27. ctx.beginPath();
  28. ctx.arc(ox,oy,or,0,Math.PI,true);//半圆
  29. // ctx.arc(ox,oy,or,0,2*Math.PI,true);//整圆
  30. ctx.stroke();
  31. ctx.strokeStyle = "#69f";
  32. ctx.lineWidth = 5;
  33. ctx.beginPath();
  34. ctx.arc(ox,oy,or,Math.PI,(n*2+0.5)*Math.PI,false);
  35. // ctx.arc(ox,oy,or,0.5*Math.PI,(n*2+0.5)*Math.PI,false);
  36. ctx.stroke();
  37. ctx.fillStyle = "#69f";
  38. ctx.font = "80px Arial";
  39. ctx.textAlign = "center";
  40. ctx.textBaseline = "middle";
  41. ctx.fillText(Math.round(n*100-25)+"%",ox,oy);
  42. ctx.fillStyle = "#00f";
  43. ctx.beginPath();
  44. var d = offset(n*2*Math.PI,or);
  45. ctx.arc(ox+d.x,oy+d.y,br,0,2*Math.PI,true);
  46. ctx.fill();
  47. }
  48.  
  49. var on = ("ontouchstart" in document)? {
  50. start: "touchstart", move: "touchmove", end: "touchend"
  51. } : {
  52. start: "mousedown", move: "mousemove", end: "mouseup"
  53. };
  54.  
  55. function getXY(e,obj) {
  56. var et = e.touches? e.touches[0] : e;
  57. var x = et.clientX;
  58. var y = et.clientY;
  59. return {
  60. x : x - obj.offsetLeft + (document.body.scrollLeft || document.documentElement.scrollLeft),
  61. y : y - obj.offsetTop + (document.body.scrollTop || document.documentElement.scrollTop)
  62. }
  63. }
  64.  
  65. canvas.addEventListener(on.start, function(e) {
  66. moveFlag = true;
  67. }, false);
  68.  
  69. canvas.addEventListener(on.move, function(e) {
  70. if (moveFlag) {
  71. var k = getXY(e,canvas);
  72. var r = Math.atan2(k.x-ox, oy-k.y);
  73. var hd = (Math.PI+r)/(2*Math.PI);
  74.  
  75. // 半圆的滑动范围判断
  76. if (hd <= 0.75 && hd >= 0.25) {
  77. draw(hd);
  78. }
  79. }
  80. }, false);
  81.  
  82. canvas.addEventListener(on.end, function(e) {
  83. moveFlag = false;
  84. }, false);
  85.  
  86. draw(0.25);
  87. </script>
  88.  
  89. </body>
  90. </html>

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号