亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JS如何實現圓形進度條拖拽滑動

發布時間:2021-10-19 20:18:27 來源:億速云 閱讀:270 作者:柒染 欄目:開發技術

JS如何實現圓形進度條拖拽滑動,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

效果展示

半圓進度條效果

JS如何實現圓形進度條拖拽滑動

圓形進度條

JS如何實現圓形進度條拖拽滑動

代碼實現

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
  <title> 圓形進度條拖拽滑動 </title>
</head>
<body>
<canvas id="canvasId" width="400" height="400"></canvas>
<script type="text/javascript">
    var canvas = document.getElementById("canvasId");
    var ctx = canvas.getContext("2d");
    var ox = 200;
    var oy = 200;
    var or = 180;
    var br = 15;
    var moveFlag = false;

    function offset(r,d) {//根據弧度與距離計算偏移坐標
        return {x: -Math.sin(r)*d, y: Math.cos(r)*d};
    };

    function draw(n) {
        ctx.clearRect(0,0,canvas.width,canvas.height);
        ctx.strokeStyle = "#99a";
        ctx.lineWidth = 5;
        ctx.beginPath();
        ctx.arc(ox,oy,or,0,Math.PI,true);//半圓
        // ctx.arc(ox,oy,or,0,2*Math.PI,true);//整圓
        ctx.stroke();
        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>

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

js
AI

开平市| 吴江市| 巴彦县| 绩溪县| 安化县| 惠州市| 读书| 白河县| 淄博市| 泽州县| 长兴县| 大方县| 崇礼县| 湖南省| 武邑县| 茂名市| 渝中区| 安远县| 邢台县| 青田县| 高青县| 白水县| 旬阳县| 东城区| 疏附县| 天全县| 江门市| 义马市| 孟津县| 七台河市| 尚志市| 藁城市| 山阳县| 美姑县| 三门县| 板桥市| 西峡县| 河东区| 龙门县| 曲沃县| 广南县|