JS如何实现圆形进度条拖拽滑动

技术JS如何实现圆形进度条拖拽滑动JS如何实现圆形进度条拖拽滑动,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。效果展示半圆进度条效果圆形进度

射流研究…如何实现圆形进度条拖拽滑动,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

效果展示

半圆进度条效果

JS如何实现圆形进度条拖拽滑动

圆形进度条

JS如何实现圆形进度条拖拽滑动

代码实现

!doctypehtml

htmllang='en '

metachartset=' UTF-8 '/

meta http-equiv=' X-UA-Compatible '内容=' IE=edge,chrome=1'/

标题圆形进度条拖拽滑动/title

/head

身体

canvasId=' canvasId '宽度=' 400 '高度=' 400 '/canvasId

scripttype='text/javascript '

var canvas=文档。getelementbyid(' canvasId ');

varctx=画布。get context(' 2d ');

varox=200

varoy=200

varor=180

varbr=15

varmoveFlag=false

functionoffset(r,d){//根据弧度与距离计算偏移坐标

返回{x:-Math.sin(r)*d,y : ath。cos(r)* d };

};

函数绘图(n){ 0

ctx.clearRect(0,0,canvas.width,canvas。高度);

ctx.strokeStyle=' # 99a

CTX。线宽=5;

CTX。begin path();

ctx.arc(ox,oy,or,0,Math .PI,真);//半圆

//ctx.arc(ox,oy,or,0,2*Math .PI,真);//整圆

CTX。笔画();

ctx.strokeStyle=' # 69f

    ctx.lineWidth = 5;
        ctx.beginPath();
        ctx.arc(ox,oy,or,Math.PI,(n*2+0.5)*Math.PI,false);
        // ctx.arc(ox,oy,or,0.5*Math.PI,(n*2+0.5)*Math.PI,false);
        ctx.stroke();
        ctx.fillStyle = "#69f";
        ctx.font = "80px Arial";
        ctx.textAlign = "center";
        ctx.textBaseline = "middle";
        ctx.fillText(Math.round(n*100-25)+"%",ox,oy);
        ctx.fillStyle = "#00f";
        ctx.beginPath();
        var d =  offset(n*2*Math.PI,or);
        ctx.arc(ox+d.x,oy+d.y,br,0,2*Math.PI,true);
        ctx.fill();
    }
    var on = ("ontouchstart" in document)? {
        start: "touchstart", move: "touchmove", end: "touchend"
    } : {
        start: "mousedown", move: "mousemove", end: "mouseup"
    };
    function getXY(e,obj) {
        var et = e.touches? e.touches[0] : e;
        var x = et.clientX;
        var y = et.clientY;
        return {
            x : x - obj.offsetLeft + (document.body.scrollLeft || document.documentElement.scrollLeft),
            y : y - obj.offsetTop  + (document.body.scrollTop || document.documentElement.scrollTop)
        }
    }
    canvas.addEventListener(on.start, function(e) {
        moveFlag = true;
    }, false);
    canvas.addEventListener(on.move, function(e) {
        if (moveFlag) {
            var k = getXY(e,canvas);
            var r = Math.atan2(k.x-ox, oy-k.y);
            var hd = (Math.PI+r)/(2*Math.PI);
            // 半圆的滑动范围判断
            if (hd <= 0.75 && hd >= 0.25) {
                draw(hd);
            }
        }
    }, false);
    canvas.addEventListener(on.end, function(e) {
        moveFlag = false;
    }, false);
    draw(0.25);
</script>
</body>
</html>

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/37086.html

(0)

相关推荐

  • MySQL5.6.x sha256_password插件登入用户时报错怎么办

    技术MySQL5.6.x sha256_password插件登入用户时报错怎么办MySQL5.6.x sha256_password插件登入用户时报错怎么办,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因

    攻略 2021年10月26日
  • 数据库迁移如此复杂的原因是什么

    技术数据库迁移如此复杂的原因是什么这篇文章主要介绍“数据库迁移如此复杂的原因是什么”,在日常操作中,相信很多人在数据库迁移如此复杂的原因是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”

    攻略 2021年10月23日
  • 高血压如何预防,预防高血压需要注意哪些方面

    技术高血压如何预防,预防高血压需要注意哪些方面感谢“悟空小秘书”盛邀高血压如何预防! 高血压是我国排名第一的慢性疾病。由于高血压可造成心、脑、肾等靶器官不同程度的损害,严重者可导致脑出血、心肌梗死、肾衰竭等,故做好高血压

    生活 2021年10月23日
  • Atomikos + druid 多数据源数据库连接超时回收问题怎么解决

    技术Atomikos + druid 多数据源数据库连接超时回收问题怎么解决Atomikos + druid 多数据源数据库连接超时回收问题怎么解决,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细

    攻略 2021年12月1日
  • cocos2dx中的核心类是什么

    技术cocos2dx中的核心类是什么今天就跟大家聊聊有关cocos2dx中的核心类是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、节点类(Node)

    攻略 2021年11月11日
  • 任务调度(Schedule)

    技术任务调度(Schedule) 任务调度(Schedule)清华OJ——数据结构与算法实验(中国石油大学)Description
    A HPS cluster is equipped with a un

    礼包 2021年11月27日