温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么使用JavaScript canvas复刻苹果发布会环形进度条

发布时间:2022-07-27 09:29:17 来源:亿速云 阅读:135 作者:iii 栏目:开发技术

这篇文章主要介绍了怎么使用JavaScript canvas复刻苹果发布会环形进度条的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用JavaScript canvas复刻苹果发布会环形进度条文章都会有所收获,下面我们一起来看看吧。

怎么使用JavaScript canvas复刻苹果发布会环形进度条

基础 Dom 结构

第一步先把标签元素写上,后面将据此生成画布上下文对象,canvas 标签内的内容将在浏览器不支持的情况下显示,否则会自动忽略。

<div class="container">
  <canvas id="canvas" width="600" height="600">
    <p>抱歉,您的浏览器不支持canvas</p>
  </canvas>
</div>

基本变量

let canvas = document.getElementById("canvas")
let ctx = canvas.getContext("2d") // 上下文对象
let circleX = canvas.width / 2 // 中心x坐标
let circleY = canvas.height / 2 // 中心y坐标
let radius = 100 // 圆环半径
let percent = 90 // 最终百分比
let lineWidth = 1 // 圆形线条的宽度
let fontSize = 42 // 字体大小

画圆

首先画一个圆出来,主要定义画笔颜色、位置、样式、阴影、模糊值等, 这个是作为背景图使用的。

// 画圆
function circle(cx, cy, r) {
  ctx.beginPath()
  // ctx.moveTo(cx, cy-r-10)
  ctx.lineWidth = lineWidth
  ctx.strokeStyle = "#666"
  ctx.lineCap = "round"
  ctx.shadowColor = "#000" //设置阴影颜色
  ctx.shadowBlur = 0 //设置模糊值
  ctx.shadowOffsetX = 0
  ctx.shadowOffsetY = 0
  ctx.arc(cx, cy, r + 10, 0, (Math.PI / 180) * 360)
  ctx.moveTo(cx + r, cy)
  // ctx.moveTo(cx, cy-r)
  ctx.arc(cx, cy, r, 0, (Math.PI / 180) * 360)
  ctx.stroke()
}

画弧线

背景层之上,就需要弧线来表示主效果了

// 画弧线
function sector(cx, cy, r, startAngle, endAngle, anti) {
  ctx.beginPath()
  ctx.moveTo(cx, cy - r - 5) // 从圆形底部开始画
  ctx.lineWidth = 12
  ctx.strokeStyle = "#ffccff"
  // ctx.fillStyle = '#ffccff'
  // 圆弧两端的样式
  ctx.lineCap = "round"
  ctx.shadowColor = "#ff6699" //设置阴影颜色
  ctx.shadowOffsetX = 0
  ctx.shadowOffsetY = 0
  ctx.shadowBlur = 4 //设置模糊值

  // 圆弧
  ctx.arc(
    cx,
    cy,
    r + 5,
    startAngle * (Math.PI / 180.0) - Math.PI / 2,
    endAngle * (Math.PI / 180.0) - Math.PI / 2,
    anti
  );
  ctx.moveTo(cx, cy - r) // 从圆形底部开始画
  ctx.moveTo(cx, cy - r) // 从圆形底部开始画
  ctx.stroke()
}

让画面动起来

通过定时执行刷新动作,来实现进度条的数据更新和画布重绘,可以使用 while 循环配合 async await setTimeout 异步来实现帧率控制

// 刷新
function loading(n) {
  // 清除canvas内容
  ctx.clearRect(0, 0, circleX * 2, circleY * 2)

  // 中间的字
  ctx.font = fontSize + "px April"
  ctx.textAlign = "center"
  ctx.textBaseline = "middle"
  ctx.fillStyle = "#ffccff"
  ctx.fillText(parseFloat(n).toFixed(0) + "%", circleX, circleY)

  // 圆形
  circle(circleX, circleY, radius)

  // 圆弧
  sector(circleX, circleY, radius, 0, (n / 100) * 360)
  sector2(circleX, circleY, radius, 0, (n / 100) * 360)
  // 遮盖
  cover(circleX, circleY, radius)
}

// 更新进度
function changeProcess(val, times) {
  return new Promise(function (resolve, reject) {
    setTimeout(function () {
      loading(val)
      resolve()
    }, times)
  })
}

// 循环
async function loop(val) {
  while (true) {
    for (let i = 0; i < val; i++) {
      await changeProcess(i + 1, 1000);
    }
    return
  }
}

loop(percent)

关于“怎么使用JavaScript canvas复刻苹果发布会环形进度条”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“怎么使用JavaScript canvas复刻苹果发布会环形进度条”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI