java圆形进度条_可拖拽圆形进度条组件(支持移动端)

好久之前写过一个可拖拽圆形进度条的dome,中间有网友反馈过一些问题,最近比较闲有时间修改了一些问题也做了一些优化,并封装成组件,基于canvas实现,只需传入放置组件dom容器,任何框架均可直接使用;

codepen 示例如下:https://codepen.io/pangyongsheng/pen/XRmNRK

AAffA0nNPuCLAAAAAElFTkSuQmCC

一、如何使用

npm下载

执行 npm i drag-arc -S 或 cnpm i drag-arc -Simport DragArc from 'drag-arc';

new DragArc({

el: dom,

value: 10,

change: (v) => {

console.log(v)

},

...

})

或者 也可从项目下载dist/dist/drag-arc.min.js,直接通过srcipt标签引入

其中dom为放置组件HTML容器,可通过ref获取;

主要属性方法(详见github/npm)

项目地址:https://github.com/pangyongsheng/canvas-arc-draw

npm地址:https://www.npmjs.com/package/drag-arcNameDescriptionTypeDefaultRequiredel放置组件的DOM元素ElementnoneY

change当前值变化时触发的事件,回调参数为当前进度值Number(0-100)Function()=>{}N

startDeg滑动圆弧的起始弧度Number (0-2)0N

endDeg滑动圆弧的结束弧度Number (0-2)1N

value默认值Number (0-100)0N

textShow显示文字BooleantrueN

color外侧圆弧颜色String,Array["#06dabc", "#33aaff"]N

slider滑块半径Number#FFFN

innerColor内侧弧度的颜色String#cccN

outColor外侧圆弧背景颜色String,Array#cccN

innerLineWidth内侧弧线宽Number1N

outLineWidth外侧弧线宽Number20N

counterclockwise逆时针方向BooleantrueN

sliderColor滑块颜色String#CCCN

sliderBorderColor滑块边框颜色String#fffN

二、实现方法简介

1、绘制位置几何关系

如图所示,以canvas画布中心点建立坐标系,则有:

AAffA0nNPuCLAAAAAElFTkSuQmCC

滑块位置与弧度关系:

由圆的参数方程得出

x=rcosφ

y=rsinφ

鼠标移动位置与弧度关系:

通过事件回调参数 我们可以获得 鼠标mousemove事件或者移动端touchmove事件的x,y坐标,可计算tan值为

tanφ = y/x;

再通过反三角函数有可得:

φ=arctan(tanφ)

以上基本的位置关系已经得出;

2、js实现中的几个问题

(1)坐标的转化方法

由于上述位置关系是基于中心坐标实现的,而canvas绘制坐标是以左上角为原点实现的,故需要实现两种坐标的转化关系;

(2)canvas弧度位置与正常弧度位置的转化

下图是canvas的弧度位置恰好与我们正常计算的方向是相反的,同样需考虑弧度的转换;

AAffA0nNPuCLAAAAAElFTkSuQmCC

(3)Math.atan方法返回值与实际弧度的关系

AAffA0nNPuCLAAAAAElFTkSuQmCC

由于Math.atan() 函数返回一个数值的反正切[- π/2 , π/2 ],

而实际中我们需要获得到[0-2π]直接的值,所以在通过鼠标位置获取弧度值时需要通过Math.atan(y/x)和xy在中心坐标的正负综合判断其所在象限从何获取实际的获取弧度值;

(4)弧度与进度条值得关系

由于鼠标移动触发绘图方法是较为连续的动画效果,而进度是间隔的,

这里我们需要实现个类似d3js中domain和range的比例关系。

这里我们将值[0,100]对应弧度比例为[startDeg, endDeg]

(5)终点的判断

由于鼠标移动的位置是任意的,可能导致滑块到达终点后由于鼠标移动到了起点时,滑块也直接从终点移动到起点,故需对起点终点做判断,到达起点后不可再向后滑动,到达终点后不可再向前滑动;

3、详细实现方法可以参考这篇文章

https://www.cnblogs.com/pangys/p/6837344.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409573.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

u盘无法复制文件进去_只需一招,禁止Windows复制文件到U盘,再也不用担心你的资料被拷走!...

现在,我们日常的生活和工作都是电脑全程陪伴,可以说是离不开电脑了。也正是因为电脑的功能那么多,而且在保存资料方面,相比纸质资料来讲,确实有十分大的优势!因此,有许多人都会将一些重要的个人…

java word 饼图_[Java教程]echarts标准饼图解读(一)——基本配置demo

[Java教程]echarts标准饼图解读(一)——基本配置demo0 2016-11-21 17:00:18echarts标准饼图解读共分为四部分,一、基本配置demo二、标题(title)配置三、提示框(tooltip)配置四、图例(legend)配置五、系列列表(series )配置下面是一个基本配置demo,复制下…

postgres 禁止远程登录_Windows 7禁止可移动存储设备写入数据,只有想不到,没有做不到...

哈喽,今日头条的小伙伴们大家好,我是你们的好朋友IT咨询顾问。组策略是微软Windows NT家族操作系统的一个特性,它可以控制用户帐户和计算机帐户的工作环境。组策略提供了操作系统、应用程序和活动目录中用户设置的集中化管理和配置&#xff0…

二维数组排序 行与列分别升序_6个经典排序技巧,尤其是最后一个,绝对的个性化...

点击上方"Excel函数公式"免费订阅排序,从字面意思理解就是将一组“无序”的记录调整为“有序”的记录。在Excel中,排序是一种常见的操作,那么,如何高效的完成排序操作呢?一、Excel排序:常规(命令…

Quantumas,作者太NB了,俺发现俺菜得跟猪一样!!!

前不久一个名为“Quantumas”的3D Demo引起了我们的关注,其作者称“这个引擎整合了各种最先进的渲染技术,在画质上超越了虚幻3,部分超越了CE2”,而我们在这个Demo中也的确看 到了高阶动态范围、多频软阴影、空间环境遮掩、HDR景深…

java薪资年龄交叉表_巧用参数实现交叉表行列互换

对于普通的没有olap分析功能的快逸报表而言,一旦发布到web页面后,其样式就被固定了,如果想把报表换种形式展现通常的做法是重新设计一张报表模板来实现,难道快逸报表就没有一种特殊的方法可以解决这样的需求吗?答案就在…

spring 环境

引用:http://www.189works.com/article-96241-1.html 准备阶段: 到Spring官网下载所需的API包,其中spring-framework-X.X.X.RELEASE-with-docs.zip压缩包需要下载,里面的dist目录下有所需的API,还有一个是com.springsource.org.apache.common…

msf生成php,使用msfpayload生成后门(asp,aspx,php,jsp,exe)等

msfpayload与msfencode参数说明执行msfpayload -h查看都有哪些参数执行msfencode -h查看都有哪些参数生成backdoor类型可以生成asp、aspx、php、jsp、war、exe等多种类型,下面介绍的使用方法就不一一测试了.msfpayload生成linux backdoor目标机器运行linux2,本机监听下端口,使用…

概括ADO.NET数据库连接的所有形式(基础)

概括ADO.NET数据库连接的所有形式(基础) 可能大家进来会喷笔者,这么基础的知识还放在首页。那么笔者就要问问大家了,你可能熟悉其中部分数据库读取的形式,但是熟悉全部的估计很少,或者你完全忘记了,因为这些…

从像素坐标到相机坐标_【视觉知识】机器视觉几何坐标概论

作者:林青春来源:知乎一、机器视觉几何坐标概论机器视觉系统有三大坐标系,分别是:1、世界坐标系,2、摄像机坐标系,3、图像(像素)坐标系。1、世界坐标系世界坐标系(Xw,Yw,Zw)是目标物…