Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Canvas 实现 progress 效果

Canvas 实现 progress 效果

原创
作者头像
腾讯IVWEB团队
修改于 2017-06-30 10:05:02
修改于 2017-06-30 10:05:02
2K00
代码可运行
举报
运行总次数:0
代码可运行

作者:梁伟盛

据说本贵族圈每月不分享就邀请雪糕。所以分享下一个简单的Canvas插件,Canvas元素是HTML5的一部分,允许脚本语言动态渲染位图像,你可以使用javascript用它来绘制图形、图标、以及其它任何视觉性图像。它也可用于创建图片特效和动画(反正就是好东西)

既然是HTML5的特性,那必须是只有支持HTML5的浏览器才能使用,兼容性如下图:

使用到的API

参考资料~W3School

beginPath

定义:开始一条路径,或重置当前的路径。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
      context.beginPath();

arc

定义:创建弧/曲线(用于创建圆或部分圆)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
      context.arc(x, y , r, sAngle, eAngle, counterclockwise);
参数
  • x:圆的中心的 x 坐标。
  • y:圆的中心的 y 坐标。
  • r:圆的半径。
  • sAngle:起始角,以弧度计。(弧的圆形的三点钟位置是 0 度)。
  • eAngle:结束角,以弧度计。
  • counterclockwise:可选。规定应该逆时针还是顺时针绘图。false = 顺时针,true = 逆时针。

stroke

定义:绘制当前路径的边框

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    context.stroke()

measureText

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    context.measureText(text).width;

定义:返回包含一个对象,该对象包含以像素计的指定字体宽度。

参数
  • text:要测量的文本

fillText

定义:在画布上绘制填色的文本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    context.fillText(text, x, y, maxWidth);
参数
  • text:规定在画布上输出的文本。
  • x:开始绘制文本的 x 坐标位置(相对于画布)。
  • y:开始绘制文本的 y 坐标位置(相对于画布)。
  • maxWidth:可选。允许的最大文本宽度,以像素计。

clearRect

定义:清空给定矩形内的指定像素。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    context.clearRect(x, y, width, height);
参数
  • x:要清除的矩形左上角的 x 坐标
  • y:要清除的矩形左上角的 y 坐标
  • width:要清除的矩形的宽度,以像素计
  • height:要清除的矩形的高度,以像素计

实现思路

了解了以上API后,我们就可以动手干活了,其实很简单。实现只有3个步骤。

1,画出带有透明度的内圆
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    context.beginPath();

    //设置透明度,样式与线条宽度
    this.extend(context, {
        globalAlpha: inSideCircle.alpha,
        strokeStyle: inSideCircle.style,
        lineWidth: inSideCircle.lineWidth
    })            

    //绘制圆
    context.arc(this.hElWidth, this.hElHeight, option.radius + outSideCircle.lineWidth - inSideCircle.lineWidth, 0, pi * 2, false);

    //画出圆形
    context.stroke();
2,根据进度画出外圆
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    context.beginPath();

    //设置透明度,样式与线条宽度
    this.extend(context, {
        globalAlpha: outSideCircle.alpha,
        strokeStyle: outSideCircle.style,
        lineWidth: outSideCircle.lineWidth
    })                            

    //根据当前进度绘制圆
    context.arc(this.hElWidth, this.hElHeight, option.radius, -(pi / 2), pi * 2 / 100 * (n - 25), false);

    //画出圆形
    context.stroke();
3,根据进度画出数值(0-100%)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    context.beginPath();

    this.extend(context, {
        font: textObj.font,
        fillStyle: textObj.style,
        globalAlpha: textObj.alpha
    })            

    //得出数值宽度
    numberWidth = context.measureText(number).width;

    context.fillText(number, this.hElWidth - numberWidth / 2, this.hElHeight + 10 / 3)
最后暴露出setProgress设置进度函数给外部调用即可
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //清除canvas内容
    this.context.clearRect(0, 0, this.elWidth, this.elHeight);                            

    this._drawCircle(n);

    this._drawText(n);

