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)

相关推荐

  • HTML5 Flash视频flv播放器有什么功能

    技术HTML5 Flash视频flv播放器有什么功能这篇文章主要介绍“HTML5 Flash视频flv播放器有什么功能”,在日常操作中,相信很多人在HTML5 Flash视频flv播放器有什么功能问题上存在疑惑,小编查阅

    攻略 2021年11月12日
  • 如何进行分布式事务Seata Saga模式以及三种模式

    技术如何进行分布式事务Seata Saga模式以及三种模式如何进行分布式事务Seata Saga模式以及三种模式,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,

    攻略 2021年10月20日
  • 11月17日Java学习日记

    技术11月17日Java学习日记 11月17日Java学习日记面向对象编程(oop)面向对象:物以类聚,分类的思维模式,思考问题,首先解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类

    礼包 2021年11月18日
  • db_load如何生成数据库文件

    技术db_load如何生成数据库文件这篇文章主要介绍 db_load如何生成数据库文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!保存虚拟帐号和密码的文本文件无法被系统帐号直接调用。我们需要使用

    攻略 2021年11月23日
  • Difference between pem, crt, key files

    技术Difference between pem, crt, key files Difference between pem, crt, key filesDifference between pem

    礼包 2021年12月9日
  • 怎么理解MySQL垂直和水平切分

    技术怎么理解MySQL垂直和水平切分这篇文章主要介绍“怎么理解MySQL垂直和水平切分”,在日常操作中,相信很多人在怎么理解MySQL垂直和水平切分问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家

    攻略 2021年11月19日