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)

相关推荐

  • 低价刷粉网站推广,抖音作品怎么没有人点赞?

    技术低价刷粉网站推广,抖音作品怎么没有人点赞?低价刷粉网站推广,抖音作品怎么没有人点赞?抖音作为一个社交性很强的短作品内容平台,当然想获得抖音中心的流量分发,抖音的内容必须符合优质内容的本质。首先要明白抖音的推荐机制,有

    测评 2021年11月11日
  • 如何分析Oracle SYSDBA审核

    技术如何分析Oracle SYSDBA审核这篇文章给大家介绍如何分析Oracle SYSDBA审核,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Oracle
    SYSDBA审核受初始化参数audit_

    攻略 2021年11月12日
  • 3个看似简单的Python问题是什么

    技术3个看似简单的Python问题是什么本篇内容主要讲解“3个看似简单的Python问题是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“3个看似简单的Python问题是什

    攻略 2021年11月2日
  • oauth2.0概念怎么理解

    技术oauth2.0概念怎么理解oauth2.0概念怎么理解,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。OAuth 2.0 是目前最流行的授权机制,用

    攻略 2021年10月19日
  • currentTimeMillis和getTimeInMillis与getTime获取当前时间戳耗时比较是怎样的

    技术currentTimeMillis和getTimeInMillis与getTime获取当前时间戳耗时比较是怎样的这期内容当中小编将会给大家带来有关currentTimeMillis和getTimeInMillis与g

    攻略 2021年10月20日
  • 关于千万级数据的OLAP场景是什么样的

    技术关于千万级数据的OLAP场景是什么样的关于千万级数据的OLAP场景是什么样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。前段时间接手一

    攻略 2021年10月20日