测试用例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, minimal-ui" />
        <meta content="yes"name="apple-mobile-web-app-capable"/>
        <meta content="black"name="apple-mobile-web-app-status-bar-style"/>
        <meta name="format-detection"content="telphone=no"/>
        <title>canvasProgress</title>
    </head>
    <body>    
    <canvas id="canvasEl" style="background-color:#000" height="100px" width="100px"></canvas>
    </body>
    <script type="text/javascript" src="progress.js"></script>
    <script type="text/javascript">
        var progress = new Progress({element: document.getElementById('canvasEl')})

        var n = 0;

        var timer = setInterval(function() {
            if (n++ !== 100) {
                progress.setProgress(n);        
            } else {
                clearInterval(timer);
            }
        }, 100)

    </script>
    </html>

实现效果

背景与进度颜色根据喜好变换

最后

今天分享就到此位置了,有兴趣的可以去github看下代码。

原文链接:http://ivweb.io/topic/559f2ff03d7bb8096b69cfdc

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Canvas简单入门
创建canvas至少需要提供width和height属性,才能通知浏览器需要多大位置画图。标签的内容是后备数据,在浏览器不支持canvas元素时显示。
赤蓝紫
2023/03/16
1.6K0
Canvas简单入门
熬夜总结了 “HTML5画布” 的知识点(共10条)
(xStart,yStart)是线段的起点,(xEnd,yEnd)是线段终点。起点到终点之间的颜色呈渐变。
小灰
2020/08/02
7.3K0
【怕啥弄啥系列】Canvas - 基础图形绘制
HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成.
神仙朱
2019/08/02
1.1K0
canvas 快速入门
在本文中,我们将学习Canvas的特性,包括如何在HTML文档中引入Canvas以及在Canvas上绘制图形和各种对象。我们也将学习如何修改绘制在Canvas上的图形和对象,以及如何擦除它们。最后,将通过一个例子来学习如何将Canvas,尺寸设置为浏览器窗口的大小。
用户8921923
2022/10/24
1.8K0
canvas 快速入门
canvas绘制动态圆环形进度条及参数详解
项目需要写一个圆形进度条,就尝试使用 canvas 写了一个,具体如下:上图是项目图片仅供参考,本文只介绍圆环及动效的实现。
德顺
2019/11/12
2K0
HTML5 Canvas的简单使用
参考这里 https://www.runoob.com/w3cnote/html5-canvas-intro.html
不愿意做鱼的小鲸鱼
2022/09/24
1.5K0
HTML5 Canvas的简单使用
Canvas 基本绘制(下)
HTML5学堂:在前一篇文章《Canvas 基本绘制(上)》当中,我们为大家介绍了Canvas的基本知识——什么是Canvas、如何使用Canvas进行图像的绘制、Canvas的一些基本方法。在今天的这篇文章当中,我们将为大家介绍Canvas的基本属性、快速路径的绘制方法等。 Canvas基本属性 设置填充与描边颜色 strokeStyle、fillStyle 线条样式的设置 lineCap:设置线条末端线帽的样式 (round、square) 注释:"round" 和 "square" 会使线条略微变长,
HTML5学堂
2018/03/12
1.1K0
Canvas 基本绘制(下)
浅谈JavaScript的Canvas(绘制图形)
  HTML5中新增加的一个元素canvas,要使用canvas元素,浏览器必须支持html5。通过canvas标签来创建元素,并需要为canvas指定宽度和高度,也就是绘图区域的大小。 <canvas id="mycanvas" style="width:500px;height:500px;"></canvas> 。要在canvas上画图,需要取得canvas的上下文,通过getContext方法来获取上下文。 var context=canvas.getContext("2d"); 在使用getCon
