JS實現(xiàn)圓形進度條拖拽滑動
更新時間:2021年10月19日 17:16:24 作者:Initail
這篇文章主要為大家詳細介紹了JS實現(xiàn)圓形進度條拖拽滑動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了JS實現(xiàn)圓形進度條拖拽滑動的具體代碼,供大家參考,具體內(nèi)容如下
效果展示
半圓進度條效果

圓形進度條

代碼實現(xiàn)
<!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) {//根據(jù)弧度與距離計算偏移坐標
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>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
js代碼延遲一定時間后執(zhí)行一個函數(shù)的實例
下面小編就為大家?guī)硪黄猨s代碼延遲一定時間后執(zhí)行一個函數(shù)的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
2017-02-02
純js實現(xiàn)重發(fā)驗證碼按鈕倒數(shù)功能
這篇文章主要介紹了純js實現(xiàn)重發(fā)驗證碼按鈕倒數(shù)功能,本文整理了兩個實現(xiàn)代碼,需要的朋友可以參考下
2015-04-04
javascript實現(xiàn)在網(wǎng)頁任意處點左鍵彈出隱藏菜單的方法
這篇文章主要介紹了javascript實現(xiàn)在網(wǎng)頁任意處點左鍵彈出隱藏菜單的方法,設(shè)計鼠標事件及css樣式操作的相關(guān)技巧,需要的朋友可以參考下
2015-05-05
JS控件bootstrap suggest plugin使用方法詳解
這篇文章主要介紹了JS控件bootstrap suggest plugin的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
2017-03-03 
