广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >微信小程序使用canvas绘制钟表
  • 744
分享到

微信小程序使用canvas绘制钟表

2024-04-02 19:04:59 744人浏览 薄情痞子
摘要

本文实例为大家分享了微信小程序使用canvas绘制钟表的具体代码,供大家参考,具体内容如下 模拟时钟 利用canvas绘制时钟,实现模拟时钟的功能,钟表时间与系统时间保持一致,刻度将

本文实例为大家分享了微信小程序使用canvas绘制钟表的具体代码,供大家参考,具体内容如下

模拟时钟

利用canvas绘制时钟,实现模拟时钟的功能,钟表时间与系统时间保持一致,刻度将24小时制转换为12小时制,需要分别绘图出中心圆、外层大圆、分针、时针、秒针。

效果图如下:

代码如下:

index.wxml


<canvas canvas-id="myCanvas" class="mycanvas"></canvas>

index.wxss



.mycanvas {
  width: 100%;
  height: 100%;
  position: fixed;
}

index.js


Page({
  width: 0,  //窗口宽度
  height: 0,  //窗口高度
  onLoad: function () {
    // 获取系统信息
    wx.getSystemInfo({
      // 获取系统信息成功,保存获取到的系统窗口的宽高
      success: res => {
        // console.log(res)
        this.width = res.windowWidth
        this.height = res.windowHeight
        }
      })
    },
  timer: null,  //定时器
  onReady: function(){
    //创建ctx实例
     var ctx = wx.createCanvasContext('myCanvas')
    //将角度转换为弧度,方便在后面使用
     //计算公式:弧度 = 角度*Math.PI / 180
    const D6 = 6 * Math.PI / 180
     const D30 = 30 * Math.PI / 180
     const D90 = 90 * Math.PI / 180
     // 获取宽和高值
     var width = this.width, height = this.height
     // 计算表盘半径,留出 30px 外边距
    var radius = width / 2 -30
     // 每秒绘制一次
     draw()
     this.timer = setInterval(draw, 1000)
     // 绘制函数
     function draw(){
       // 设置坐标轴原点为窗口的中心点
       ctx.translate(width / 2, height / 2)
       // 绘制表盘
       drawClock(ctx,radius)
       // 绘制指针
       drawHand(ctx, radius)
       //执行绘制
       ctx.draw()
   }
  
    // 绘制表盘部分
    function drawClock(ctx, radius){
      // 绘制大圆
      // 大圆的半径 radius 线条粗细为2px
      ctx.setLineWidth(2)  //设置线条粗细
      ctx.beginPath()  //开始一个新路径
      ctx.arc(0, 0, radius, 0, 2 * Math.PI, true)
      ctx.stroke()   //画线
      // 绘制同心圆
      // 中心圆的半径为8px 线条粗细为1px
      ctx.setLineWidth(1)  //设置线条粗细
      ctx.beginPath()  //开始一个新路径
      ctx.arc(0, 0, 8, 0, 2 * Math.PI, true)
      ctx.stroke()   //画线
      // 绘制大刻度盘 线条粗细为5px
      ctx.setLineWidth(5)
      for (var i = 0; i < 12; ++i){
        // 以原点为中心顺时针(多次调用旋转的角度会叠加)
        // 大刻度盘需要绘制12个线条,表示12个小时,每次旋转30度
        ctx.rotate(D30)   // 360 / 12 = 30
        ctx.beginPath()
        ctx.moveTo(radius, 0)
        ctx.moveTo(radius - 15, 0)  //大刻度长度15px
        ctx.stroke()
      }
      // 绘制小刻度盘,线条粗细为1px
      ctx.setLineWidth(1)
      for(var i = 0; i < 60; ++i){
        // 小刻度盘需要绘制60个线条,表示60分钟或60秒,每次旋转6度
        ctx.rotate(D6)
        ctx.beginPath()
        ctx.moveTo(radius, 0)
        ctx.lineTo(radius - 10, 0) //小刻度盘长度10px
        ctx.stroke()
      }
      //绘制文本
      ctx.setFontSize(20)  //字号
      ctx.textBaseline = 'middle'  // 文本垂直居中
      // 计算文本距离表盘中心点的半径r
      var r = radius - 30
      for(var i = 1; i <= 12; ++i){
        // 利用三角函数计算文本坐标
        var x = r * Math.cos(D30 * i - D90)
        var y = r * Math.sin(D30 * i - D90)
        if(i > 10){ // 调整11 和12位置
          // 在画布上绘制文本 fillText(文本,左上角x坐标,左上角y坐标)
          ctx.fillText(i, x - 12, y)
        } else {
          ctx.fillText(i, x-6, y)
        }
      }
    }
    //绘制指针部分
    function drawHand(ctx, radius){
      var t = new Date()    // 获取当前时间
      var h = t.getHours()  //小时
      var m = t.getMinutes() //分
      var s = t.getSeconds()  // 秒
      h = h > 12 ? h -12 :h    //将24小时制转换为12小时制
      //时间从三点开始,逆时针旋转90度,指向12点
      ctx.rotate(-D90)
      //绘制时针
      ctx.save()   //记录旋转状态
      // 计算时针指向的刻度
      // 通过 30度 * h 可以计算每个整点的旋转角度
      // 如果时间不是整点,需要使用h + m / 60 + s / 3600 计算准确的偏移度
      ctx.rotate(D30 * (h + m / 60 + s / 3600))
      ctx.setLineWidth(6)
      ctx.beginPath()
      ctx.moveTo(-20, 0)
      ctx.lineTo(radius / 2.6, 0)
      ctx.stroke()
      ctx.restore()
      // 绘制分针
      ctx.save()
      ctx.rotate(D6 * (m + s / 60))
      ctx.setLineWidth(4)
      ctx.beginPath()
      ctx.moveTo(-20, 0)
      ctx.lineTo(radius / 1.8, 0)
      ctx.stroke()
      ctx.restore()
      //绘制秒针
      ctx.save()
      ctx.rotate(D6 * s)
      ctx.setLineWidth(2)
      ctx.beginPath()
      ctx.moveTo(-20, 0)
      ctx.lineTo(radius / 1.6, 0)
      ctx.stroke()
      ctx.restore() 
    } 
  }
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: 微信小程序使用canvas绘制钟表

本文链接: https://www.lsjlt.com/news/127061.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 微信小程序使用canvas绘制钟表
    本文实例为大家分享了微信小程序使用canvas绘制钟表的具体代码,供大家参考,具体内容如下 模拟时钟 利用canvas绘制时钟,实现模拟时钟的功能,钟表时间与系统时间保持一致,刻度将...
    99+
    2022-11-12
  • 微信小程序如何使用canvas绘制钟表
    这篇文章给大家分享的是有关微信小程序如何使用canvas绘制钟表的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。模拟时钟利用canvas绘制时钟,实现模拟时钟的功能,钟表时间与系统时间保持一致,刻度将24小时制转换...
    99+
    2023-06-15
  • 微信小程序怎么绘制打卡时钟
    这篇文章主要介绍了微信小程序怎么绘制打卡时钟的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序怎么绘制打卡时钟文章都会有所收获,下面我们一起来看看吧。一、项目展示这是一款简单实用的小时钟工具分为工作和休息...
    99+
    2023-06-30
  • 微信小程序实战之打卡时钟的绘制
    目录一、项目展示二、首页三、设置一、项目展示 这是一款简单实用的小时钟工具 分为工作和休息两种状态 用户可以设置相应的时间 所有的时钟记录都会被保存下来 二、首页 首页由计时器、任...
    99+
    2022-11-13
  • 微信小程序开发中如何使用canvas绘制坐标图
    这篇文章主要为大家展示了“微信小程序开发中如何使用canvas绘制坐标图”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“微信小程序开发中如何使用canvas绘制坐标图”这篇文章吧。线图functi...
    99+
    2023-06-26
  • 在微信小程序中如何使用canvas绘制天气折线图
    今天小编给大家分享一下在微信小程序中如何使用canvas绘制天气折线图的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。折线效果...
    99+
    2023-06-29
  • 微信小程序的canvas如何使用
    这篇文章主要介绍了微信小程序的canvas如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序的canvas如何使用文章都会有所收获,下面我们一起来看看吧。canv...
    99+
    2022-10-19
  • 微信小程序中如何使用canvas制作K线
    这篇文章主要介绍了微信小程序中如何使用canvas制作K线,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言:我们目的是想要一条平滑的曲线来...
    99+
    2022-10-19
  • 微信小程序画布canvas怎么使用
    这篇“微信小程序画布canvas怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“微信小程序画布canvas怎么使用”文...
    99+
    2023-06-26
  • 微信小程序canvas中translate怎么用
    本篇内容介绍了“微信小程序canvas中translate怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!canvasContext.t...
    99+
    2023-06-26
  • 微信小程序用canvas实现电子签名
    本文实例为大家分享了微信小程序用canvas实现电子签名的具体代码,供大家参考,具体内容如下 <view class="sign-contain">     <vi...
    99+
    2022-11-13
  • 如何使用PHP实现微信小程序的闹钟功能?
    如何使用PHP实现微信小程序的闹钟功能?随着微信小程序的普及,更多的开发者开始关注如何在微信小程序中实现各种实用的功能。其中,闹钟功能是一项非常实用的功能之一。本文将介绍如何使用PHP编写后端接口,并结合微信小程序的前端代码,实现一个简单的...
    99+
    2023-10-27
    微信 PHP 闹钟
  • 在微信小程序中怎么使用canvas+Painter插件制作二维码
    本篇内容介绍了“在微信小程序中怎么使用canvas+Painter插件制作二维码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、实现原理使...
    99+
    2023-06-25
  • 基于微信小程序+爬虫制作一个表情包小程序
    跟朋友聊天斗图失败气急败坏的我选择直接制作一个爬虫表情包小程序,从源头解决问题,从此再也不用担心在斗图中落入下风 精彩专栏持续更新↓↓↓ 微信小程序实战开发专栏 ...
    99+
    2023-08-31
    微信小程序 小程序 表情包 爬虫 windows
  • 使用微信小程序实现表格排序功能
    使用微信小程序实现表格排序功能随着微信小程序的流行,越来越多的开发者开始探索如何利用微信小程序实现更多有趣实用的功能。其中,实现表格排序功能是许多开发者感兴趣的一个话题。本文将介绍如何使用微信小程序实现表格排序功能,并提供具体的代码示例。一...
    99+
    2023-11-21
    表格 排序 微信小程序
  • 微信小程序用canvas实现圆形进度条
    本文实例为大家分享了微信小程序用canvas实现圆形进度条的具体代码,供大家参考,具体内容如下 先放效果图,如下: 1. wxml文件代码如下 对于圆形进度条中间的文字,如果是简单...
    99+
    2022-11-13
  • 微信小程序显示loading效果,微信小程序节流效果,微信小程序生命周期,微信小程序组件的创建与使用
    一、显示loading效果         文档地址:wx.showLoading(Object object) | 微信开放文档         请求前 显示loading 效果,请求结束后隐藏loading // 在请求模块中wx.sh...
    99+
    2023-09-14
    微信小程序 小程序 微信
  • 怎么利用小程序的canvas来绘制二维码
    本篇文章给大家分享的是有关怎么利用小程序的canvas来绘制二维码,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在微信小程序的业务中会有一些需要展示二维码的场景。静态二维码可以...
    99+
    2023-06-26
  • 微信小程序怎么将绘图上下文中的描述画到canvas中
    本篇内容主要讲解“微信小程序怎么将绘图上下文中的描述画到canvas中”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“微信小程序怎么将绘图上下文中的描述画到canvas中”吧!canvasCont...
    99+
    2023-06-26
  • 微信小程序中使用table
    ...
    99+
    2023-08-16
    微信小程序 小程序 table
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作