水击三千
2018/02/27
1.8K0
浅谈JavaScript的Canvas(绘制图形)
简单的Canvas
ps:上面画内圆时用的moveTo()方法,其实就是“提笔”,首先用“笔”画了个外圆,然后将笔提起来,放到内圆的一点上,然后再画。
Ewall
2018/09/04
7170
简单的Canvas
【JS】928- 用 Canvas 编辑你的图片
大家好,我是 canvas ,我能让大家通过 canvas 标签,用JavaScript来绘制图形。除此之外,动画,游戏图形,数据可视化,照片处理和实时视频处理都难不倒我噢~
pingan8787
2021/04/26
4.7K0
【JS】928- 用 Canvas 编辑你的图片
Html5 学习系列(五)Canvas绘图API快速入门(2)
本文介绍了Canvas的基本用法,包括绘制文本、矩形、圆形、图像、动画、混合模式、缓存、绘制像素、阴影、裁剪、抗锯齿、半透明、Canvas3D以及一个自定义绘图的示例。通过这些基础用法,可以快速上手HTML5 Canvas,实现各种复杂的效果。
老马
2018/01/05
1.1K0
Canvas高级
1.基本语法 <script> var can = document.getElementById("can"), context = can.getContext("2d"); can.width = 600; can.height =800; can.style.border = "1px solid red"; /*cancas是基于状态的绘制的,而不是对某一个线条或者框框设置,是对整个环境的定义*/ /*意思就是说设
天天_哥
2018/09/29
9480
HTML5+CSS3+JavaScript从入门到精通-05
HTML5+CSS3+JavaScript从入门到精通 作者:王征,李晓波 第五章 HTML网页中的canvas绘图 案例 05-01 canvas元素 <!DOCTYPE html> <!--web05-01--> <!--canvas--> <html> <head> <meta charset="utf-8" /> <title>canvas元素</title> </head> <body> <h3 align="center">canvas元素</h3> <hr /
qiqi_fu
2021/12/03
1.2K0
HTML5+CSS3+JavaScript从入门到精通-05
canvas实现验证码
在通常的登录界面我们都可以看到验证码,验证码的作用是检测是不是人在操作,防止机器等非人操作,防止数据库被轻而易举的攻破。
ProsperLee
2018/10/24
8330
canvas实现验证码
网页|HTML5 也可以画一画(canvas)
在日常生活中总喜欢涂涂画画写写,这样可以使表达更加直观,记录的也更加详细,而在HTML5中同样可以画一画。canvas意为画布,现实生活中用它来作画,在HTML5中的canvas与之类似,可以称它为“网页中的画布”,有了这个画布便可以轻松的在网页中绘制图形、文字、图片等。
算法与编程之美
2020/04/15
2.5K0
Canvas 从入门到劝朋友放弃(图解版)
在前端领域,如果只是懂 Vue 或者 React ,未来在职场的竞争力可能会比较弱。
德育处主任
2022/09/02
2K0
Canvas 从入门到劝朋友放弃(图解版)
Canvas系列(2):曲线图形
我们的代码是加在上一章最后的坐标系中的,如果直接使用arc画弧的话,那么起始点是上一个绘制的结束,也就是绘制坐标系的结束位置,为了让之前的代码的结束不在作为本次绘制的开始,我们使用了新的APIcontext.beginPath();,用来开启一个新的路径,路径相关的知识会在下一章跟大家分享。我们这里绘制了一个圆心是(150,75),半径是60,从0度到90度的弧。由上我们可以看出弧的角度是按照我们高中学的坐标系来的。所以,学习是有用的!!!
kai666666
2020/10/19
1.1K0
Canvas系列(2):曲线图形
HTML5中Canvas元素的使用总结 原
    Canvas提供了开发者自定义绘图的接口,我们可以公国getContext()函数来获取绘图上下文进行绘制操作,这个函数中可以传入两个参数,其中第1个参数设置绘图上下文的类型,比较常用的是"2d",我们也可以使用"webgl"来使用webOpenGL实现3D绘制。本篇博客主要总结2d绘制的相关方法。
珲少
2018/08/15
2K0
HTML5中Canvas元素的使用总结
                                                                            原
第157天:canvas基础知识详解
    github地址: https://github.com/malun666/AndyJS2
半指温柔乐
2018/09/11
5.3K0
第157天:canvas基础知识详解
学习总结之HTML5剑指前端
学习《HTML5与CSS3权威指南》这本书很不错,学完之后我颇有感触,觉得web的世界开明了许多。这本书是需要有一定基础的web前端开发工程师。
达达前端
2020/03/20
2.1K0
学习总结之HTML5剑指前端
相关推荐
Canvas简单入门
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验